]> git.mdlowis.com Git - proto/labwc.git/commitdiff
view: fix view_get_adjacent_output() bug
authorJohan Malm <jgm323@gmail.com>
Sat, 2 Mar 2024 15:34:52 +0000 (15:34 +0000)
committerJohan Malm <johanmalm@users.noreply.github.com>
Sat, 2 Mar 2024 21:23:01 +0000 (21:23 +0000)
...when using more than two outputs.

Use the centre of the view's output as the reference coordinate when
seeking adjacent outputs.

Fixes: #1582
src/view.c

index 87b29e008daa45c06d6cd30af129b0eb14745ffd..e297b725ff4bb3ec830ed72fa355ad50e3d2c910 100644 (file)
@@ -1530,6 +1530,10 @@ view_get_adjacent_output(struct view *view, enum view_edge edge)
                return NULL;
        }
 
+       struct wlr_box box = output_usable_area_in_layout_coords(view->output);
+       int lx = box.x + box.width / 2;
+       int ly = box.y + box.height / 2;
+
        /* Determine any adjacent output in the appropriate direction */
        struct wlr_output *new_output = NULL;
        struct wlr_output *current_output = output->wlr_output;
@@ -1537,19 +1541,19 @@ view_get_adjacent_output(struct view *view, enum view_edge edge)
        switch (edge) {
        case VIEW_EDGE_LEFT:
                new_output = wlr_output_layout_adjacent_output(
-                       layout, WLR_DIRECTION_LEFT, current_output, 1, 0);
+                       layout, WLR_DIRECTION_LEFT, current_output, lx, ly);
                break;
        case VIEW_EDGE_RIGHT:
                new_output = wlr_output_layout_adjacent_output(
-                       layout, WLR_DIRECTION_RIGHT, current_output, 1, 0);
+                       layout, WLR_DIRECTION_RIGHT, current_output, lx, ly);
                break;
        case VIEW_EDGE_UP:
                new_output = wlr_output_layout_adjacent_output(
-                       layout, WLR_DIRECTION_UP, current_output, 0, 1);
+                       layout, WLR_DIRECTION_UP, current_output, lx, ly);
                break;
        case VIEW_EDGE_DOWN:
                new_output = wlr_output_layout_adjacent_output(
-                       layout, WLR_DIRECTION_DOWN, current_output, 0, 1);
+                       layout, WLR_DIRECTION_DOWN, current_output, lx, ly);
                break;
        default:
                break;