Index: components/mus/ws/event_dispatcher.h |
diff --git a/components/mus/ws/event_dispatcher.h b/components/mus/ws/event_dispatcher.h |
deleted file mode 100644 |
index a617807398187ae367220ed1d17f95af883ff12e..0000000000000000000000000000000000000000 |
--- a/components/mus/ws/event_dispatcher.h |
+++ /dev/null |
@@ -1,236 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef COMPONENTS_MUS_WS_EVENT_DISPATCHER_H_ |
-#define COMPONENTS_MUS_WS_EVENT_DISPATCHER_H_ |
- |
-#include <stdint.h> |
- |
-#include <map> |
-#include <memory> |
-#include <utility> |
- |
-#include "base/macros.h" |
-#include "components/mus/common/types.h" |
-#include "components/mus/public/interfaces/event_matcher.mojom.h" |
-#include "components/mus/ws/modal_window_controller.h" |
-#include "components/mus/ws/server_window_observer.h" |
-#include "ui/gfx/geometry/rect_f.h" |
- |
-namespace ui { |
-class Event; |
-class KeyEvent; |
-class LocatedEvent; |
-} |
- |
-namespace mus { |
-namespace ws { |
- |
-class Accelerator; |
-class EventDispatcherDelegate; |
-class ServerWindow; |
- |
-namespace test { |
-class EventDispatcherTestApi; |
-} |
- |
-// Handles dispatching events to the right location as well as updating focus. |
-class EventDispatcher : public ServerWindowObserver { |
- public: |
- explicit EventDispatcher(EventDispatcherDelegate* delegate); |
- ~EventDispatcher() override; |
- |
- // Cancels capture and stops tracking any pointer events. This does not send |
- // any events to the delegate. |
- void Reset(); |
- |
- void SetMousePointerScreenLocation(const gfx::Point& screen_location); |
- const gfx::Point& mouse_pointer_last_location() const { |
- return mouse_pointer_last_location_; |
- } |
- |
- // If we still have the window of the last mouse move, returns true and sets |
- // the current cursor to use to |cursor_out|. |
- bool GetCurrentMouseCursor(int32_t* cursor_out); |
- |
- // |capture_window_| will receive all input. See window_tree.mojom for |
- // details. |
- ServerWindow* capture_window() { return capture_window_; } |
- const ServerWindow* capture_window() const { return capture_window_; } |
- // Setting capture can fail if the window is blocked by a modal window |
- // (indicated by returning |false|). |
- bool SetCaptureWindow(ServerWindow* capture_window, |
- ClientSpecificId client_id); |
- |
- // Id of the client that capture events are sent to. |
- ClientSpecificId capture_window_client_id() const { |
- return capture_window_client_id_; |
- } |
- |
- // Adds a system modal window. The window remains modal to system until it is |
- // destroyed. There can exist multiple system modal windows, in which case the |
- // one that is visible and added most recently or shown most recently would be |
- // the active one. |
- void AddSystemModalWindow(ServerWindow* window); |
- |
- // Checks if |modal_window| is a visible modal window that blocks current |
- // capture window and if that's the case, releases the capture. |
- void ReleaseCaptureBlockedByModalWindow(const ServerWindow* modal_window); |
- |
- // Checks if the current capture window is blocked by any visible modal window |
- // and if that's the case, releases the capture. |
- void ReleaseCaptureBlockedByAnyModalWindow(); |
- |
- // Retrieves the ServerWindow of the last mouse move. |
- ServerWindow* mouse_cursor_source_window() const { |
- return mouse_cursor_source_window_; |
- } |
- |
- // If the mouse cursor is still over |mouse_cursor_source_window_|, updates |
- // whether we are in the non-client area. Used when |
- // |mouse_cursor_source_window_| has changed its properties. |
- void UpdateNonClientAreaForCurrentWindow(); |
- |
- // Possibly updates the cursor. If we aren't in an implicit capture, we take |
- // the last known location of the mouse pointer, and look for the |
- // ServerWindow* under it. |
- void UpdateCursorProviderByLastKnownLocation(); |
- |
- // Adds an accelerator with the given id and event-matcher. If an accelerator |
- // already exists with the same id or the same matcher, then the accelerator |
- // is not added. Returns whether adding the accelerator was successful or not. |
- bool AddAccelerator(uint32_t id, mojom::EventMatcherPtr event_matcher); |
- void RemoveAccelerator(uint32_t id); |
- |
- // Processes the supplied event, informing the delegate as approriate. This |
- // may result in generating any number of events. |
- void ProcessEvent(const ui::Event& event); |
- |
- private: |
- friend class test::EventDispatcherTestApi; |
- |
- // Keeps track of state associated with an active pointer. |
- struct PointerTarget { |
- PointerTarget() |
- : window(nullptr), |
- is_mouse_event(false), |
- in_nonclient_area(false), |
- is_pointer_down(false) {} |
- |
- // NOTE: this is set to null if the window is destroyed before a |
- // corresponding release/cancel. |
- ServerWindow* window; |
- |
- bool is_mouse_event; |
- |
- // Did the pointer event start in the non-client area. |
- bool in_nonclient_area; |
- |
- bool is_pointer_down; |
- }; |
- |
- void ProcessKeyEvent(const ui::KeyEvent& event); |
- |
- bool IsTrackingPointer(int32_t pointer_id) const { |
- return pointer_targets_.count(pointer_id) > 0; |
- } |
- |
- // EventDispatcher provides the following logic for pointer events: |
- // . wheel events go to the current target of the associated pointer. If |
- // there is no target, they go to the deepest window. |
- // . move (not drag) events go to the deepest window. |
- // . when a pointer goes down all events until the corresponding up or |
- // cancel go to the deepest target. For mouse events the up only occurs |
- // when no buttons on the mouse are down. |
- // This also generates exit events as appropriate. For example, if the mouse |
- // moves between one window to another an exit is generated on the first. |
- void ProcessLocatedEvent(const ui::LocatedEvent& event); |
- |
- // Adds |pointer_target| to |pointer_targets_|. |
- void StartTrackingPointer(int32_t pointer_id, |
- const PointerTarget& pointer_target); |
- |
- // Removes a PointerTarget from |pointer_targets_|. |
- void StopTrackingPointer(int32_t pointer_id); |
- |
- // Starts tracking the pointer for |event|, or if already tracking the |
- // pointer sends the appropriate event to the delegate and updates the |
- // currently tracked PointerTarget appropriately. |
- void UpdateTargetForPointer(int32_t pointer_id, |
- const ui::LocatedEvent& event); |
- |
- // Returns a PointerTarget from the supplied event. |
- PointerTarget PointerTargetForEvent(const ui::LocatedEvent& event); |
- |
- // Returns true if any pointers are in the pressed/down state. |
- bool AreAnyPointersDown() const; |
- |
- // If |target->window| is valid, then passes the event to the delegate. |
- void DispatchToPointerTarget(const PointerTarget& target, |
- const ui::LocatedEvent& event); |
- |
- // Dispatch |event| to the delegate. |
- void DispatchToClient(ServerWindow* window, |
- ClientSpecificId client_id, |
- const ui::LocatedEvent& event); |
- |
- // Stops sending pointer events to |window|. This does not remove the entry |
- // for |window| from |pointer_targets_|, rather it nulls out the window. This |
- // way we continue to eat events until the up/cancel is received. |
- void CancelPointerEventsToTarget(ServerWindow* window); |
- |
- // Used to observe a window. Can be called multiple times on a window. To |
- // unobserve a window, UnobserveWindow() should be called the same number of |
- // times. |
- void ObserveWindow(ServerWindow* winodw); |
- void UnobserveWindow(ServerWindow* winodw); |
- |
- // Returns an Accelerator bound to the specified code/flags, and of the |
- // matching |phase|. Otherwise returns null. |
- Accelerator* FindAccelerator(const ui::KeyEvent& event, |
- const ui::mojom::AcceleratorPhase phase); |
- |
- ServerWindow* FindDeepestVisibleWindowForEvents(gfx::Point* location); |
- |
- // ServerWindowObserver: |
- void OnWillChangeWindowHierarchy(ServerWindow* window, |
- ServerWindow* new_parent, |
- ServerWindow* old_parent) override; |
- void OnWindowVisibilityChanged(ServerWindow* window) override; |
- void OnWindowDestroyed(ServerWindow* window) override; |
- |
- EventDispatcherDelegate* delegate_; |
- |
- ServerWindow* capture_window_; |
- ClientSpecificId capture_window_client_id_; |
- |
- ModalWindowController modal_window_controller_; |
- |
- bool mouse_button_down_; |
- ServerWindow* mouse_cursor_source_window_; |
- bool mouse_cursor_in_non_client_area_; |
- |
- // The on screen location of the mouse pointer. This can be outside the |
- // bounds of |mouse_cursor_source_window_|, which can capture the cursor. |
- gfx::Point mouse_pointer_last_location_; |
- |
- std::map<uint32_t, std::unique_ptr<Accelerator>> accelerators_; |
- |
- using PointerIdToTargetMap = std::map<int32_t, PointerTarget>; |
- // |pointer_targets_| contains the active pointers. For a mouse based pointer |
- // a PointerTarget is always active (and present in |pointer_targets_|). For |
- // touch based pointers the pointer is active while down and removed on |
- // cancel or up. |
- PointerIdToTargetMap pointer_targets_; |
- |
- // Keeps track of number of observe requests for each observed window. |
- std::map<const ServerWindow*, uint8_t> observed_windows_; |
- |
- DISALLOW_COPY_AND_ASSIGN(EventDispatcher); |
-}; |
- |
-} // namespace ws |
-} // namespace mus |
- |
-#endif // COMPONENTS_MUS_WS_EVENT_DISPATCHER_H_ |