diff --git a/client.cpp b/client.cpp index 0b72051335..97e5f5f791 100644 --- a/client.cpp +++ b/client.cpp @@ -1210,21 +1210,25 @@ void Client::updateVisibility() internalHide(Allowed); return; } - if( workspace()->showingDesktop()) { - bool belongs_to_desktop = false; - for (ClientList::ConstIterator it = group()->members().constBegin(); - it != group()->members().constEnd(); - ++it) - if ((*it)->isDesktop()) { - belongs_to_desktop = true; - break; - } - if (!belongs_to_desktop) - workspace()->resetShowingDesktop(true); - } + resetShowingDesktop(true); internalShow(Allowed); } + +void Client::resetShowingDesktop(bool keep_hidden) +{ + if (isDock() || !workspace()->showingDesktop()) + return; + bool belongs_to_desktop = false; + for (ClientList::ConstIterator it = group()->members().constBegin(), + end = group()->members().constEnd(); it != end; ++it) + if ((belongs_to_desktop == (*it)->isDesktop())) + break; + + if (!belongs_to_desktop) + workspace()->resetShowingDesktop(keep_hidden); +} + /** * Sets the client window's mapping state. Possible values are * WithdrawnState, IconicState, NormalState. diff --git a/client.h b/client.h index 3e84d1db17..e4d921d96a 100644 --- a/client.h +++ b/client.h @@ -682,6 +682,7 @@ private: bool processDecorationButtonPress(int button, int state, int x, int y, int x_root, int y_root, bool ignoreMenu = false); Client* findAutogroupCandidate() const; + void resetShowingDesktop(bool keep_hidden); protected: virtual void debug(QDebug& stream) const; diff --git a/manage.cpp b/manage.cpp index 614fe50c34..86579de6b1 100644 --- a/manage.cpp +++ b/manage.cpp @@ -558,16 +558,7 @@ bool Client::manage(Window w, bool isMapped) } } - bool belongs_to_desktop = false; - for (ClientList::ConstIterator it = group()->members().constBegin(); - it != group()->members().constEnd(); - ++it) - if ((*it)->isDesktop()) { - belongs_to_desktop = true; - break; - } - if (!belongs_to_desktop && workspace()->showingDesktop()) - workspace()->resetShowingDesktop(options->isShowDesktopIsMinimizeAll()); + resetShowingDesktop(options->isShowDesktopIsMinimizeAll()); if (isOnCurrentDesktop() && !isMapped && !allow && (!session || session->stackingOrder < 0)) workspace()->restackClientUnderActive(this);