]> git.mdlowis.com Git - proto/labwc.git/commitdiff
ssd: do not render resize cursors over exclusive layer-shell clients
authorJohan Malm <jgm323@gmail.com>
Mon, 10 Jan 2022 18:14:53 +0000 (18:14 +0000)
committerJohan Malm <jgm323@gmail.com>
Mon, 10 Jan 2022 18:14:53 +0000 (18:14 +0000)
...such as panels, even if the invisible region of a view's server-side
decoration extends over that layer-shell client.

Issue #207

src/ssd.c

index 789f5e387e042ec876192fbe3c93532ce758e5de..c21ff66d753e5065a41ee28067fba51eeb5906db 100644 (file)
--- a/src/ssd.c
+++ b/src/ssd.c
@@ -248,9 +248,37 @@ ssd_visible_box(struct view *view, enum ssd_part_type type)
        return box;
 }
 
+static bool
+cursor_in_usable_area(struct server *server, double lx, double ly)
+{
+       struct output *output;
+
+       struct wlr_output_layout *output_layout = server->output_layout;
+       wl_list_for_each(output, &server->outputs, link) {
+               double ox = 0, oy = 0;
+               wlr_output_layout_output_coords(output_layout,
+                       output->wlr_output, &ox, &oy);
+               if (wlr_box_contains_point(&output->usable_area,
+                               lx + ox, ly + oy)) {
+                       return true;
+               }
+       }
+       return false;
+}
+
 enum ssd_part_type
 ssd_at(struct view *view, double lx, double ly)
 {
+       /*
+        * Do not render resize cursors over exclusive layer-shell clients
+        * such as panels, even if the invisible region of a view's server-
+        * side decoration extends over that layer-shell client.
+        */
+       bool in_usable_area = cursor_in_usable_area(view->server, lx, ly);
+       if (!in_usable_area) {
+               return LAB_SSD_NONE;
+       }
+
        enum ssd_part_type type;
        for (type = 0; type < LAB_SSD_END_MARKER; ++type) {
                struct wlr_box box = ssd_box(view, type);