gdk/wayland: Perform xdg_activation on gdk_toplevel_set_startup_id
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 3 Jan 2023 12:44:44 +0000 (13:44 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 3 Jan 2023 13:57:49 +0000 (14:57 +0100)
This call has everything to perform activation as specified by the
xdg_activation protocol, notably a surface to activate as opposed to
gdk_display_notify_startup_complete().

Make activation happen here, so that the surface gets activated when
its gets a startup ID assigned.

gdk/wayland/gdksurface-wayland.c

index 0e0a651ead7d01224f98844126521519356559e1..1f5c2385d76feff82c2ff4a7d15d212e6a14d8be 100644 (file)
@@ -3871,6 +3871,25 @@ static void
 gdk_wayland_surface_set_startup_id (GdkSurface  *surface,
                                     const char *startup_id)
 {
+  GdkWaylandSurface *wayland_surface = GDK_WAYLAND_SURFACE (surface);
+  GdkDisplay *display = gdk_surface_get_display (surface);
+  GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
+  gchar *free_me = NULL;
+
+  if (!startup_id)
+    {
+      free_me = g_steal_pointer (&display_wayland->startup_notification_id);
+      startup_id = free_me;
+    }
+
+  if (startup_id)
+    {
+      xdg_activation_v1_activate (display_wayland->xdg_activation,
+                                  startup_id,
+                                  wayland_surface->display_server.wl_surface);
+    }
+
+  g_free (free_me);
 }
 
 static gboolean