From 55d585ce17b63126828071d685871159e8e74b0b Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Mon, 3 Apr 2023 23:09:44 +0100 Subject: [PATCH] input: fix click-to-refocus not working on loose --- src/managers/input/InputManager.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index bf9286a8..ad1093cd 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -519,8 +519,17 @@ void CInputManager::processMouseDownNormal(wlr_pointer_button_event* e) { if (*PFOLLOWMOUSE == 3) // don't refocus on full loose break; - if (!g_pCompositor->m_sSeat.mouse || !g_pCompositor->m_sSeat.mouse->currentConstraint) - refocus(); + if (!g_pCompositor->m_sSeat.mouse || !g_pCompositor->m_sSeat.mouse->currentConstraint) { + // a bit hacky + // if we only pressed one button, allow us to refocus. m_lCurrentlyHeldButtons.size() > 0 will stick the focus + if (m_lCurrentlyHeldButtons.size() == 1) { + const auto COPY = m_lCurrentlyHeldButtons; + m_lCurrentlyHeldButtons.clear(); + refocus(); + m_lCurrentlyHeldButtons = COPY; + } else + refocus(); + } // if clicked on a floating window make it top if (g_pCompositor->m_pLastWindow && g_pCompositor->m_pLastWindow->m_bIsFloating)