X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fclient.c;h=d86e42532bf627e7941d735adbc0fcbee5c5afb2;hb=712475a9b597a5fa0877b4d3cf3c99aa586641ff;hp=d2e75dc237e1177edcf2ac3eeb338e664f889946;hpb=e6d1ab217f53fcafe418a75ce184463c6e36e31b;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index d2e75dc2..d86e4253 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -1015,6 +1015,7 @@ void client_update_wmhints(Client *self) { XWMHints *hints; gboolean ur = FALSE; + GSList *it; /* assume a window takes input if it doesnt specify */ self->can_focus = TRUE; @@ -1037,11 +1038,27 @@ void client_update_wmhints(Client *self) /* did the group state change? */ if (hints->window_group != (self->group ? self->group->leader : None)){ /* remove from the old group if there was one */ - if (self->group != NULL) + if (self->group != NULL) { + /* remove transients of the group */ + for (it = self->group->members; it; it = it->next) + if (it->data != self && + ((Client*)it->data)->transient_for == TRAN_GROUP) { + self->transients = g_slist_remove(self->transients, + it->data); + } group_remove(self->group, self); + self->group = NULL; + } if (hints->window_group != None) self->group = group_add(hints->window_group, self); + /* add other transients of the group that are already set up */ + for (it = self->group->members; it; it = it->next) + if (it->data != self && + ((Client*)it->data)->transient_for == TRAN_GROUP) + self->transients = g_slist_append(self->transients, + it->data); + /* because the self->transient flag wont change from this call, we don't need to update the window's type and such, only its transient_for, and the transients lists of other windows in the @@ -1313,7 +1330,7 @@ void client_calc_layer(Client *self) for (it = self->group->members; it; it = it->next) if (it->data != self && ((Client*)it->data)->transient_for != TRAN_GROUP) { - self = self->transient_for; + self = it->data; break; } }