From 1cdb6ada4e0f289389cfc61a7543b03a00539fb2 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Thu, 2 Jun 2022 23:05:39 +0200 Subject: [PATCH] gdk/wayland: Check the GdkSurface wl_surface before using it for activation Double check the GdkSurface has a wl_surface before using it as the activation token source, since we cannot use NULL surfaces here. Fixes: https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1862 (cherry-picked from commit 4b41d4f78ce71b60f0d51837cd1b6a1b346d679d) --- gdk/wayland/gdkapplaunchcontext-wayland.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/gdk/wayland/gdkapplaunchcontext-wayland.c b/gdk/wayland/gdkapplaunchcontext-wayland.c index 80cc3ffaf4..ed3c4772b1 100644 --- a/gdk/wayland/gdkapplaunchcontext-wayland.c +++ b/gdk/wayland/gdkapplaunchcontext-wayland.c @@ -60,6 +60,7 @@ gdk_wayland_app_launch_context_get_startup_notify_id (GAppLaunchContext *context { struct xdg_activation_token_v1 *token; struct wl_event_queue *event_queue; + struct wl_surface *wl_surface = NULL; GdkWaylandSeat *seat; GdkSurface *focus_surface; AppLaunchData app_launch_data = { 0 }; @@ -67,7 +68,6 @@ gdk_wayland_app_launch_context_get_startup_notify_id (GAppLaunchContext *context event_queue = wl_display_create_queue (display->wl_display); seat = GDK_WAYLAND_SEAT (gdk_display_get_default_seat (GDK_DISPLAY (display))); - focus_surface = gdk_wayland_device_get_focus (gdk_seat_get_keyboard (GDK_SEAT (seat))); token = xdg_activation_v1_get_activation_token (display->xdg_activation); wl_proxy_set_queue ((struct wl_proxy *) token, event_queue); @@ -77,9 +77,13 @@ gdk_wayland_app_launch_context_get_startup_notify_id (GAppLaunchContext *context xdg_activation_token_v1_set_serial (token, _gdk_wayland_seat_get_last_implicit_grab_serial (seat, NULL), gdk_wayland_seat_get_wl_seat (GDK_SEAT (seat))); + + focus_surface = gdk_wayland_device_get_focus (gdk_seat_get_keyboard (GDK_SEAT (seat))); if (focus_surface) - xdg_activation_token_v1_set_surface (token, - gdk_wayland_surface_get_wl_surface (focus_surface)); + wl_surface = gdk_wayland_surface_get_wl_surface (focus_surface); + if (wl_surface) + xdg_activation_token_v1_set_surface (token, wl_surface); + xdg_activation_token_v1_commit (token); while (app_launch_data.token == NULL) -- 2.30.2