---
 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].

Reply via email to