diff --git a/Userland/Services/WindowServer/ClientConnection.cpp b/Userland/Services/WindowServer/ClientConnection.cpp index 2e59e97d8f..b8ef0bb5f5 100644 --- a/Userland/Services/WindowServer/ClientConnection.cpp +++ b/Userland/Services/WindowServer/ClientConnection.cpp @@ -894,6 +894,18 @@ void ClientConnection::pong() set_unresponsive(false); } +void ClientConnection::set_global_cursor_position(Gfx::IntPoint const& position) +{ + if (!Screen::main().rect().contains(position)) { + did_misbehave("SetGlobalCursorPosition with bad position"); + return; + } + if (position != ScreenInput::the().cursor_location()) { + ScreenInput::the().set_cursor_location(position); + Compositor::the().invalidate_cursor(); + } +} + Messages::WindowServer::GetGlobalCursorPositionResponse ClientConnection::get_global_cursor_position() { return ScreenInput::the().cursor_location(); diff --git a/Userland/Services/WindowServer/ClientConnection.h b/Userland/Services/WindowServer/ClientConnection.h index 2bce8d7f0f..7ad4ae04e3 100644 --- a/Userland/Services/WindowServer/ClientConnection.h +++ b/Userland/Services/WindowServer/ClientConnection.h @@ -150,6 +150,7 @@ private: virtual void set_window_progress(i32, Optional const&) override; virtual void refresh_system_theme() override; virtual void pong() override; + virtual void set_global_cursor_position(Gfx::IntPoint const&) override; virtual Messages::WindowServer::GetGlobalCursorPositionResponse get_global_cursor_position() override; virtual void set_mouse_acceleration(float) override; virtual Messages::WindowServer::GetMouseAccelerationResponse get_mouse_acceleration() override; diff --git a/Userland/Services/WindowServer/WindowServer.ipc b/Userland/Services/WindowServer/WindowServer.ipc index dd7eb53afd..a4e784cbed 100644 --- a/Userland/Services/WindowServer/WindowServer.ipc +++ b/Userland/Services/WindowServer/WindowServer.ipc @@ -127,6 +127,7 @@ endpoint WindowServer enable_display_link() =| disable_display_link() =| + set_global_cursor_position(Gfx::IntPoint position) =| get_global_cursor_position() => (Gfx::IntPoint position) set_mouse_acceleration(float factor) =|