diff options
| author | Dana Jansens <danakj@orodu.net> | 2007-05-14 22:20:48 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2007-05-14 22:20:48 +0000 |
| commit | 2e7359a2fd4fa7cad349651392348553c9623053 (patch) | |
| tree | 15f3f1cb54b29372c75625715915ad20b8946bbc | |
| parent | 12c9b56dad52af840f9694719e63e69c47930917 (diff) | |
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.
| -rw-r--r-- | openbox/client.c | 21 | ||||
| -rw-r--r-- | 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; |
