]> git.mdlowis.com Git - proto/labwc.git/commitdiff
src/ssd: disable border on maximize
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Tue, 22 Aug 2023 23:04:40 +0000 (01:04 +0200)
committerConsolatis <35009135+Consolatis@users.noreply.github.com>
Fri, 25 Aug 2023 09:34:52 +0000 (11:34 +0200)
Fixes #1044

include/ssd-internal.h
src/ssd/ssd.c
src/ssd/ssd_border.c

index 755e5db402931ec136c3b5683c1b3818324d8551..3af0d06a963bf3cd3317a81686cc1e14e8bdf759 100644 (file)
@@ -62,7 +62,7 @@ struct ssd {
 
        /* Borders allow resizing as well */
        struct {
-               /* struct wlr_scene_tree *tree;      unused for now */
+               struct wlr_scene_tree *tree;
                struct ssd_sub_tree active;
                struct ssd_sub_tree inactive;
        } border;
index f2d3f267c9b4f60d1d5d0a5b63b738bf5a177b37..f2f37c12cb834a53e6ac7cb3c9a3de2587d0e692 100644 (file)
@@ -27,6 +27,15 @@ ssd_thickness(struct view *view)
        }
 
        struct theme *theme = view->server->theme;
+
+       if (view->maximized) {
+               struct border thickness = { 0 };
+               if (!ssd_titlebar_is_hidden(view->ssd)) {
+                       thickness.top += theme->title_height;
+               }
+               return thickness;
+       }
+
        struct border thickness = {
                .top = theme->title_height + theme->border_width,
                .bottom = theme->border_width,
index d7cc0e34806317d0403030c6a3f5ea5c04f802c2..70179777582856c7c47f808168bf36015a9d9053 100644 (file)
@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 
+#include <assert.h>
 #include "common/scene-helpers.h"
 #include "labwc.h"
 #include "ssd-internal.h"
@@ -13,6 +14,9 @@
 void
 ssd_border_create(struct ssd *ssd)
 {
+       assert(ssd);
+       assert(!ssd->border.tree);
+
        struct view *view = ssd->view;
        struct theme *theme = view->server->theme;
        int width = view->current.width;
@@ -23,10 +27,12 @@ ssd_border_create(struct ssd *ssd)
        struct wlr_scene_tree *parent;
        struct ssd_sub_tree *subtree;
 
+       ssd->border.tree = wlr_scene_tree_create(ssd->tree);
+       wlr_scene_node_set_position(&ssd->border.tree->node, -theme->border_width, 0);
+
        FOR_EACH_STATE(ssd, subtree) {
-               subtree->tree = wlr_scene_tree_create(ssd->tree);
+               subtree->tree = wlr_scene_tree_create(ssd->border.tree);
                parent = subtree->tree;
-               wlr_scene_node_set_position(&parent->node, -theme->border_width, 0);
                if (subtree == &ssd->border.active) {
                        color = theme->window_active_border_color;
                } else {
@@ -51,7 +57,24 @@ ssd_border_create(struct ssd *ssd)
 void
 ssd_border_update(struct ssd *ssd)
 {
+       assert(ssd);
+       assert(ssd->border.tree);
+
        struct view *view = ssd->view;
+       if (view->maximized && ssd->border.tree->node.enabled) {
+               /* Disable borders on maximize */
+               wlr_scene_node_set_enabled(&ssd->border.tree->node, false);
+               ssd->margin = ssd_thickness(ssd->view);
+       }
+
+       if (view->maximized) {
+               return;
+       } else if (!ssd->border.tree->node.enabled) {
+               /* And re-enabled them when unmaximized */
+               wlr_scene_node_set_enabled(&ssd->border.tree->node, true);
+               ssd->margin = ssd_thickness(ssd->view);
+       }
+
        struct theme *theme = view->server->theme;
 
        int width = view->current.width;
@@ -106,9 +129,8 @@ ssd_border_update(struct ssd *ssd)
 void
 ssd_border_destroy(struct ssd *ssd)
 {
-       if (!ssd->border.active.tree) {
-               return;
-       }
+       assert(ssd);
+       assert(ssd->border.tree);
 
        struct ssd_sub_tree *subtree;
        FOR_EACH_STATE(ssd, subtree) {
@@ -116,6 +138,9 @@ ssd_border_destroy(struct ssd *ssd)
                wlr_scene_node_destroy(&subtree->tree->node);
                subtree->tree = NULL;
        } FOR_EACH_END
+
+       wlr_scene_node_destroy(&ssd->border.tree->node);
+       ssd->border.tree = NULL;
 }
 
 #undef FOR_EACH_STATE