warp cursor on login to center

This commit is contained in:
vaxerski 2023-01-28 12:26:33 +00:00
parent af37a3895f
commit 61c9e50bcd
3 changed files with 11 additions and 3 deletions

View file

@ -2021,14 +2021,14 @@ CWindow* CCompositor::getWindowByRegex(const std::string& regexp) {
return nullptr; return nullptr;
} }
void CCompositor::warpCursorTo(const Vector2D& pos) { void CCompositor::warpCursorTo(const Vector2D& pos, bool force) {
// warpCursorTo should only be used for warps that // warpCursorTo should only be used for warps that
// should be disabled with no_cursor_warps // should be disabled with no_cursor_warps
static auto* const PNOWARPS = &g_pConfigManager->getConfigValuePtr("general:no_cursor_warps")->intValue; static auto* const PNOWARPS = &g_pConfigManager->getConfigValuePtr("general:no_cursor_warps")->intValue;
if (*PNOWARPS) if (*PNOWARPS && !force)
return; return;
wlr_cursor_warp(m_sWLRCursor, m_sSeat.mouse->mouse, pos.x, pos.y); wlr_cursor_warp(m_sWLRCursor, m_sSeat.mouse->mouse, pos.x, pos.y);

View file

@ -167,7 +167,7 @@ class CCompositor {
void addToFadingOutSafe(SLayerSurface*); void addToFadingOutSafe(SLayerSurface*);
void addToFadingOutSafe(CWindow*); void addToFadingOutSafe(CWindow*);
CWindow* getWindowByRegex(const std::string&); CWindow* getWindowByRegex(const std::string&);
void warpCursorTo(const Vector2D&); void warpCursorTo(const Vector2D&, bool force = false);
SLayerSurface* getLayerSurfaceFromWlr(wlr_layer_surface_v1*); SLayerSurface* getLayerSurfaceFromWlr(wlr_layer_surface_v1*);
SLayerSurface* getLayerSurfaceFromSurface(wlr_surface*); SLayerSurface* getLayerSurfaceFromSurface(wlr_surface*);
void closeWindow(CWindow*); void closeWindow(CWindow*);

View file

@ -44,6 +44,9 @@ void Events::listener_newOutput(wl_listener* listener, void* data) {
// new monitor added, let's accomodate for that. // new monitor added, let's accomodate for that.
const auto OUTPUT = (wlr_output*)data; const auto OUTPUT = (wlr_output*)data;
// for warping the cursor on launch
static bool firstLaunch = true;
if (!OUTPUT->name) { if (!OUTPUT->name) {
Debug::log(ERR, "New monitor has no name?? Ignoring"); Debug::log(ERR, "New monitor has no name?? Ignoring");
return; return;
@ -89,6 +92,11 @@ void Events::listener_newOutput(wl_listener* listener, void* data) {
g_pConfigManager->m_bWantsMonitorReload = true; g_pConfigManager->m_bWantsMonitorReload = true;
g_pCompositor->scheduleFrameForMonitor(PNEWMONITOR); 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) { void Events::listener_monitorFrame(void* owner, void* data) {