group aware restack accounts layer compatibility

the restack code stacks under all members of an application
this is a problem if the group contains a keep below or desktop
etc. (while the other window is a normal one) what resulted in
restacking the client "invalidly" above the window of the other
layer but below all other memberso of its own group for no reason

REVIEW: 112627
CCBUG: 110543
This commit is contained in:
Thomas Lübking 2013-09-09 22:38:23 +02:00
parent 51c3c6cc42
commit 79d6c47a46

View file

@ -450,7 +450,7 @@ void Workspace::restack(Client* c, Client* under)
// put in the stacking order below _all_ windows belonging to the active application // put in the stacking order below _all_ windows belonging to the active application
for (int i = 0; i < unconstrained_stacking_order.size(); ++i) { for (int i = 0; i < unconstrained_stacking_order.size(); ++i) {
Client *other = qobject_cast<Client*>(unconstrained_stacking_order.at(i)); Client *other = qobject_cast<Client*>(unconstrained_stacking_order.at(i));
if (other && Client::belongToSameApplication(under, other)) { if (other && other->layer() == c->layer() && Client::belongToSameApplication(under, other)) {
under = (c == other) ? 0 : other; under = (c == other) ? 0 : other;
break; break;
} }
@ -468,7 +468,7 @@ void Workspace::restack(Client* c, Client* under)
void Workspace::restackClientUnderActive(Client* c) void Workspace::restackClientUnderActive(Client* c)
{ {
if (!active_client || active_client == c) { if (!active_client || active_client == c || active_client->layer() != c->layer()) {
raiseClient(c); raiseClient(c);
return; return;
} }