]> git.mdlowis.com Git - proto/labwc.git/commitdiff
ssd: make sizes of invisible SSD extents configurable
authorAndrew J. Hesford <ajh@sideband.org>
Fri, 17 Jan 2025 16:07:07 +0000 (11:07 -0500)
committerAndrew J. Hesford <ajh@sideband.org>
Tue, 4 Feb 2025 23:55:31 +0000 (18:55 -0500)
docs/labwc-config.5.scd
docs/rc.xml.all
include/config/rcxml.h
include/ssd.h
src/config/rcxml.c
src/ssd/ssd-extents.c

index 9be38e80b5deda1149801c41118b5e39cd3a350d..d9eb256111fbc4fa2710feda0efb8166b2081e5d 100644 (file)
@@ -583,6 +583,13 @@ extending outward from the snapped edge.
        horizontally and vertically rather than one or the other. Default is
        half the titlebar height.
 
+*<resize><minimumArea>*
+       Treat borders of server-side decorations as if they were at least the
+       indicated thickness, regardless of their visual size. Borders visually
+       narrower than the minimum effective thickness will be augmented with
+       invisible zones just beyond the window that serve as click targets for
+       mouse actions. Default is 8.
+
 ## KEYBOARD
 
 *<keyboard><numlock>* [on|off]
index 31ddb6d769bcd5f891ccd6cb17ecaf924d640c71..2d951b4aca9734bee80c9d6c4bfe2662c3af2721 100644 (file)
     <!-- Let client redraw its contents while resizing -->
     <drawContents>yes</drawContents>
     <cornerRange>8</cornerRange>
+    <!-- Borders are effectively 8 pixels wide regardless of visual appearance -->
+    <minimumArea>8</minimumArea>
   </resize>
 
   <focus>
index 0b9c0dc9a00b66df150f7447da1489ce2d6649d5..3867618eee56b9f889592b7b3d81082223240f2a 100644 (file)
@@ -152,6 +152,7 @@ struct rcxml {
        enum resize_indicator_mode resize_indicator;
        bool resize_draw_contents;
        int resize_corner_range;
+       int resize_minimum_area;
 
        struct {
                int popuptime;
index 3c0231211ffcccbd13d0c7fc3da47c1da935039b..5cbac60a8d35e24e73af40c705cbc7d5050fdc5d 100644 (file)
@@ -7,8 +7,6 @@
 
 struct wlr_cursor;
 
-#define SSD_EXTENDED_AREA 8
-
 /*
  * Shadows should start at a point inset from the actual window border, see
  * discussion on https://github.com/labwc/labwc/pull/1648.  This constant
index eebf695688ae5c814be402c3bf54fede2a4c5ac4..a3b3ee3a1bf64bc3b9cc0ecc3eb3ee47b116c54a 100644 (file)
@@ -1225,6 +1225,8 @@ entry(xmlNode *node, char *nodename, char *content, struct parser_state *state)
                set_bool(content, &rc.resize_draw_contents);
        } else if (!strcasecmp(nodename, "cornerRange.resize")) {
                rc.resize_corner_range = atoi(content);
+       } else if (!strcasecmp(nodename, "minimumArea.resize")) {
+               rc.resize_minimum_area = MAX(0, atoi(content));
        } else if (!strcasecmp(nodename, "mouseEmulation.tablet")) {
                set_bool(content, &rc.tablet.force_mouse_emulation);
        } else if (!strcasecmp(nodename, "mapToOutput.tablet")) {
@@ -1501,6 +1503,7 @@ rcxml_init(void)
        rc.resize_indicator = LAB_RESIZE_INDICATOR_NEVER;
        rc.resize_draw_contents = true;
        rc.resize_corner_range = -1;
+       rc.resize_minimum_area = 8;
 
        rc.workspace_config.popuptime = INT_MIN;
        rc.workspace_config.min_nr_workspaces = 1;
index e88b58ead7631d93a5762430760f1a3b7fc17175..c2ff6d0c4a0cdc080f76d74b2a0d1baa82fd4edf 100644 (file)
@@ -4,6 +4,7 @@
 #include <pixman.h>
 #include "common/mem.h"
 #include "common/scene-helpers.h"
+#include "config/rcxml.h"
 #include "labwc.h"
 #include "ssd-internal.h"
 #include "theme.h"
@@ -25,7 +26,8 @@ ssd_extents_create(struct ssd *ssd)
        struct view *view = ssd->view;
        struct theme *theme = view->server->theme;
        struct wl_list *part_list = &ssd->extents.parts;
-       int extended_area = SSD_EXTENDED_AREA;
+
+       int border_width = MAX(0, MAX(rc.resize_minimum_area, theme->border_width));
 
        ssd->extents.tree = wlr_scene_tree_create(ssd->tree);
        struct wlr_scene_tree *parent = ssd->extents.tree;
@@ -34,8 +36,7 @@ ssd_extents_create(struct ssd *ssd)
        }
        wl_list_init(&ssd->extents.parts);
        wlr_scene_node_set_position(&parent->node,
-               -(theme->border_width + extended_area),
-               -(ssd->titlebar.height + theme->border_width + extended_area));
+               -border_width, -(ssd->titlebar.height + border_width));
 
        add_extent(part_list, LAB_SSD_PART_TOP, parent);
        add_extent(part_list, LAB_SSD_PART_LEFT, parent);
@@ -68,7 +69,8 @@ ssd_extents_update(struct ssd *ssd)
        int height = view_effective_height(view, /* use_pending */ false);
        int full_height = height + theme->border_width * 2 + ssd->titlebar.height;
        int full_width = width + 2 * theme->border_width;
-       int extended_area = SSD_EXTENDED_AREA;
+       int border_width = MAX(rc.resize_minimum_area, theme->border_width);
+       int extended_area = MAX(0, rc.resize_minimum_area - theme->border_width);
 
        struct wlr_box part_box;
        struct wlr_box result_box;
@@ -78,8 +80,7 @@ ssd_extents_update(struct ssd *ssd)
 
        /* Make sure we update the y offset based on titlebar shown / hidden */
        wlr_scene_node_set_position(&ssd->extents.tree->node,
-               -(theme->border_width + extended_area),
-               -(ssd->titlebar.height + theme->border_width + extended_area));
+               -border_width, -(ssd->titlebar.height + border_width));
 
        /*
         * Convert all output usable areas that the