diff --git a/abstract_client.h b/abstract_client.h --- a/abstract_client.h +++ b/abstract_client.h @@ -817,6 +817,14 @@ **/ virtual Group *group(); + /** + * Returns whether this is an internal client. + * + * Internal clients are created by KWin and used for special purpose windows, + * like the task switcher, etc. + **/ + virtual bool isInternal() const; + public Q_SLOTS: virtual void closeWindow() = 0; diff --git a/abstract_client.cpp b/abstract_client.cpp --- a/abstract_client.cpp +++ b/abstract_client.cpp @@ -353,6 +353,8 @@ // and the docks move into the NotificationLayer (which is between Above- and // ActiveLayer, so that active fullscreen windows will still cover everything) // Since the desktop is also activated, nothing should be in the ActiveLayer, though + if (isInternal()) + return UnmanagedLayer; if (isDesktop()) return workspace()->showingDesktop() ? AboveLayer : DesktopLayer; if (isSplash()) // no damn annoying splashscreens @@ -2080,4 +2082,9 @@ return nullptr; } +bool AbstractClient::isInternal() const +{ + return false; +} + } diff --git a/shell_client.h b/shell_client.h --- a/shell_client.h +++ b/shell_client.h @@ -122,7 +122,6 @@ **/ pid_t pid() const override; - virtual bool isInternal() const; bool isLockScreen() const override; bool isInputMethod() const override; virtual QWindow *internalWindow() const; diff --git a/shell_client.cpp b/shell_client.cpp --- a/shell_client.cpp +++ b/shell_client.cpp @@ -1083,11 +1083,6 @@ return surface()->client()->processId(); } -bool ShellClient::isInternal() const -{ - return false; -} - bool ShellClient::isLockScreen() const { return surface()->client() == waylandServer()->screenLockerClientConnection();