fix cursor input for layer-shell surfaces
previously, fullscreen global containers would grab cursor input even if a shell-layer surface was on top of it related issue: https://github.com/swaywm/sway/issues/6501
This commit is contained in:
parent
9303bed4d4
commit
aaf68cf423
|
@ -83,7 +83,28 @@ static struct wlr_surface *layer_surface_popup_at(struct sway_output *output,
|
||||||
struct sway_node *node_at_coords(
|
struct sway_node *node_at_coords(
|
||||||
struct sway_seat *seat, double lx, double ly,
|
struct sway_seat *seat, double lx, double ly,
|
||||||
struct wlr_surface **surface, double *sx, double *sy) {
|
struct wlr_surface **surface, double *sx, double *sy) {
|
||||||
// check for unmanaged views first
|
// find the output the cursor is on
|
||||||
|
struct wlr_output *wlr_output = wlr_output_layout_output_at(
|
||||||
|
root->output_layout, lx, ly);
|
||||||
|
if (wlr_output == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
struct sway_output *output = wlr_output->data;
|
||||||
|
if (!output || !output->enabled) {
|
||||||
|
// output is being destroyed or is being enabled
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
double ox = lx, oy = ly;
|
||||||
|
wlr_output_layout_output_coords(root->output_layout, wlr_output, &ox, &oy);
|
||||||
|
|
||||||
|
// layer surfaces on the overlay layer are rendered on top
|
||||||
|
if ((*surface = layer_surface_at(output,
|
||||||
|
&output->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY],
|
||||||
|
ox, oy, sx, sy))) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for unmanaged views
|
||||||
#if HAVE_XWAYLAND
|
#if HAVE_XWAYLAND
|
||||||
struct wl_list *unmanaged = &root->xwayland_unmanaged;
|
struct wl_list *unmanaged = &root->xwayland_unmanaged;
|
||||||
struct sway_xwayland_unmanaged *unmanaged_surface;
|
struct sway_xwayland_unmanaged *unmanaged_surface;
|
||||||
|
@ -101,19 +122,6 @@ struct sway_node *node_at_coords(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// find the output the cursor is on
|
|
||||||
struct wlr_output *wlr_output = wlr_output_layout_output_at(
|
|
||||||
root->output_layout, lx, ly);
|
|
||||||
if (wlr_output == NULL) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
struct sway_output *output = wlr_output->data;
|
|
||||||
if (!output || !output->enabled) {
|
|
||||||
// output is being destroyed or is being enabled
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
double ox = lx, oy = ly;
|
|
||||||
wlr_output_layout_output_coords(root->output_layout, wlr_output, &ox, &oy);
|
|
||||||
|
|
||||||
if (root->fullscreen_global) {
|
if (root->fullscreen_global) {
|
||||||
// Try fullscreen container
|
// Try fullscreen container
|
||||||
|
@ -131,11 +139,6 @@ struct sway_node *node_at_coords(
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((*surface = layer_surface_at(output,
|
|
||||||
&output->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY],
|
|
||||||
ox, oy, sx, sy))) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (ws->fullscreen) {
|
if (ws->fullscreen) {
|
||||||
// Try transient containers
|
// Try transient containers
|
||||||
for (int i = 0; i < ws->floating->length; ++i) {
|
for (int i = 0; i < ws->floating->length; ++i) {
|
||||||
|
|
Loading…
Reference in a new issue