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.
Dana Jansens danakj@orodu.net
2 files changed,
22 insertions(+),
12 deletions(-)
M
openbox/client.c
→
openbox/client.c
@@ -2367,9 +2367,12 @@ (self->frame->size.right == 0 && self->frame->size.left == 0 &&
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 @@ self->fullscreen == fs) return; /* already done */
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 @@ client_setup_decor_and_functions(self);
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,
M
openbox/stacking.h
→
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;