From 6ebc685ce626d0d89e9e3560ca9c1c82f2f4ed56 Mon Sep 17 00:00:00 2001 From: Josh Shone Date: Fri, 27 Mar 2020 10:56:47 +0100 Subject: [PATCH] Fix hit test for floaters that cross outputs In the case of multiple overlapping floating windows, this commit fixes an issue where the wrong window would be focused in response to a cursor if one of the windows came from a different output (overhanging). --- sway/tree/container.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sway/tree/container.c b/sway/tree/container.c index afb0f9272..0c40af0a0 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -289,7 +289,10 @@ static struct sway_container *container_at_linear(struct sway_node *parent, static struct sway_container *floating_container_at(double lx, double ly, struct wlr_surface **surface, double *sx, double *sy) { - for (int i = 0; i < root->outputs->length; ++i) { + // For outputs with floating containers that overhang the output bounds, + // those at the end of the output list appear on top of floating + // containers from other outputs, so iterate the list in reverse. + for (int i = root->outputs->length - 1; i >= 0; --i) { struct sway_output *output = root->outputs->items[i]; for (int j = 0; j < output->workspaces->length; ++j) { struct sway_workspace *ws = output->workspaces->items[j];