From 2e7359a2fd4fa7cad349651392348553c9623053 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Mon, 14 May 2007 22:20:48 +0000 Subject: [PATCH] fix fullscreen windows being stuck in the wrong layer when they come out of fullscreen. add a new layer where fullscreen windows go when are aren't focused, below all normal windows, so you can alt-tab to a below layer window and it will show itself. --- openbox/client.c | 21 +++++++++++++++------ openbox/stacking.h | 13 +++++++------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/openbox/client.c b/openbox/client.c index 18aac818..16c24937 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -2367,9 +2367,12 @@ static ObStackingLayer calc_layer(ObClient *self) self->frame->size.bottom == 0 && self->frame->size.top == 0 && RECT_EQUAL(self->area, *screen_physical_area_monitor - (client_monitor(self)))))) && - (client_focused(self) || client_search_focus_tree(self))) - l = OB_STACKING_LAYER_FULLSCREEN; + (client_monitor(self))))))) { + if (client_focused(self) || client_search_focus_tree(self)) + l = OB_STACKING_LAYER_FULLSCREEN; + else + l = OB_STACKING_LAYER_FULLSCREEN_BELOW; + } else if (self->above) l = OB_STACKING_LAYER_ABOVE; else if (self->below) l = OB_STACKING_LAYER_BELOW; else l = OB_STACKING_LAYER_NORMAL; @@ -2814,7 +2817,6 @@ void client_fullscreen(ObClient *self, gboolean fs) self->fullscreen = fs; client_change_state(self); /* change the state hints on the client */ - client_calc_layer(self); /* and adjust out layer/stacking */ if (fs) { self->pre_fullscreen_area = self->area; @@ -2850,8 +2852,15 @@ void client_fullscreen(ObClient *self, gboolean fs) client_move_resize(self, x, y, w, h); - /* try focus us when we go into fullscreen mode */ - client_focus(self); + /* and adjust our layer/stacking. do this after resizing the window, + and applying decorations, because windows which fill the screen are + considered "fullscreen" and it affects their layer */ + client_calc_layer(self); + + if (fs) { + /* try focus us when we go into fullscreen mode */ + client_focus(self); + } } static void client_iconify_recursive(ObClient *self, diff --git a/openbox/stacking.h b/openbox/stacking.h index ded4644e..ea1ea8c9 100644 --- a/openbox/stacking.h +++ b/openbox/stacking.h @@ -28,12 +28,13 @@ /*! The possible stacking layers a client window can be a part of */ typedef enum { OB_STACKING_LAYER_INVALID, - OB_STACKING_LAYER_DESKTOP, /*!< 0 - desktop windows */ - OB_STACKING_LAYER_BELOW, /*!< 1 - normal windows w/ below */ - OB_STACKING_LAYER_NORMAL, /*!< 2 - normal windows */ - OB_STACKING_LAYER_ABOVE, /*!< 3 - normal windows w/ above */ - OB_STACKING_LAYER_FULLSCREEN, /*!< 4 - fullscreeen windows */ - OB_STACKING_LAYER_INTERNAL, /*!< 5 - openbox windows/menus */ + OB_STACKING_LAYER_DESKTOP, /*!< 0 - desktop windows */ + OB_STACKING_LAYER_FULLSCREEN_BELOW, /*!< 1 - unfocused fullscreens */ + OB_STACKING_LAYER_BELOW, /*!< 2 - normal windows w/ below */ + OB_STACKING_LAYER_NORMAL, /*!< 3 - normal windows */ + OB_STACKING_LAYER_ABOVE, /*!< 4 - normal windows w/ above */ + OB_STACKING_LAYER_FULLSCREEN, /*!< 5 - fullscreeen windows */ + OB_STACKING_LAYER_INTERNAL, /*!< 6 - openbox windows/menus */ OB_NUM_STACKING_LAYERS } ObStackingLayer; -- 2.44.0