X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=5b81cd2262916e8db91c51aa899c6ae64d1cc720;hb=1c3689d0c725202eba7191d32480aa2cc3addfea;hp=d1d235cee87c29dc0da5d6e5c87bf0c8806ce7a6;hpb=5898c685301cb10e9c7408f6ad019a5ae704e5ce;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index d1d235ce..5b81cd22 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) { group_remove(self->group, self); + + /* 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); + } + } 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