X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=8428be6b54db3d060cc3c1e0cbfaee0c0f34edb6;hb=d59f0d67b0a6f3a7eed2753875691e78c08c632c;hp=9ed6fd60998331e95502ea6d189fbddcfb4e36c6;hpb=2baad3abeec8cb1200322bec476d804198833aa3;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 9ed6fd60..8428be6b 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -1015,6 +1015,9 @@ static void client_get_all(ObClient *self, gboolean real) if (!real) return; + /* get this early so we have it for debugging */ + client_update_title(self); + client_update_protocols(self); client_update_wmhints(self); @@ -1040,7 +1043,6 @@ static void client_get_all(ObClient *self, gboolean real) #endif client_get_colormap(self); - client_update_title(self); client_update_strut(self); client_update_icons(self); client_update_user_time_window(self); @@ -1230,19 +1232,34 @@ static void client_update_transient_tree(ObClient *self, GSList *it, *next; ObClient *c; + /* * * + Group transient windows are not allowed to have other group + transient windows as their children. + * * */ + + /* No change has occured */ if (oldgroup == newgroup && oldparent == newparent) return; /** 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 */ + then any group transients which were our children and are now becoming + our parents need to stop being our children. + + Group transients can't be children of group transients already, but + we could have any number of direct parents above up, any of which could + be transient for the group, and we need to remove it from our children. + */ 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); + ObClient *look = newparent; + do { + self->transients = g_slist_remove(self->transients, look); + look = look->transient_for; + } while (look != NULL && look != OB_TRAN_GROUP); } @@ -1314,7 +1331,9 @@ static void client_update_transient_tree(ObClient *self, WARNING: Cyclical transient-ness is possible. For e.g. if: A is transient for the group - B is a member of the group and transient for A + B is transient for A + C is transient for B + A can't be transient for C or we have a cycle */ if (oldgroup != newgroup && newgroup != NULL && newparent != OB_TRAN_GROUP) @@ -1626,7 +1645,7 @@ void client_setup_decor_and_functions(ObClient *self) if (!(self->functions & OB_CLIENT_FUNC_ICONIFY)) self->decorations &= ~OB_FRAME_DECOR_ICONIFY; if (!(self->functions & OB_CLIENT_FUNC_RESIZE)) - self->decorations &= ~OB_FRAME_DECOR_GRIPS; + self->decorations &= ~(OB_FRAME_DECOR_GRIPS | OB_FRAME_DECOR_HANDLE); /* can't maximize without moving/resizing */ if (!((self->functions & OB_CLIENT_FUNC_MAXIMIZE) && @@ -3691,7 +3710,7 @@ ObClient *client_search_transient(ObClient *self, ObClient *search) continue; \ if(cur->iconic) \ continue; \ - if(cur->layer < c->layer && !config_resist_layers_below) \ + if(cur->layer == c->layer) \ continue; #define HIT_EDGE(my_edge_start, my_edge_end, his_edge_start, his_edge_end) \