summaryrefslogtreecommitdiff
path: root/src/desktop/view/Window.cpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2025-12-30 18:02:34 +0100
committerGitHub <noreply@github.com>2025-12-30 18:02:34 +0100
commit529559712bbfa9c8d79fe01770a77e925a7a0496 (patch)
tree9124e885d2e296b1eb2578c1e469a1f4f4ea0a84 /src/desktop/view/Window.cpp
parent293d3e5de9fb18d54a5b0b7f9dbb4492207a25dd (diff)
desktop/window: go back to the previously focused window in a group (#12763)
Diffstat (limited to 'src/desktop/view/Window.cpp')
-rw-r--r--src/desktop/view/Window.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/desktop/view/Window.cpp b/src/desktop/view/Window.cpp
index 695ba81f..b0e6a365 100644
--- a/src/desktop/view/Window.cpp
+++ b/src/desktop/view/Window.cpp
@@ -2437,7 +2437,24 @@ void CWindow::unmapWindow() {
}
bool wasLastWindow = false;
- PHLWINDOW nextInGroup = m_groupData.pNextWindow ? m_groupData.pNextWindow.lock() : nullptr;
+ PHLWINDOW nextInGroup = [this] -> PHLWINDOW {
+ if (!m_groupData.pNextWindow)
+ return nullptr;
+
+ // walk the history to find a suitable window
+ const auto HISTORY = Desktop::History::windowTracker()->fullHistory();
+ for (const auto& w : HISTORY | std::views::reverse) {
+ if (!w || !w->m_isMapped || w == m_self)
+ continue;
+
+ if (!hasInGroup(w.lock()))
+ continue;
+
+ return w.lock();
+ }
+
+ return nullptr;
+ }();
if (m_self.lock() == Desktop::focusState()->window()) {
wasLastWindow = true;