gdk/x11: Emit "remove" s-n message from gdk_toplevel_set_startup_id
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 3 Jan 2023 12:47:54 +0000 (13:47 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 3 Jan 2023 13:58:25 +0000 (14:58 +0100)
In the way towards deprecating gdk_display_notify_startup_complete(),
make gdk_toplevel_set_startup_id() on X11 perform this piece of messaging
itself. It should be harmless that the message is emitted twice, if
callers do still use that API.

gdk/x11/gdksurface-x11.c

index f32190b3855c7935beee8c9b7823bd560c17cc98..9ae867eb6f6eee88996281eb970b3044f4eae66a 100644 (file)
@@ -2648,6 +2648,7 @@ gdk_x11_surface_set_startup_id (GdkSurface   *surface,
                               const char *startup_id)
 {
   GdkDisplay *display;
+  char *free_this = NULL;
 
   g_return_if_fail (GDK_IS_SURFACE (surface));
 
@@ -2664,6 +2665,23 @@ gdk_x11_surface_set_startup_id (GdkSurface   *surface,
   else
     XDeleteProperty (GDK_DISPLAY_XDISPLAY (display), GDK_SURFACE_XID (surface),
                      gdk_x11_get_xatom_by_name_for_display (display, "_NET_STARTUP_ID"));
+
+  if (startup_id == NULL)
+    {
+      GdkX11Display *display_x11 = GDK_X11_DISPLAY (display);
+
+      startup_id = free_this = display_x11->startup_notification_id;
+      display_x11->startup_notification_id = NULL;
+
+      if (startup_id == NULL)
+        return;
+    }
+
+  gdk_x11_display_broadcast_startup_message (display, "remove",
+                                             "ID", startup_id,
+                                             NULL);
+
+  g_free (free_this);
 }
 
 static void