workspace: small work towards better per-output VDs handling
This commit is contained in:
parent
67e3eddf0a
commit
94e2ce9129
2 changed files with 8 additions and 3 deletions
|
@ -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()) {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue