ignore dockers for showingDesktop state

also use a common funciton to decide whether or
not to break the state

BUG: 305874
FIXED-IN: 4.9.1
This commit is contained in:
Thomas Lübking 2012-08-26 16:16:38 +02:00
parent 952579bb09
commit f18230fe99
3 changed files with 18 additions and 22 deletions

View file

@ -1212,21 +1212,25 @@ void Client::updateVisibility()
internalHide(Allowed);
return;
}
if (isManaged() && 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.

View file

@ -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;

View file

@ -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);