// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_VIEWS_COCOA_NATIVE_WIDGET_MAC_EVENT_MONITOR_H_
#define UI_VIEWS_COCOA_NATIVE_WIDGET_MAC_EVENT_MONITOR_H_
#include "base/functional/callback_helpers.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "ui/views/views_export.h"
namespace ui {
class Event;
} // namespace ui
namespace views {
class NativeWidgetMacNSWindowHost;
// A class for event monitoring. This will create a NSEvent local monitor in
// for this widget (in this process or in a remote process). The monitor will
// call back through the Client interface.
class VIEWS_EXPORT NativeWidgetMacEventMonitor {
public:
class Client {
public:
// Called for every observed NSEvent. If this client handles the event,
// it should set `event_handled` to true. The initial value of
// `event_handled` will be true if another client handled this event.
virtual void NativeWidgetMacEventMonitorOnEvent(ui::Event* event,
bool* event_handled) = 0;
};
~NativeWidgetMacEventMonitor();
private:
friend class NativeWidgetMacNSWindowHost;
explicit NativeWidgetMacEventMonitor(Client* client);
const raw_ptr<Client> client_;
// Scoped closure runner that will unregister `this` from its
// NativeWidgetMacNSWindowHost when `this` is destroyed.
base::ScopedClosureRunner remove_closure_runner_;
};
} // namespace views
#endif // UI_VIEWS_COCOA_NATIVE_WIDGET_MAC_EVENT_MONITOR_H_