diff --git a/app/wm/abstractwindowinterface.cpp b/app/wm/abstractwindowinterface.cpp index 1f5820244..5a411ebe8 100644 --- a/app/wm/abstractwindowinterface.cpp +++ b/app/wm/abstractwindowinterface.cpp @@ -146,6 +146,10 @@ bool AbstractWindowInterface::isRegisteredPlasmaPanel(const WindowId &wid) return m_plasmaPanels.contains(wid); } +bool AbstractWindowInterface::inCurrentDesktopActivity(const WindowInfoWrap &winfo) const +{ + return (winfo.isValid() && winfo.isOnDesktop(currentDesktop()) && winfo.isOnActivity(currentActivity())); +} //! Register Latte Ignored Windows in order to NOT be tracked void AbstractWindowInterface::registerIgnoredWindow(WindowId wid) diff --git a/app/wm/abstractwindowinterface.h b/app/wm/abstractwindowinterface.h index 0d13b86b7..e486e82a8 100644 --- a/app/wm/abstractwindowinterface.h +++ b/app/wm/abstractwindowinterface.h @@ -113,6 +113,8 @@ public: virtual WindowId winIdFor(QString appId, QRect geometry) const = 0; virtual AppData appDataFor(WindowId wid) const = 0; + bool inCurrentDesktopActivity(const WindowInfoWrap &winfo) const; + bool isIgnored(const WindowId &wid); bool isRegisteredPlasmaPanel(const WindowId &wid); diff --git a/app/wm/tracker/windowstracker.cpp b/app/wm/tracker/windowstracker.cpp index c48fd5639..b1aa7bd7f 100644 --- a/app/wm/tracker/windowstracker.cpp +++ b/app/wm/tracker/windowstracker.cpp @@ -655,12 +655,6 @@ WindowInfoWrap Windows::infoFor(const WindowId &wid) const //! Windows Criteria Functions - -bool Windows::inCurrentDesktopActivity(const WindowInfoWrap &winfo) -{ - return (winfo.isValid() && winfo.isOnDesktop(m_wm->currentDesktop()) && winfo.isOnActivity(m_wm->currentActivity())); -} - bool Windows::intersects(Latte::View *view, const WindowInfoWrap &winfo) { return (!winfo.isMinimized() && !winfo.isShaded() && winfo.geometry().intersects(view->absoluteGeometry())); @@ -873,7 +867,7 @@ void Windows::updateHints(Latte::View *view) existsFaultyWindow = true; } - if (winfo.isPlasmaDesktop() || !inCurrentDesktopActivity(winfo) || m_wm->isRegisteredPlasmaPanel(winfo.wid())) { + if (winfo.isPlasmaDesktop() || !m_wm->inCurrentDesktopActivity(winfo) || m_wm->isRegisteredPlasmaPanel(winfo.wid())) { continue; } @@ -930,7 +924,7 @@ void Windows::updateHints(Latte::View *view) WindowId mainWindowId = activeInfo.isChildWindow() ? activeInfo.parentId() : activeWinId; for (const auto &winfo : m_windows) { - if (winfo.isPlasmaDesktop() || !inCurrentDesktopActivity(winfo) || m_wm->isRegisteredPlasmaPanel(winfo.wid())) { + if (winfo.isPlasmaDesktop() || !m_wm->inCurrentDesktopActivity(winfo) || m_wm->isRegisteredPlasmaPanel(winfo.wid())) { continue; } @@ -1015,7 +1009,7 @@ void Windows::updateHints(Latte::Layout::GenericLayout *layout) { existsFaultyWindow = true; } - if (winfo.isPlasmaDesktop() || !inCurrentDesktopActivity(winfo) || m_wm->isRegisteredPlasmaPanel(winfo.wid())) { + if (winfo.isPlasmaDesktop() || !m_wm->inCurrentDesktopActivity(winfo) || m_wm->isRegisteredPlasmaPanel(winfo.wid())) { continue; } diff --git a/app/wm/tracker/windowstracker.h b/app/wm/tracker/windowstracker.h index 08d4300ba..f0726e466 100644 --- a/app/wm/tracker/windowstracker.h +++ b/app/wm/tracker/windowstracker.h @@ -158,7 +158,6 @@ private: void setActiveWindowScheme(Latte::Layout::GenericLayout *layout, WindowSystem::SchemeColors *scheme); //! Windows - bool inCurrentDesktopActivity(const WindowInfoWrap &winfo); bool intersects(Latte::View *view, const WindowInfoWrap &winfo); bool isActive(const WindowInfoWrap &winfo); bool isActiveInViewScreen(Latte::View *view, const WindowInfoWrap &winfo); diff --git a/app/wm/waylandinterface.cpp b/app/wm/waylandinterface.cpp index 57b4213c8..81a149f54 100644 --- a/app/wm/waylandinterface.cpp +++ b/app/wm/waylandinterface.cpp @@ -517,6 +517,7 @@ bool WaylandInterface::windowCanBeDragged(WindowId wid) const return (winfo.isValid() && w->isMovable() && !winfo.isMinimized() + && inCurrentDesktopActivity(winfo) && !winfo.isPlasmaDesktop()); } @@ -532,6 +533,7 @@ bool WaylandInterface::windowCanBeMaximized(WindowId wid) const return (winfo.isValid() && w->isMaximizeable() && !winfo.isMinimized() + && inCurrentDesktopActivity(winfo) && !winfo.isPlasmaDesktop()); } @@ -559,7 +561,9 @@ void WaylandInterface::requestClose(WindowId wid) const void WaylandInterface::requestMoveWindow(WindowId wid, QPoint from) const { - if (windowCanBeDragged(wid)) { + WindowInfoWrap wInfo = requestInfo(wid); + + if (windowCanBeDragged(wid) && inCurrentDesktopActivity(wInfo)) { auto w = windowFor(wid); if (w && isValidWindow(w)) { @@ -599,8 +603,9 @@ void WaylandInterface::requestToggleKeepAbove(WindowId wid) const void WaylandInterface::requestToggleMinimized(WindowId wid) const { auto w = windowFor(wid); + WindowInfoWrap wInfo = requestInfo(wid); - if (w && isValidWindow(w)) { + if (w && isValidWindow(w) && inCurrentDesktopActivity(wInfo)) { #if KF5_VERSION_MINOR >= 52 if (!m_currentDesktop.isEmpty()) { w->requestEnterVirtualDesktop(m_currentDesktop); @@ -613,8 +618,9 @@ void WaylandInterface::requestToggleMinimized(WindowId wid) const void WaylandInterface::requestToggleMaximized(WindowId wid) const { auto w = windowFor(wid); + WindowInfoWrap wInfo = requestInfo(wid); - if (w && isValidWindow(w) && windowCanBeMaximized(wid)) { + if (w && isValidWindow(w) && windowCanBeMaximized(wid) && inCurrentDesktopActivity(wInfo)) { #if KF5_VERSION_MINOR >= 52 if (!m_currentDesktop.isEmpty()) { w->requestEnterVirtualDesktop(m_currentDesktop); diff --git a/app/wm/xwindowinterface.cpp b/app/wm/xwindowinterface.cpp index da3ac5635..3dff80009 100644 --- a/app/wm/xwindowinterface.cpp +++ b/app/wm/xwindowinterface.cpp @@ -409,6 +409,7 @@ bool XWindowInterface::windowCanBeDragged(WindowId wid) const return (winfo.isValid() && info.actionSupported(NET::ActionMove) && !winfo.isMinimized() + && inCurrentDesktopActivity(winfo) && !winfo.isPlasmaDesktop()); } @@ -424,6 +425,7 @@ bool XWindowInterface::windowCanBeMaximized(WindowId wid) const return (winfo.isValid() && !winfo.isMinimized() && info.actionSupported(NET::ActionMax) + && inCurrentDesktopActivity(winfo) && !winfo.isPlasmaDesktop()); } @@ -468,7 +470,7 @@ void XWindowInterface::requestMoveWindow(WindowId wid, QPoint from) const { WindowInfoWrap wInfo = requestInfo(wid); - if (!wInfo.isValid() || wInfo.isPlasmaDesktop()) { + if (!wInfo.isValid() || wInfo.isPlasmaDesktop() || !inCurrentDesktopActivity(wInfo)) { return; } @@ -531,7 +533,7 @@ void XWindowInterface::requestToggleMinimized(WindowId wid) const { WindowInfoWrap wInfo = requestInfo(wid); - if (!wInfo.isValid() || wInfo.isPlasmaDesktop()) { + if (!wInfo.isValid() || wInfo.isPlasmaDesktop() || !inCurrentDesktopActivity(wInfo)) { return; } @@ -550,11 +552,12 @@ void XWindowInterface::requestToggleMinimized(WindowId wid) const void XWindowInterface::requestToggleMaximized(WindowId wid) const { - if (!windowCanBeMaximized(wid)) { + WindowInfoWrap wInfo = requestInfo(wid); + + if (!windowCanBeMaximized(wid) || !inCurrentDesktopActivity(wInfo)) { return; } - WindowInfoWrap wInfo = requestInfo(wid); bool restore = wInfo.isMaxHoriz() && wInfo.isMaxVert(); if (wInfo.isMinimized()) {