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).
This commit is contained in:
Josh Shone 2020-03-27 10:56:47 +01:00 committed by Simon Ser
parent 854497b242
commit 82d02ce782

View file

@ -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, static struct sway_container *floating_container_at(double lx, double ly,
struct wlr_surface **surface, double *sx, double *sy) { 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]; struct sway_output *output = root->outputs->items[i];
for (int j = 0; j < output->workspaces->length; ++j) { for (int j = 0; j < output->workspaces->length; ++j) {
struct sway_workspace *ws = output->workspaces->items[j]; struct sway_workspace *ws = output->workspaces->items[j];