| Index: services/ui/ws/window_manager_state.h
|
| diff --git a/services/ui/ws/window_manager_state.h b/services/ui/ws/window_manager_state.h
|
| index c9a3b72c507873405f79030be8d7b2422f05481b..9c758810e74bcbf0dd76f7592839df500a35df40 100644
|
| --- a/services/ui/ws/window_manager_state.h
|
| +++ b/services/ui/ws/window_manager_state.h
|
| @@ -79,11 +79,25 @@ class WindowManagerState : public EventDispatcherDelegate {
|
| // TODO(sky): make this private and use a callback.
|
| void OnEventAck(mojom::WindowTree* tree, mojom::EventResult result);
|
|
|
| + // Called when the WindowManager acks an accelerator.
|
| + void OnAcceleratorAck(mojom::EventResult result);
|
| +
|
| private:
|
| class ProcessedEventTarget;
|
| friend class Display;
|
| friend class test::WindowManagerStateTestApi;
|
|
|
| + enum class EventDispatchPhase {
|
| + // Not actively dispatching.
|
| + NONE,
|
| +
|
| + // A PRE_TARGET accelerator has been encountered and we're awaiting the ack.
|
| + PRE_TARGET_ACCELERATOR,
|
| +
|
| + // Dispatching to the target, awaiting the ack.
|
| + TARGET,
|
| + };
|
| +
|
| // There are two types of events that may be queued, both occur only when
|
| // waiting for an ack from a client.
|
| // . We get an event from the PlatformDisplay. This results in |event| being
|
| @@ -113,6 +127,8 @@ class WindowManagerState : public EventDispatcherDelegate {
|
| // |window|. |window| corresponds to the root of a Display.
|
| ServerWindow* GetWindowManagerRoot(ServerWindow* window);
|
|
|
| + // Called if the client doesn't ack an event in the appropriate amount of
|
| + // time.
|
| void OnEventAckTimeout(ClientSpecificId client_id);
|
|
|
| // Schedules an event to be processed later.
|
| @@ -136,8 +152,13 @@ class WindowManagerState : public EventDispatcherDelegate {
|
| // Returns true if the accelerator was handled.
|
| bool HandleDebugAccelerator(uint32_t accelerator_id);
|
|
|
| + // Called when waiting for an event or accelerator to be processed by |tree|.
|
| + void ScheduleInputEventTimeout(WindowTree* tree);
|
| +
|
| // EventDispatcherDelegate:
|
| - void OnAccelerator(uint32_t accelerator_id, const ui::Event& event) override;
|
| + void OnAccelerator(uint32_t accelerator_id,
|
| + const ui::Event& event,
|
| + AcceleratorPhase phase) override;
|
| void SetFocusedWindowFromEventDispatcher(ServerWindow* window) override;
|
| ServerWindow* GetFocusedWindowForEventDispatcher() override;
|
| void SetNativeCapture(ServerWindow* window) override;
|
| @@ -161,7 +182,10 @@ class WindowManagerState : public EventDispatcherDelegate {
|
| bool got_frame_decoration_values_ = false;
|
| mojom::FrameDecorationValuesPtr frame_decoration_values_;
|
|
|
| + EventDispatchPhase event_dispatch_phase_ = EventDispatchPhase::NONE;
|
| + // The tree we're waiting to process the current accelerator or event.
|
| mojom::WindowTree* tree_awaiting_input_ack_ = nullptr;
|
| + // The event we're awaiting an accelerator or input ack from.
|
| std::unique_ptr<ui::Event> event_awaiting_input_ack_;
|
| base::WeakPtr<Accelerator> post_target_accelerator_;
|
| std::queue<std::unique_ptr<QueuedEvent>> event_queue_;
|
|
|