From 7c1592297cf68a9345d8a5f2dea6c81f8b4aea08 Mon Sep 17 00:00:00 2001 From: erstarr <253168930+erstarr@users.noreply.github.com> Date: Sat, 4 Apr 2026 01:43:08 +0200 Subject: [PATCH] fix focus_fallback after unmapping a window floating moving view --- src/desktop/state/FocusState.cpp | 2 +- src/desktop/state/FocusState.hpp | 2 ++ src/desktop/view/Window.cpp | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/desktop/state/FocusState.cpp b/src/desktop/state/FocusState.cpp index 5db4bac5c..f8699e664 100644 --- a/src/desktop/state/FocusState.cpp +++ b/src/desktop/state/FocusState.cpp @@ -301,5 +301,5 @@ void CFocusState::resetWindowFocus() { } bool Desktop::isHardInputFocusReason(eFocusReason r) { - return r == FOCUS_REASON_NEW_WINDOW || r == FOCUS_REASON_KEYBIND || r == FOCUS_REASON_GHOSTS || r == FOCUS_REASON_CLICK || r == FOCUS_REASON_DESKTOP_STATE_CHANGE; + return r == FOCUS_REASON_NEW_WINDOW || r == FOCUS_REASON_KEYBIND || r == FOCUS_REASON_GHOSTS || r == FOCUS_REASON_CLICK || r == FOCUS_REASON_DESKTOP_STATE_CHANGE || r == FOCUS_REASON_UNMAP_WINDOW_TILING; } diff --git a/src/desktop/state/FocusState.hpp b/src/desktop/state/FocusState.hpp index d9f2ede7f..f2e187fcf 100644 --- a/src/desktop/state/FocusState.hpp +++ b/src/desktop/state/FocusState.hpp @@ -13,6 +13,8 @@ namespace Desktop { FOCUS_REASON_CLICK, FOCUS_REASON_OTHER, FOCUS_REASON_DESKTOP_STATE_CHANGE, + FOCUS_REASON_UNMAP_WINDOW_TILING, + FOCUS_REASON_UNMAP_WINDOW_FLOATING, FOCUS_REASON_UNMAP_GROUPED_WINDOW, FOCUS_REASON_NEW_WINDOW, FOCUS_REASON_GHOSTS, diff --git a/src/desktop/view/Window.cpp b/src/desktop/view/Window.cpp index d3d16b945..03229190a 100644 --- a/src/desktop/view/Window.cpp +++ b/src/desktop/view/Window.cpp @@ -2392,7 +2392,7 @@ void CWindow::unmapWindow() { if (candidate == nextInGroup) Desktop::focusState()->rawWindowFocus(candidate, FOCUS_REASON_UNMAP_GROUPED_WINDOW); else - Desktop::focusState()->fullWindowFocus(candidate, FOCUS_REASON_DESKTOP_STATE_CHANGE); + Desktop::focusState()->fullWindowFocus(candidate, m_self->m_isFloating ? FOCUS_REASON_UNMAP_WINDOW_FLOATING : FOCUS_REASON_UNMAP_WINDOW_TILING); if ((*PEXITRETAINSFS || candidate == nextInGroup) && CURRENTWINDOWFSSTATE) g_pCompositor->setWindowFullscreenInternal(candidate, CURRENTFSMODE);