X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=17172dd99f37fb40b4597f24dad32ac4cbd9f0b2;hb=185d1337e553283530e23b1edff3bb709f04e9bb;hp=5b81cd2262916e8db91c51aa899c6ae64d1cc720;hpb=3c960fb9282848bc346f6265dc6508a4b8150a5f;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 5b81cd22..17172dd9 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -518,14 +518,6 @@ static void client_get_all(Client *self) client_update_icons(self); client_update_kwm_icon(self); - /* this makes sure that these windows appear on all desktops */ - if (self->type == Type_Desktop) - self->desktop = DESKTOP_ALL; - - /* set the desktop hint, to make sure that it always exists, and to - reflect any changes we've made here */ - PROP_SET32(self->window, net_wm_desktop, cardinal, self->desktop); - client_change_state(self); } @@ -552,6 +544,9 @@ static void client_get_desktop(Client *self) } else { /* defaults to the current desktop */ self->desktop = screen_desktop; + + /* set the desktop hint, to make sure that it always exists */ + PROP_SET32(self->window, net_wm_desktop, cardinal, self->desktop); } } @@ -735,6 +730,10 @@ void client_get_type(Client *self) else self->type = Type_Normal; } + + /* this makes sure that these windows appear on all desktops */ + if (self->type == Type_Desktop) + self->desktop = DESKTOP_ALL; } void client_update_protocols(Client *self) @@ -1034,13 +1033,13 @@ void client_update_wmhints(Client *self) ur = TRUE; if (!(hints->flags & WindowGroupHint)) - hints->window_group = None; /* no group */ + hints->window_group = None; + /* did the group state change? */ - if (hints->window_group != (self->group ? self->group->leader : None)){ + if (hints->window_group != + (self->group ? self->group->leader : None)) { /* remove from the old group if there was one */ 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 && @@ -1048,37 +1047,43 @@ void client_update_wmhints(Client *self) self->transients = g_slist_remove(self->transients, it->data); } + group_remove(self->group, self); + self->group = NULL; } - if (hints->window_group != None) + 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); + /* 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 - group may be affected */ + transient_for, and the transients lists of other windows in + the group may be affected */ client_update_transient_for(self); } - if (hints->flags & IconPixmapHint) { - client_update_kwm_icon(self); - /* try get the kwm icon first, this is a fallback only */ - if (self->pixmap_icon == None) { - self->pixmap_icon = hints->icon_pixmap; - if (hints->flags & IconMaskHint) - self->pixmap_icon_mask = hints->icon_mask; - else - self->pixmap_icon_mask = None; - - if (self->frame) - frame_adjust_icon(self->frame); - } + client_update_kwm_icon(self); + /* try get the kwm icon first, this is a fallback only */ + if (self->pixmap_icon == None) { + if (hints->flags & IconPixmapHint) { + if (self->pixmap_icon == None) { + self->pixmap_icon = hints->icon_pixmap; + if (hints->flags & IconMaskHint) + self->pixmap_icon_mask = hints->icon_mask; + else + self->pixmap_icon_mask = None; + + if (self->frame) + frame_adjust_icon(self->frame); + } + } } XFree(hints);