diff --git a/src/client.c b/src/client.c index 3d86acc21d599379eef0a371a3f49b8a7033437f..b60ba960b923b7488903217059b432ed215bb7d7 100644 --- a/src/client.c +++ b/src/client.c @@ -1165,7 +1165,6 @@ static void _clientConfigure(Client * c, XWindowChanges * wc, int mask) Client *sibling = NULL; Client *c2 = NULL; Client *lowest_transient = NULL; - Client *prev_transient = NULL; int i; g_return_if_fail(c != NULL); @@ -1230,40 +1229,30 @@ static void _clientConfigure(Client * c, XWindowChanges * wc, int mask) if(!transients) { transients = TRUE; - lowest_transient = c2; wc2.stack_mode = Above; DBG("recursive call 1\n"); _clientConfigure(c2, &wc2, CWStackMode); } else { - lowest_transient = c2; + wc2.sibling = lowest_transient->window; wc2.stack_mode = Below; - wc2.sibling = prev_transient->window; DBG("recursive call 2\n"); _clientConfigure(c2, &wc2, CWStackMode | CWSibling); } - prev_transient = c2; - } - if(transients && lowest_transient) - { - DBG("Transient is %s (%#lx)\n", sibling->name, sibling->window); - sibling = lowest_transient; - wc->stack_mode = Below; + lowest_transient = c2; } } + if(transients && lowest_transient) + { + DBG("Transient is %s (%#lx)\n", sibling->name, sibling->window); + sibling = lowest_transient; + wc->stack_mode = Below; + } break; case Below: DBG("Below\n"); - if(c->transient_for) - { - wc->sibling = c->transient_for; - wc->stack_mode = Above; - mask |= (CWSibling | CWStackMode); - sibling = clientGetFromWindow(wc->sibling, WINDOW); - DBG("lowering transient \"%s\" (%#lx) for \"%s\" (%#lx)\n", c->name, c->window, c->transient_for, sibling->name); - } - else if(mask & CWSibling) + if((mask & CWSibling) && (c->transient_for != wc->sibling)) { DBG("Sibling specified for \"%s\" (%#lx) is (%#lx)\n", c->name, c->window, wc->sibling); sibling = clientGetFromWindow(wc->sibling, WINDOW); @@ -1273,6 +1262,14 @@ static void _clientConfigure(Client * c, XWindowChanges * wc, int mask) sibling = clientGetBottomMost(c->win_layer, c); } } + else if(c->transient_for) + { + wc->sibling = c->transient_for; + wc->stack_mode = Above; + mask |= (CWSibling | CWStackMode); + sibling = clientGetFromWindow(wc->sibling, WINDOW); + DBG("lowering transient \"%s\" (%#lx) for \"%s\" (%#lx)\n", c->name, c->window, c->transient_for, sibling->name); + } else { DBG("No sibling specified for \"%s\" (%#lx)\n", c->name, c->window);