From 294e51a857d158ce0b03c5fd752bbd05e67f6bc9 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Sat, 17 Feb 2024 16:02:17 +0000 Subject: [PATCH] input: refocus on completed drags --- src/events/Misc.cpp | 2 ++ src/managers/input/InputManager.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/events/Misc.cpp b/src/events/Misc.cpp index 5e8025a1..b77cf038 100644 --- a/src/events/Misc.cpp +++ b/src/events/Misc.cpp @@ -128,6 +128,8 @@ void Events::listener_destroyDrag(void* owner, void* data) { g_pInputManager->m_sDrag.drag = nullptr; g_pInputManager->m_sDrag.dragIcon = nullptr; g_pInputManager->m_sDrag.hyprListener_destroy.removeCallback(); + + g_pCompositor->focusWindow(g_pCompositor->m_pLastWindow, g_pCompositor->m_pLastWindow ? g_pXWaylandManager->getWindowSurface(g_pCompositor->m_pLastWindow) : nullptr); } void Events::listener_mapDragIcon(void* owner, void* data) { diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index d45b1dc9..dab83b1d 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -423,7 +423,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) { return; // don't enter any new surfaces } else { if (allowKeyboardRefocus && ((FOLLOWMOUSE != 3 && (*PMOUSEREFOCUS || m_pLastMouseFocus != pFoundWindow)) || refocus)) { - if (m_pLastMouseFocus != pFoundWindow || g_pCompositor->m_pLastWindow != pFoundWindow || g_pCompositor->m_pLastFocus != foundSurface) { + if (m_pLastMouseFocus != pFoundWindow || g_pCompositor->m_pLastWindow != pFoundWindow || g_pCompositor->m_pLastFocus != foundSurface || refocus) { m_pLastMouseFocus = pFoundWindow; // TODO: this looks wrong. When over a popup, it constantly is switching.