From 2279df460ebe9f55747d8e69aaf60d19600b0b1a Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Fri, 24 Jun 2022 16:25:11 +0800 Subject: [PATCH 72/74] desktop-shell: Avoid lowering the requested fullscreen surface Don't lower itself. Signed-off-by: Jeffy Chen --- desktop-shell/exposay.c | 2 +- desktop-shell/shell.c | 9 +++++---- desktop-shell/shell.h | 3 ++- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/desktop-shell/exposay.c b/desktop-shell/exposay.c index c7c064b..0981f1a 100644 --- a/desktop-shell/exposay.c +++ b/desktop-shell/exposay.c @@ -646,7 +646,7 @@ exposay_transition_active(struct desktop_shell *shell) shell->exposay.clicked = NULL; wl_list_init(&shell->exposay.surface_list); - lower_fullscreen_layer(shell, NULL); + lower_fullscreen_layer(shell, NULL, NULL); shell->exposay.grab_kbd.interface = &exposay_kbd_grab; weston_keyboard_start_grab(keyboard, &shell->exposay.grab_kbd); diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index cc0246e..dbb62e9 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -3747,7 +3747,8 @@ rotate_binding(struct weston_pointer *pointer, const struct timespec *time, * the alt-tab switcher, which need to de-promote fullscreen layers. */ void lower_fullscreen_layer(struct desktop_shell *shell, - struct weston_output *lowering_output) + struct weston_output *lowering_output, + struct shell_surface *orig_shsurf) { struct workspace *ws; struct weston_view *view, *prev; @@ -3758,7 +3759,7 @@ lower_fullscreen_layer(struct desktop_shell *shell, layer_link.link) { struct shell_surface *shsurf = get_shell_surface(view->surface); - if (!shsurf) + if (!shsurf || shsurf == orig_shsurf) continue; /* Only lower surfaces which have lowering_output as their fullscreen @@ -3826,7 +3827,7 @@ activate(struct desktop_shell *shell, struct weston_view *view, /* Only demote fullscreen surfaces on the output of activated shsurf. * Leave fullscreen surfaces on unrelated outputs alone. */ if (shsurf->output) - lower_fullscreen_layer(shell, shsurf->output); + lower_fullscreen_layer(shell, shsurf->output, shsurf); if (view->surface->flags & SURFACE_NO_FOCUS) goto no_focus; @@ -4657,7 +4658,7 @@ switcher_binding(struct weston_keyboard *keyboard, const struct timespec *time, wl_list_init(&switcher->listener.link); wl_array_init(&switcher->minimized_array); - lower_fullscreen_layer(switcher->shell, NULL); + lower_fullscreen_layer(switcher->shell, NULL, NULL); switcher->grab.interface = &switcher_grab; weston_keyboard_start_grab(keyboard, &switcher->grab); weston_keyboard_set_focus(keyboard, NULL); diff --git a/desktop-shell/shell.h b/desktop-shell/shell.h index e0a0620..269648a 100644 --- a/desktop-shell/shell.h +++ b/desktop-shell/shell.h @@ -242,7 +242,8 @@ get_output_work_area(struct desktop_shell *shell, void lower_fullscreen_layer(struct desktop_shell *shell, - struct weston_output *lowering_output); + struct weston_output *lowering_output, + struct shell_surface *orig_shsurf); void activate(struct desktop_shell *shell, struct weston_view *view, -- 2.20.1