diff --git a/abstract_client.cpp b/abstract_client.cpp --- a/abstract_client.cpp +++ b/abstract_client.cpp @@ -374,7 +374,7 @@ if (isActiveFullScreen()) return ActiveLayer; if (keepAbove()) - return AboveLayer; + return workspace()->showingDesktop() ? NormalLayer : AboveLayer; return NormalLayer; } diff --git a/workspace.cpp b/workspace.cpp --- a/workspace.cpp +++ b/workspace.cpp @@ -1276,7 +1276,9 @@ for (int i = stacking_order.count() - 1; i > -1; --i) { AbstractClient *c = qobject_cast(stacking_order.at(i)); if (c && c->isOnCurrentDesktop()) { - if (c->isDock()) { + // When showing desktop we'd like to raise docks above desktop + // windows and move keep-above clients to the normal layer. + if (c->isDock() || c->keepAbove()) { c->updateLayer(); } else if (c->isDesktop() && c->isShown(true)) { c->updateLayer();