From 61c9e50bcd6c51e026203f194bc186eda3c44a38 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sat, 28 Jan 2023 12:26:33 +0000 Subject: [PATCH] warp cursor on login to center --- src/Compositor.cpp | 4 ++-- src/Compositor.hpp | 2 +- src/events/Monitors.cpp | 8 ++++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index ca62843e..9269dff0 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2021,14 +2021,14 @@ CWindow* CCompositor::getWindowByRegex(const std::string& regexp) { return nullptr; } -void CCompositor::warpCursorTo(const Vector2D& pos) { +void CCompositor::warpCursorTo(const Vector2D& pos, bool force) { // warpCursorTo should only be used for warps that // should be disabled with no_cursor_warps static auto* const PNOWARPS = &g_pConfigManager->getConfigValuePtr("general:no_cursor_warps")->intValue; - if (*PNOWARPS) + if (*PNOWARPS && !force) return; wlr_cursor_warp(m_sWLRCursor, m_sSeat.mouse->mouse, pos.x, pos.y); diff --git a/src/Compositor.hpp b/src/Compositor.hpp index 0d9dba67..efb8bcc7 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -167,7 +167,7 @@ class CCompositor { void addToFadingOutSafe(SLayerSurface*); void addToFadingOutSafe(CWindow*); CWindow* getWindowByRegex(const std::string&); - void warpCursorTo(const Vector2D&); + void warpCursorTo(const Vector2D&, bool force = false); SLayerSurface* getLayerSurfaceFromWlr(wlr_layer_surface_v1*); SLayerSurface* getLayerSurfaceFromSurface(wlr_surface*); void closeWindow(CWindow*); diff --git a/src/events/Monitors.cpp b/src/events/Monitors.cpp index a631b0a1..1e199683 100644 --- a/src/events/Monitors.cpp +++ b/src/events/Monitors.cpp @@ -44,6 +44,9 @@ void Events::listener_newOutput(wl_listener* listener, void* data) { // new monitor added, let's accomodate for that. const auto OUTPUT = (wlr_output*)data; + // for warping the cursor on launch + static bool firstLaunch = true; + if (!OUTPUT->name) { Debug::log(ERR, "New monitor has no name?? Ignoring"); return; @@ -89,6 +92,11 @@ void Events::listener_newOutput(wl_listener* listener, void* data) { g_pConfigManager->m_bWantsMonitorReload = true; g_pCompositor->scheduleFrameForMonitor(PNEWMONITOR); + + if (firstLaunch) { + firstLaunch = false; + g_pCompositor->warpCursorTo(PNEWMONITOR->vecPosition + PNEWMONITOR->vecSize / 2.f, true); + } } void Events::listener_monitorFrame(void* owner, void* data) {