]> git.mdlowis.com Git - proto/labwc.git/commitdiff
ssd: allow hiding titlebar on maximization
authortokyo4j <hrak1529@gmail.com>
Thu, 21 Aug 2025 04:56:37 +0000 (13:56 +0900)
committerJohan Malm <johanmalm@users.noreply.github.com>
Sun, 24 Aug 2025 11:41:41 +0000 (12:41 +0100)
<core disableMaximizedServerDecor="yes"> hides the titlebar when a window
is maximized.

Co-authored-by: @CosmicFusion
docs/labwc-config.5.scd
docs/rc.xml.all
include/config/rcxml.h
src/config/rcxml.c
src/ssd/ssd.c
src/view.c

index 860391c9f7719fb92e68770b89c02895d65ae8ec..e86fb75f1b296644904676f6f5aa6572c1afc708 100644 (file)
@@ -171,6 +171,7 @@ this is for compatibility with Openbox.
 ```
 <core>
   <decoration>server</decoration>
+  <maximizedDecoration>titlebar</maximizedDecoration>
   <gap>0</gap>
   <adaptiveSync>no</adaptiveSync>
   <allowTearing>no</allowTearing>
@@ -186,6 +187,11 @@ this is for compatibility with Openbox.
        that it is not always possible to turn off client side decorations.
        Default is server.
 
+*<core><maximizedDecoration>* [titlebar|none]
+       Specify how server side decorations are shown for maximized windows.
+       *titlebar* shows titlebar above a maximized window. *none* shows no server
+       side decorations around a maximized window. Default is titlebar.
+
 *<core><gap>*
        The distance in pixels between windows and output edges when using
        movement actions, for example MoveToEdge. Default is 0.
index 3084aee5f933b093ad3e8db42f0caeaf2187b4cd..91dc77913e05546e85767def1c706c3078264902 100644 (file)
@@ -11,6 +11,7 @@
 
   <core>
     <decoration>server</decoration>
+    <maximizedDecoration>titlebar</maximizedDecoration>
     <gap>0</gap>
     <adaptiveSync>no</adaptiveSync>
     <allowTearing>no</allowTearing>
index a7eb22bdd21ac3a03df920125cdc09a1bd443b3a..cb3dd1b942a8c9603c285d9393f794a5debc4c29 100644 (file)
@@ -66,6 +66,7 @@ struct rcxml {
 
        /* core */
        bool xdg_shell_server_side_deco;
+       bool hide_maximized_window_titlebar;
        int gap;
        enum adaptive_sync_mode adaptive_sync;
        enum tearing_mode allow_tearing;
index 8746836bc15d8c62895a2efc6c366b19b8650dcb..52e02c4be129c90a78b2a1e009810565c73ba6eb 100644 (file)
@@ -1094,6 +1094,12 @@ entry(xmlNode *node, char *nodename, char *content)
                } else {
                        rc.xdg_shell_server_side_deco = true;
                }
+       } else if (!strcasecmp(nodename, "maximizedDecoration.core")) {
+               if (!strcasecmp(content, "titlebar")) {
+                       rc.hide_maximized_window_titlebar = false;
+               } else if (!strcasecmp(content, "none")) {
+                       rc.hide_maximized_window_titlebar = true;
+               }
        } else if (!strcmp(nodename, "gap.core")) {
                rc.gap = atoi(content);
        } else if (!strcasecmp(nodename, "adaptiveSync.core")) {
@@ -1370,6 +1376,7 @@ rcxml_init(void)
        rc.placement_cascade_offset_y = 0;
 
        rc.xdg_shell_server_side_deco = true;
+       rc.hide_maximized_window_titlebar = false;
        rc.show_title = true;
        rc.title_layout_loaded = false;
        rc.ssd_keep_border = true;
index db706085b493b03126bc377d7f22dfe16b30bbd6..3d0dd7a07b0a37c6c3122107b6ac69436e04cedf 100644 (file)
@@ -312,6 +312,12 @@ ssd_update_geometry(struct ssd *ssd)
                || ssd->state.was_squared != squared
                || ssd->state.was_omnipresent != view->visible_on_all_workspaces;
 
+       /*
+        * (Un)maximization updates titlebar visibility with
+        * maximizedDecoration=none
+        */
+       ssd_set_titlebar(ssd, view_titlebar_visible(view));
+
        if (update_extents) {
                ssd_extents_update(ssd);
        }
index 75f8bad18a1d2180124db4e7b51c5f1e4c8fe0b1..a81b03ad0839fd6493fd65d687572aeb86cc12ae 100644 (file)
@@ -1660,6 +1660,10 @@ undecorate(struct view *view)
 bool
 view_titlebar_visible(struct view *view)
 {
+       if (view->maximized == VIEW_AXIS_BOTH
+                       && rc.hide_maximized_window_titlebar) {
+               return false;
+       }
        return view->ssd_mode == LAB_SSD_MODE_FULL;
 }