X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=c7d03a826fa61c28e8bbd9452178586b4df69cf5;hb=0908816132ba2990c284696851566aae80a4ee01;hp=7b96928944434bb54246e036adc3f93ecd0af931;hpb=365940477b77e6993412dfd7136172a4d4318ac1;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 7b969289..c7d03a82 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -1664,7 +1664,9 @@ static ObStackingLayer calc_layer(ObClient *self) { ObStackingLayer l; - if (self->fullscreen) l = OB_STACKING_LAYER_FULLSCREEN; + if (self->fullscreen && + (client_focused(self) || client_search_focus_tree(self))) + l = OB_STACKING_LAYER_FULLSCREEN; else if (self->type == OB_CLIENT_TYPE_DESKTOP) l = OB_STACKING_LAYER_DESKTOP; else if (self->type == OB_CLIENT_TYPE_DOCK) { @@ -2181,7 +2183,7 @@ void client_maximize(ObClient *self, gboolean max, int dir, gboolean savearea) } } if ((dir == 0 || dir == 2) && self->max_vert) { /* vert */ - if (self->pre_max_area.width > 0) { + if (self->pre_max_area.height > 0) { y = self->pre_max_area.y; h = self->pre_max_area.height; @@ -2287,7 +2289,7 @@ void client_set_desktop_recursive(ObClient *self, client_showhide(self); /* raise if it was not already on the desktop */ if (old != DESKTOP_ALL) - stacking_raise(CLIENT_AS_WINDOW(self)); + client_raise(self); screen_update_areas(); /* add to the new desktop(s) */ @@ -2490,7 +2492,7 @@ ObClient *client_focus_target(ObClient *self) ObClient *child; /* if we have a modal child, then focus it, not us */ - child = client_search_modal_child(self); + child = client_search_modal_child(client_search_top_transient(self)); if (child) return child; return self; } @@ -2600,7 +2602,7 @@ void client_activate(ObClient *self, gboolean here) if (client_normal(self) && screen_showing_desktop) screen_show_desktop(FALSE); if (self->iconic) - client_iconify(self, FALSE, FALSE); + client_iconify(self, FALSE, here); if (self->desktop != DESKTOP_ALL && self->desktop != screen_desktop) { if (here) @@ -2613,8 +2615,25 @@ void client_activate(ObClient *self, gboolean here) return; if (self->shaded) client_shade(self, FALSE); + client_focus(self); - stacking_raise(CLIENT_AS_WINDOW(self)); + + /* we do this an action here. this is rather important. this is because + we want the results from the focus change to take place BEFORE we go + about raising the window. when a fullscreen window loses focus, we need + this or else the raise wont be able to raise above the to-lose-focus + fullscreen window. */ + client_raise(self); +} + +void client_raise(ObClient *self) +{ + action_run_string("Raise", self); +} + +void client_lower(ObClient *self) +{ + action_run_string("Raise", self); } gboolean client_focused(ObClient *self)