From 9693100e16116771acf3de63c62ffe04a956886a Mon Sep 17 00:00:00 2001 From: "Andrew J. Hesford" Date: Thu, 1 Feb 2024 09:44:44 -0500 Subject: [PATCH] edges: only snap to neighbors on outputs containing the changing view --- src/edges.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/edges.c b/src/edges.c index ad087bf4..66325b14 100644 --- a/src/edges.c +++ b/src/edges.c @@ -137,8 +137,10 @@ edges_find_neighbors(struct border *nearest_edges, struct view *view, struct border view_edges = { 0 }; struct border target_edges = { 0 }; - edges_for_target_geometry(&view_edges, view, - use_pending ? view->pending : view->current); + struct wlr_box *view_geom = + use_pending ? &view->pending : &view->current; + + edges_for_target_geometry(&view_edges, view, *view_geom); edges_for_target_geometry(&target_edges, view, target); struct view *v; @@ -151,6 +153,20 @@ edges_find_neighbors(struct border *nearest_edges, struct view *view, continue; } + /* + * If view and v are on different outputs, make sure part of + * view is actually in the usable area of the output of v. + */ + if (view->output != v->output) { + struct wlr_box usable = + output_usable_area_in_layout_coords(v->output); + + struct wlr_box ol; + if (!wlr_box_intersection(&ol, view_geom, &usable)) { + continue; + } + } + struct border border = ssd_get_margin(v->ssd); struct border win_edges = { -- 2.52.0