#ifndef ASH_ACCELERATORS_SHORTCUT_INPUT_HANDLER_H_
#define ASH_ACCELERATORS_SHORTCUT_INPUT_HANDLER_H_
#include "ash/ash_export.h"
#include "ash/events/prerewritten_event_forwarder.h"
#include "ash/public/mojom/input_device_settings.mojom-forward.h"
#include "base/observer_list.h"
#include "ui/events/event_handler.h"
namespace ui {
class KeyEvent;
}
namespace ash {
class ASH_EXPORT ShortcutInputHandler
: public ui::EventHandler,
public PrerewrittenEventForwarder::Observer {
public:
class Observer : public base::CheckedObserver {
public:
virtual void OnShortcutInputEventPressed(
const mojom::KeyEvent& key_event) = 0;
virtual void OnShortcutInputEventReleased(
const mojom::KeyEvent& key_event) = 0;
virtual void OnPrerewrittenShortcutInputEventPressed(
const mojom::KeyEvent& key_event) = 0;
virtual void OnPrerewrittenShortcutInputEventReleased(
const mojom::KeyEvent& key_event) = 0;
};
ShortcutInputHandler();
~ShortcutInputHandler() override;
ShortcutInputHandler(const ShortcutInputHandler&) = delete;
ShortcutInputHandler& operator=(const ShortcutInputHandler&) = delete;
void Initialize();
void OnKeyEvent(ui::KeyEvent* event) override;
void OnPrerewriteKeyInputEvent(const ui::KeyEvent& event) override;
void SetShouldConsumeKeyEvents(bool should_consume_key_events);
bool should_consume_key_events() const { return should_consume_key_events_; }
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
private:
bool should_consume_key_events_ = false;
base::ObserverList<Observer> observers_;
bool initialized_ = false;
};
}
#endif