Showing Desktop: keep docks visible

REVIEW: 123783
BUG: 346933
BUG: 347212
CCBUG: 346837
FIXED-IN: 5.3.1
icc-effect-5.14.5
Thomas Lübking 2015-05-13 22:31:22 +02:00
parent e6176ffc02
commit f3b69b0ed0
2 changed files with 16 additions and 5 deletions

View File

@ -826,11 +826,18 @@ Layer Client::layer() const
Layer Client::belongsToLayer() const
{
// NOTICE while showingDesktop, desktops move to the AboveLayer
// (interchangeable w/ eg. yakuake etc. which will at first remain visible)
// 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 (isDesktop())
return workspace()->showingDesktop() ? AboveLayer : DesktopLayer;
if (isSplash()) // no damn annoying splashscreens
return NormalLayer; // getting in the way of everything else
if (isDock()) {
if (workspace()->showingDesktop())
return NotificationLayer;
// slight hack for the 'allow window to cover panel' Kicker setting
// don't move keepbelow docks below normal window, but only to the same
// layer, so that both may be raised to cover the other

View File

@ -1207,11 +1207,15 @@ void Workspace::setShowingDesktop(bool showing)
StackingUpdatesBlocker blocker(this); // updateLayer & lowerClient would invalidate stacking_order
for (int i = stacking_order.count() - 1; i > -1; --i) {
Client *c = qobject_cast<Client*>(stacking_order.at(i));
if (c && c->isOnCurrentDesktop() && c->isDesktop() && c->isShown(true)) {
c->updateLayer();
lowerClient(c);
if (!topDesk)
topDesk = c;
if (c && c->isOnCurrentDesktop()) {
if (c->isDock()) {
c->updateLayer();
} else if (c->isDesktop() && c->isShown(true)) {
c->updateLayer();
lowerClient(c);
if (!topDesk)
topDesk = c;
}
}
}
} // ~StackingUpdatesBlocker