From bd9b0676dd29672b64cabc5f07a33540e23bdceb Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Tue, 18 Jan 2022 18:59:33 +0000 Subject: [PATCH] shell: Make input capture optional for curtains desktop-shell's focus surfaces want to reuse this, but they don't want to capture the input, instead allowing it to fall through. Signed-off-by: Daniel Stone --- desktop-shell/shell.c | 1 + kiosk-shell/kiosk-shell.c | 2 ++ shared/shell-utils.c | 8 ++++++-- shared/shell-utils.h | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 6d77c383..645ac57a 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -2092,6 +2092,7 @@ shell_ensure_fullscreen_black_view(struct shell_surface *shsurf) .surface_committed = black_surface_committed, .get_label = black_surface_get_label, .surface_private = shsurf->view, + .capture_input = true, }; assert(weston_desktop_surface_get_fullscreen(shsurf->desktop_surface)); diff --git a/kiosk-shell/kiosk-shell.c b/kiosk-shell/kiosk-shell.c index 1f98b631..c8c2276d 100644 --- a/kiosk-shell/kiosk-shell.c +++ b/kiosk-shell/kiosk-shell.c @@ -508,6 +508,8 @@ kiosk_shell_output_recreate_background(struct kiosk_shell_output *shoutput) curtain_params.width = output->width; curtain_params.height = output->height; + curtain_params.capture_input = true; + curtain_params.get_label = kiosk_shell_background_surface_get_label; curtain_params.surface_committed = NULL; curtain_params.surface_private = NULL; diff --git a/shared/shell-utils.c b/shared/shell-utils.c index d4505f73..58342f68 100644 --- a/shared/shell-utils.c +++ b/shared/shell-utils.c @@ -173,8 +173,12 @@ weston_curtain_create(struct weston_compositor *compositor, } pixman_region32_fini(&surface->input); - pixman_region32_init_rect(&surface->input, 0, 0, - params->width, params->height); + if (params->capture_input) { + pixman_region32_init_rect(&surface->input, 0, 0, + params->width, params->height); + } else { + pixman_region32_init(&surface->input); + } weston_surface_set_size(surface, params->width, params->height); weston_view_set_position(view, params->x, params->y); diff --git a/shared/shell-utils.h b/shared/shell-utils.h index c5e648f1..33d93caa 100644 --- a/shared/shell-utils.h +++ b/shared/shell-utils.h @@ -33,6 +33,7 @@ struct weston_curtain_params { void *surface_private; float r, g, b, a; int x, y, width, height; + bool capture_input; }; struct weston_output *