summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-05-04 23:15:08 +0000
committerDana Jansens <danakj@orodu.net>2007-05-04 23:15:08 +0000
commit431035df66a6d541ba715619b3080b4e267bc78a (patch)
tree62ac64bd51cfb000b5c7cf9992b91d895cc03b2d
parentdbafb9ac9b327801caf92307d44d1fc9475a5637 (diff)
continuation of r6039 in all respects
-rw-r--r--openbox/client.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/openbox/client.c b/openbox/client.c
index 4be855f4..07cb5938 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -930,7 +930,9 @@ static void client_get_all(ObClient *self)
client_get_state(self);
client_update_wmhints(self);
- client_update_transient_for(self);
+ /* this may have already been called from client_update_wmhints */
+ if (self->transient && self->transient_for == NULL)
+ client_update_transient_for(self);
client_get_startup_id(self);
client_get_desktop(self);/* uses transient data/group/startup id if a
desktop is not specified */
@@ -1208,6 +1210,17 @@ static void client_update_transient_tree(ObClient *self,
/** Remove the client from the transient tree wherever it has changed **/
+ /* If the window is becoming a direct transient for a window in its group
+ then that window can't be a child of this window anymore */
+ if (oldparent != newparent &&
+ newparent != NULL && newparent != OB_TRAN_GROUP &&
+ newparent->transient_for == OB_TRAN_GROUP &&
+ newgroup != NULL && newgroup == oldgroup)
+ {
+ self->transients = g_slist_remove(self->transients, newparent);
+ }
+
+
/* 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
other group transients are not our children. */
@@ -1253,7 +1266,7 @@ static void client_update_transient_tree(ObClient *self,
c = it->data;
if (c != self && (!c->transient_for ||
c->transient_for != OB_TRAN_GROUP))
- c->transients = g_slist_prepend(c->transients, self);
+ c->transients = g_slist_append(c->transients, self);
}
}
/* If we are now transient for a single window which we weren't before,
@@ -1263,10 +1276,10 @@ static void client_update_transient_tree(ObClient *self,
transient for eachother.
*/
else if (newparent != NULL && newparent != OB_TRAN_GROUP &&
- newparent != newparent &&
+ newparent != oldparent &&
/* don't make ourself its child if it is already our child */
!client_is_direct_child(self, newparent))
- newparent->transients = g_slist_prepend(newparent->transients, self);
+ newparent->transients = g_slist_append(newparent->transients, self);
/* If the group changed then we need to add any old group transient
windows to our children. But if we're transient for the group, then
@@ -1285,7 +1298,7 @@ static void client_update_transient_tree(ObClient *self,
/* Don't make it our child if it is already our parent */
!client_is_direct_child(c, self))
{
- self->transients = g_slist_prepend(self->transients, c);
+ self->transients = g_slist_append(self->transients, c);
}
}
}