| Index: services/ui/ws/display.h
|
| diff --git a/services/ui/ws/display.h b/services/ui/ws/display.h
|
| index 98acc83ec341dd3de82475c22aa026a4a87b5a57..1ace44a2e574ad06c5239ebf5031590efe8a8585 100644
|
| --- a/services/ui/ws/display.h
|
| +++ b/services/ui/ws/display.h
|
| @@ -149,8 +149,21 @@ class Display : public PlatformDisplayDelegate,
|
| // |display_root| being destroyed.
|
| void RemoveWindowManagerDisplayRoot(WindowManagerDisplayRoot* display_root);
|
|
|
| + // Sets the native cursor to |cursor|.
|
| void UpdateNativeCursor(const ui::CursorData& cursor);
|
|
|
| + // When the cursor is locked, changes to the cursor are queued up. Queued
|
| + // changes are performed atomically when the cursor is unlocked.
|
| + void LockCursor();
|
| + void UnlockCursor();
|
| +
|
| + // Whether the cursor is visible on the display.
|
| + void ShowCursor();
|
| + void HideCursor();
|
| +
|
| + // Sets a cursor globally, which overrides the per-window cursors.
|
| + void SetGlobalOverrideCursor(const base::Optional<ui::CursorData>& cursor);
|
| +
|
| // mojom::WindowTreeHost:
|
| void SetSize(const gfx::Size& size) override;
|
| void SetTitle(const std::string& title) override;
|
| @@ -167,6 +180,8 @@ class Display : public PlatformDisplayDelegate,
|
| using WindowManagerDisplayRootMap =
|
| std::map<UserId, WindowManagerDisplayRoot*>;
|
|
|
| + class CursorState;
|
| +
|
| // Inits the necessary state once the display is ready.
|
| void InitWindowManagerDisplayRoots();
|
|
|
| @@ -181,6 +196,9 @@ class Display : public PlatformDisplayDelegate,
|
| // pixels.
|
| void CreateRootWindow(const gfx::Size& size);
|
|
|
| + // Synchronizes |current_state_| with the platform display.
|
| + void SetPlatformCursor();
|
| +
|
| // PlatformDisplayDelegate:
|
| ServerWindow* GetRootWindow() override;
|
| EventSink* GetEventSink() override;
|
| @@ -218,8 +236,15 @@ class Display : public PlatformDisplayDelegate,
|
| // external window mode this will be invalid.
|
| display::Display display_;
|
|
|
| - // The last cursor set. Used to track whether we need to change the cursor.
|
| - ui::CursorData last_cursor_;
|
| + // Number of times LockCursor() has been invoked without a corresponding
|
| + // UnlockCursor().
|
| + int cursor_lock_count_ = 0u;
|
| +
|
| + // The current state of the cursor.
|
| + std::unique_ptr<CursorState> current_state_;
|
| +
|
| + // The cursor state to restore when the cursor is unlocked.
|
| + std::unique_ptr<CursorState> state_on_unlock_;
|
|
|
| ServerWindowTracker activation_parents_;
|
|
|
|
|