---
client.c | 8 ++++++++
structs.h | 4 ++++
titlebar.c | 18 ++++++++++++++++--
3 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/client.c b/client.c
index da6262d..2d8a3a4 100644
--- a/client.c
+++ b/client.c
@@ -845,6 +845,11 @@ client_setfullscreen(client_t *c, bool s)
client_setabove(c, false);
client_setontop(c, false);
+ if(c->titlebar) {
+ c->titlebar->visibilities.fullscreen = c->titlebar->isvisible;
+ titlebar_set_visible(c->titlebar, false);
+ }
+
geometry = screen_area_get(c->screen, NULL, NULL, false);
c->geometries.fullscreen = c->geometry;
c->border_fs = c->border;
@@ -852,6 +857,9 @@ client_setfullscreen(client_t *c, bool s)
}
else
{
+ if(c->titlebar)
+ titlebar_set_visible(c->titlebar,
c->titlebar->visibilities.fullscreen);
+
geometry = c->geometries.fullscreen;
client_setborder(c, c->border_fs);
}
diff --git a/structs.h b/structs.h
index 3c1e5f3..cb692ef 100644
--- a/structs.h
+++ b/structs.h
@@ -87,6 +87,10 @@ typedef struct
bool ontop;
/** Visible */
bool isvisible;
+ struct {
+ /* visibility when not fullscreen */
+ bool fullscreen;
+ } visibilities;
/** Position */
position_t position;
/** Wibox type */
diff --git a/titlebar.c b/titlebar.c
index d5de3e4..344d6ab 100644
--- a/titlebar.c
+++ b/titlebar.c
@@ -182,7 +182,8 @@ titlebar_client_detach(client_t *c)
if(c && c->titlebar)
{
/* Update client geometry to exclude the titlebar. */
- c->geometry = titlebar_geometry_remove(c->titlebar, 0, c->geometry);
+ if (c->titlebar->isvisible)
+ c->geometry = titlebar_geometry_remove(c->titlebar, 0,
c->geometry);
simplewindow_wipe(&c->titlebar->sw);
c->titlebar->type = WIBOX_TYPE_NORMAL;
c->titlebar->screen = SCREEN_UNDEF;
@@ -233,7 +234,8 @@ titlebar_client_attach(client_t *c, wibox_t *t)
}
/* Update client geometry to include the titlebar. */
- c->geometry = titlebar_geometry_add(c->titlebar, 0, c->geometry);
+ if (c->titlebar->isvisible)
+ c->geometry = titlebar_geometry_add(c->titlebar, 0, c->geometry);
/* Client geometry without titlebar, but including borders, since that
is always consistent. */
titlebar_geometry_compute(c, titlebar_geometry_remove(c->titlebar, 0,
c->geometry), &wingeom);
@@ -267,6 +269,8 @@ titlebar_set_visible(wibox_t *t, bool visible)
{
if (visible != t->isvisible)
{
+ client_t *c;
+
/* The price of (un)mapping something small like a titlebar is pretty
cheap.
* It would complicate matters if this rare case was treated like
clients.
* Clients are moved out of the viewport when banned.
@@ -276,6 +280,16 @@ titlebar_set_visible(wibox_t *t, bool visible)
else
xcb_unmap_window(globalconf.connection, t->sw.window);
+ /* Update geometry of all clients to which this titlebar is attached.
*/
+ for(c = globalconf.clients; c; c = c->next) {
+ if(c->titlebar == t) {
+ if(visible)
+ c->geometry = titlebar_geometry_add(c->titlebar, 0,
c->geometry);
+ else
+ c->geometry = titlebar_geometry_remove(c->titlebar, 0,
c->geometry);
+ }
+ }
+
globalconf.screens[t->screen].need_arrange = true;
client_stack();
}
--
1.6.2
--
To unsubscribe, send mail to [email protected].