From 94e2ce91296a0118e2307b7cae449cfd7f49a5cc Mon Sep 17 00:00:00 2001 From: Yuki Joou Date: Mon, 16 Sep 2024 14:10:30 +0200 Subject: [PATCH] workspace: small work towards better per-output VDs handling --- src/focuschain.cpp | 1 + src/workspace.cpp | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/focuschain.cpp b/src/focuschain.cpp index be2278059d..0270204501 100644 --- a/src/focuschain.cpp +++ b/src/focuschain.cpp @@ -46,6 +46,7 @@ Window *FocusChain::getForActivation(VirtualDesktop *desktop) const Window *FocusChain::getForActivation(VirtualDesktop *desktop, Output *output) const { + qInfo("getForActivation"); // TODO: Find windows on other dedsktops that are also currently visible. auto it = m_desktopFocusChains.constFind(desktop); if (it == m_desktopFocusChains.constEnd()) { diff --git a/src/workspace.cpp b/src/workspace.cpp index 9ef3fe32df..d9dbd3302a 100644 --- a/src/workspace.cpp +++ b/src/workspace.cpp @@ -1015,6 +1015,7 @@ void Workspace::activateWindowOnNewDesktop(VirtualDesktop *desktop) Window *Workspace::findWindowToActivateOnDesktop(VirtualDesktop *desktop) { + qInfo("findWindowToActivateOnDesktop"); if (m_moveResizeWindow != nullptr && m_activeWindow == m_moveResizeWindow && m_focusChain->contains(m_activeWindow, desktop) && m_activeWindow->isShown() && m_activeWindow->isOnCurrentDesktop()) { // A requestFocus call will fail, as the window is already active return m_activeWindow; @@ -1111,11 +1112,13 @@ void Workspace::updateCurrentActivity(const QString &new_activity) window = m_activeWindow; } else if (options->focusPolicyIsReasonable()) { // Search in focus chain - window = m_focusChain->getForActivation(VirtualDesktopManager::self()->currentDesktop()); + // TODO: Maybe we should give more info to the focuschain for it to find a more suitable window? + window = m_focusChain->getForActivation(VirtualDesktopManager::self()->currentDesktop(window->output())); } if (!window) { - window = findDesktop(true, VirtualDesktopManager::self()->currentDesktop()); + // TODO: Maybe we should give more info to the focuschain for it to find a more suitable window? + window = findDesktop(true, VirtualDesktopManager::self()->currentDesktop(window->output())); } if (window != m_activeWindow) { @@ -2441,7 +2444,8 @@ QRectF Workspace::clientArea(clientAreaOption opt, const Window *window, const O { const VirtualDesktop *desktop; if (window->isOnCurrentDesktop()) { - desktop = VirtualDesktopManager::self()->currentDesktop(); + // TODO: This will likely need serious refactoring in case support for different virtual desktop layouts per-output is needed? Or maybe I just don't undestand how this works at all. + desktop = VirtualDesktopManager::self()->currentDesktop(window->output()); } else { desktop = window->desktops().constLast(); }