From 75dc67e63f1873f1e97f73daf0ce284f75afa97c Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 7 Apr 2026 14:24:51 +0100 Subject: input: lazy cache getWindowIdeal() --- src/managers/input/InputManager.cpp | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'src/managers/input') diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 875fd0b6..8672d28c 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -410,8 +410,19 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse, st foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &PMONITOR->m_layerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP], &surfaceCoords, &pFoundLayerSurface); // then, we check if the workspace doesn't have a fullscreen window - const auto PWORKSPACE = PMONITOR->m_activeSpecialWorkspace ? PMONITOR->m_activeSpecialWorkspace : PMONITOR->m_activeWorkspace; - const auto PWINDOWIDEAL = g_pCompositor->vectorToWindowUnified(mouseCoords, Desktop::View::RESERVED_EXTENTS | Desktop::View::INPUT_EXTENTS | Desktop::View::ALLOW_FLOATING); + const auto PWORKSPACE = PMONITOR->m_activeSpecialWorkspace ? PMONITOR->m_activeSpecialWorkspace : PMONITOR->m_activeWorkspace; + + bool windowIdealQueried = false; + PHLWINDOW pWindowIdeal; + const auto getWindowIdeal = [&]() -> const PHLWINDOW& { + if (!windowIdealQueried) { + pWindowIdeal = g_pCompositor->vectorToWindowUnified(mouseCoords, Desktop::View::RESERVED_EXTENTS | Desktop::View::INPUT_EXTENTS | Desktop::View::ALLOW_FLOATING); + windowIdealQueried = true; + } + + return pWindowIdeal; + }; + if (PWORKSPACE->m_hasFullscreenWindow && PWORKSPACE->m_fullscreenMode == FSMODE_FULLSCREEN) { const auto IS_LS_UNFOCUSABLE = pFoundLayerSurface && (pFoundLayerSurface->m_layer < ZWLR_LAYER_SHELL_V1_LAYER_TOP || @@ -429,6 +440,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse, st return; } + const auto& PWINDOWIDEAL = getWindowIdeal(); if (PWINDOWIDEAL && ((PWINDOWIDEAL->m_isFloating && (PWINDOWIDEAL->m_createdOverFullscreen || PWINDOWIDEAL->m_pinned)) /* floating over fullscreen or pinned */ || (PMONITOR->m_activeSpecialWorkspace == PWINDOWIDEAL->m_workspace) /* on an open special workspace */)) @@ -449,9 +461,9 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse, st if (PWORKSPACE->m_hasFullscreenWindow && PWORKSPACE->m_fullscreenMode == FSMODE_MAXIMIZED) { if (!foundSurface) { if (PMONITOR->m_activeSpecialWorkspace) { + const auto& PWINDOWIDEAL = getWindowIdeal(); if (pFoundWindow != PWINDOWIDEAL) - pFoundWindow = - g_pCompositor->vectorToWindowUnified(mouseCoords, Desktop::View::RESERVED_EXTENTS | Desktop::View::INPUT_EXTENTS | Desktop::View::ALLOW_FLOATING); + pFoundWindow = PWINDOWIDEAL; if (pFoundWindow && !pFoundWindow->onSpecialWorkspace()) { pFoundWindow = PWORKSPACE->getFullscreenWindow(); @@ -464,9 +476,9 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse, st } if (!foundSurface) { + const auto& PWINDOWIDEAL = getWindowIdeal(); if (pFoundWindow != PWINDOWIDEAL) - pFoundWindow = - g_pCompositor->vectorToWindowUnified(mouseCoords, Desktop::View::RESERVED_EXTENTS | Desktop::View::INPUT_EXTENTS | Desktop::View::ALLOW_FLOATING); + pFoundWindow = PWINDOWIDEAL; if (!(pFoundWindow && (pFoundWindow->m_isFloating && (pFoundWindow->m_createdOverFullscreen || pFoundWindow->m_pinned)))) pFoundWindow = PWORKSPACE->getFullscreenWindow(); @@ -475,8 +487,9 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse, st } } else { + const auto& PWINDOWIDEAL = getWindowIdeal(); if (pFoundWindow != PWINDOWIDEAL) - pFoundWindow = g_pCompositor->vectorToWindowUnified(mouseCoords, Desktop::View::RESERVED_EXTENTS | Desktop::View::INPUT_EXTENTS | Desktop::View::ALLOW_FLOATING); + pFoundWindow = PWINDOWIDEAL; } if (pFoundWindow) { -- cgit v1.2.3