X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=2e71f279667ddcaa262e935940803bee395e8632;hb=5cac540f560313cc5fde6d6d710dc500fd03f97a;hp=30bceae596787706e024eaffd351aec0e816c7ae;hpb=415f2cce2796e769fea0529f7cace1109a6e0ce6;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 30bceae5..2e71f279 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -269,6 +269,10 @@ void client_manage(Window window) sn_app_started(self->class); + /* update the focus lists, do this before the call to change_state or + it can end up in the list twice! */ + focus_order_add_new(self); + client_change_state(self); /* remove the client's border (and adjust re gravity) */ @@ -287,9 +291,6 @@ void client_manage(Window window) client_apply_startup_state(self); - /* update the focus lists */ - focus_order_add_new(self); - stacking_add(CLIENT_AS_WINDOW(self)); client_restore_session_stacking(self); @@ -714,22 +715,19 @@ static void client_get_all(ObClient *self) client_update_wmhints(self); client_get_startup_id(self); client_get_desktop(self); - client_get_state(self); client_get_shaped(self); client_get_mwm_hints(self); client_get_type(self);/* this can change the mwmhints for special cases */ + client_get_state(self); + { /* a couple type-based defaults for new windows */ /* this makes sure that these windows appear on all desktops */ if (self->type == OB_CLIENT_TYPE_DESKTOP) self->desktop = DESKTOP_ALL; - - /* dock windows default to ABOVE */ - if (self->type == OB_CLIENT_TYPE_DOCK && !self->below) - self->above = TRUE; } client_update_protocols(self); @@ -858,7 +856,7 @@ static void client_get_state(ObClient *self) for (it = self->group->members; it; it = g_slist_next(it)) { ObClient *c = it->data; if (c != self && !client_search_transient(self, c) && - client_normal(self) == client_normal(c)) + client_normal(self) && client_normal(c)) { layer = MAX(layer, (c->above ? 1 : (c->below ? -1 : 0))); @@ -1763,7 +1761,7 @@ static ObStackingLayer calc_layer(ObClient *self) else if (self->type == OB_CLIENT_TYPE_DOCK) { if (self->above) l = OB_STACKING_LAYER_DOCK_ABOVE; else if (self->below) l = OB_STACKING_LAYER_DOCK_BELOW; - else l = OB_STACKING_LAYER_NORMAL; + else l = OB_STACKING_LAYER_DOCK_NORMAL; } else if (self->above) l = OB_STACKING_LAYER_ABOVE; else if (self->below) l = OB_STACKING_LAYER_BELOW; @@ -2565,7 +2563,9 @@ void client_set_state(ObClient *self, Atom action, glong data1, glong data2) fullscreen = TRUE; } else if (state == prop_atoms.net_wm_state_above) { self->above = TRUE; + self->below = FALSE; } else if (state == prop_atoms.net_wm_state_below) { + self->above = FALSE; self->below = TRUE; } else if (state == prop_atoms.ob_wm_state_undecorated) { undecorated = TRUE;