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()) {