| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #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 ui |
| |
| namespace ash { |
| |
| // `ShortcutInputHandler` intercepts events and forwards them to other |
| // components for the purposes of inputting shortcuts in ChromeOS. Utilized in |
| // the Peripheral Customization and Shortcut Customization features. This class |
| // is intended to be a singleton and used by both apps through the same |
| // instance. |
| class ASH_EXPORT ShortcutInputHandler |
| : public ui::EventHandler, |
| public PrerewrittenEventForwarder::Observer { |
| public: |
| class Observer : public base::CheckedObserver { |
| public: |
| // Called whenever a key event is pressed by the user when the |
| // `ShortcutInputHandler` is observing. |
| virtual void OnShortcutInputEventPressed( |
| const mojom::KeyEvent& key_event) = 0; |
| |
| // Called whenever a key event is released by the user when the |
| // `ShortcutInputHandler` is observing. |
| virtual void OnShortcutInputEventReleased( |
| const mojom::KeyEvent& key_event) = 0; |
| |
| // Called whenever a key event is pressed by the user when the |
| // `ShortcutInputHandler` is observing. Sends the pre-rewritten event. |
| virtual void OnPrerewrittenShortcutInputEventPressed( |
| const mojom::KeyEvent& key_event) = 0; |
| |
| // Called whenever a key event is released by the user when the |
| // `ShortcutInputHandler` is observing. Sends the pre-rewritten event. |
| virtual void OnPrerewrittenShortcutInputEventReleased( |
| const mojom::KeyEvent& key_event) = 0; |
| }; |
| |
| ShortcutInputHandler(); |
| ~ShortcutInputHandler() override; |
| ShortcutInputHandler(const ShortcutInputHandler&) = delete; |
| ShortcutInputHandler& operator=(const ShortcutInputHandler&) = delete; |
| |
| void Initialize(); |
| |
| // ui::EventHandler: |
| void OnKeyEvent(ui::KeyEvent* event) override; |
| |
| // PrerewrittenEventForwarder::Observer: |
| 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; |
| }; |
| |
| } // namespace ash |
| |
| #endif // ASH_ACCELERATORS_SHORTCUT_INPUT_HANDLER_H_ |