From 56607e8cfea59a25c883a2947502952b52e41cab Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Thu, 2 Jun 2022 23:04:40 +0200 Subject: [PATCH] gdk/wayland: Dispatch GdkAppLaunchContext activation token in its own queue Use a separate queue to dispatch the token object exclusively, just like we do on the GdkSurface activation paths. (cherry-picked from commit fb68600d88d4d334f7da7d079b106a1ef14503a6) --- gdk/wayland/gdkapplaunchcontext-wayland.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gdk/wayland/gdkapplaunchcontext-wayland.c b/gdk/wayland/gdkapplaunchcontext-wayland.c index c8bf5afd25..80cc3ffaf4 100644 --- a/gdk/wayland/gdkapplaunchcontext-wayland.c +++ b/gdk/wayland/gdkapplaunchcontext-wayland.c @@ -59,13 +59,17 @@ gdk_wayland_app_launch_context_get_startup_notify_id (GAppLaunchContext *context if (display->xdg_activation) { struct xdg_activation_token_v1 *token; + struct wl_event_queue *event_queue; GdkWaylandSeat *seat; GdkSurface *focus_surface; AppLaunchData app_launch_data = { 0 }; + 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); xdg_activation_token_v1_add_listener (token, &token_listener, @@ -79,10 +83,11 @@ gdk_wayland_app_launch_context_get_startup_notify_id (GAppLaunchContext *context xdg_activation_token_v1_commit (token); while (app_launch_data.token == NULL) - wl_display_roundtrip (display->wl_display); + wl_display_dispatch_queue (display->wl_display, event_queue); xdg_activation_token_v1_destroy (token); id = app_launch_data.token; + wl_event_queue_destroy (event_queue); } else if (display->gtk_shell_version >= 3) {