all repos — openbox @ 2e7359a2fd4fa7cad349651392348553c9623053

openbox fork - make it a bit more like ryudo

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
commit

2e7359a2fd4fa7cad349651392348553c9623053

parent

12c9b56dad52af840f9694719e63e69c47930917

2 files changed, 22 insertions(+), 12 deletions(-)

jump to
M openbox/client.copenbox/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.hopenbox/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;