]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
oops hehe. a render call in the loop for debugging was what made it slow. anyhow...
[chaz/openbox] / openbox / client.c
index 52dfaaa3aa1434d15c07e9eacb5bfefdc9b92a89..47bfcabcb5ff6a547f2e7287fe124d47ca68ec5c 100644 (file)
@@ -1254,11 +1254,13 @@ static void client_update_transient_tree(ObClient *self,
     }
             
 
-    /* If the group changed then we need to remove any old group transient
-       windows from our children. But if we're transient for the group, then
+    /* If the group changed, or if we are just becoming transient for the
+       group, then we need to remove any old group transient windows
+       from our children. But if we were already transient for the group, then
        other group transients are not our children. */
-    if (oldgroup != newgroup && oldgroup != NULL &&
-        oldparent != OB_TRAN_GROUP)
+    if ((oldgroup != newgroup ||
+         (newparent == OB_TRAN_GROUP && oldparent != newparent)) &&
+        oldgroup != NULL && oldparent != OB_TRAN_GROUP)
     {
         for (it = self->transients; it; it = next) {
             next = g_slist_next(it);
@@ -2143,9 +2145,11 @@ static void client_change_wm_state(ObClient *self)
 
     old = self->wmstate;
 
-    if (self->shaded || !self->frame->visible)
+    if (self->shaded || self->iconic ||
+        (self->desktop != DESKTOP_ALL && self->desktop != screen_desktop))
+    {
         self->wmstate = IconicState;
-    else
+    else
         self->wmstate = NormalState;
 
     if (old != self->wmstate) {
@@ -2303,23 +2307,6 @@ gboolean client_should_show(ObClient *self)
         return FALSE;
     if (client_normal(self) && screen_showing_desktop)
         return FALSE;
-    /*
-    if (self->transient_for) {
-        if (self->transient_for != OB_TRAN_GROUP)
-            return client_should_show(self->transient_for);
-        else {
-            GSList *it;
-
-            for (it = self->group->members; it; it = g_slist_next(it)) {
-                ObClient *c = it->data;
-                if (c != self && !c->transient_for) {
-                    if (client_should_show(c))
-                        return TRUE;
-                }
-            }
-        }
-    }
-    */
     if (self->desktop == screen_desktop || self->desktop == DESKTOP_ALL)
         return TRUE;
     
This page took 0.021415 seconds and 4 git commands to generate.