]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
oops nm
[chaz/openbox] / openbox / client.c
index d2e75dc237e1177edcf2ac3eeb338e664f889946..d86e42532bf627e7941d735adbc0fcbee5c5afb2 100644 (file)
@@ -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;
                 }
         }
This page took 0.023053 seconds and 4 git commands to generate.