a more correct for the missing frame problem. don't restack windows when changing the window's layer while it is being managed.
This commit is contained in:
parent
5888e7ed4b
commit
f8e7ab509c
2 changed files with 9 additions and 6 deletions
|
@ -1356,7 +1356,8 @@ static Client *search_focus_tree(Client *node, Client *skip)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void calc_recursive(Client *self, StackLayer l, gboolean raised)
|
static void calc_recursive(Client *self, Client *orig, StackLayer l,
|
||||||
|
gboolean raised)
|
||||||
{
|
{
|
||||||
StackLayer old;
|
StackLayer old;
|
||||||
GSList *it;
|
GSList *it;
|
||||||
|
@ -1365,10 +1366,10 @@ static void calc_recursive(Client *self, StackLayer l, gboolean raised)
|
||||||
self->layer = l;
|
self->layer = l;
|
||||||
|
|
||||||
for (it = self->transients; it; it = it->next)
|
for (it = self->transients; it; it = it->next)
|
||||||
calc_recursive(it->data, l, raised ? raised : l != old);
|
calc_recursive(it->data, orig, l, raised ? raised : l != old);
|
||||||
|
|
||||||
if (!raised && l != old)
|
if (!raised && l != old)
|
||||||
if (self->frame)
|
if (orig->frame) /* only restack if the original window is managed */
|
||||||
stacking_raise(self);
|
stacking_raise(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1376,6 +1377,9 @@ void client_calc_layer(Client *self)
|
||||||
{
|
{
|
||||||
StackLayer l;
|
StackLayer l;
|
||||||
gboolean f;
|
gboolean f;
|
||||||
|
Client *orig;
|
||||||
|
|
||||||
|
orig = self;
|
||||||
|
|
||||||
/* transients take on the layer of their parents */
|
/* transients take on the layer of their parents */
|
||||||
if (self->transient_for) {
|
if (self->transient_for) {
|
||||||
|
@ -1413,7 +1417,7 @@ void client_calc_layer(Client *self)
|
||||||
else if (self->below) l = Layer_Below;
|
else if (self->below) l = Layer_Below;
|
||||||
else l = Layer_Normal;
|
else l = Layer_Normal;
|
||||||
|
|
||||||
calc_recursive(self, l, FALSE);
|
calc_recursive(self, orig, l, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean client_should_show(Client *self)
|
gboolean client_should_show(Client *self)
|
||||||
|
|
|
@ -81,8 +81,7 @@ static void raise_recursive(Client *client)
|
||||||
|
|
||||||
/* raise transients first */
|
/* raise transients first */
|
||||||
for (sit = client->transients; sit; sit = sit->next)
|
for (sit = client->transients; sit; sit = sit->next)
|
||||||
if (((Client*)sit->data)->frame)
|
raise_recursive(sit->data);
|
||||||
raise_recursive(sit->data);
|
|
||||||
|
|
||||||
/* find 'it' where it is the positiion in the stacking order where
|
/* find 'it' where it is the positiion in the stacking order where
|
||||||
'client' will be inserted *before* */
|
'client' will be inserted *before* */
|
||||||
|
|
Loading…
Reference in a new issue