application: Complete startup notification sequence for remote invocations
authorMario Sanchez Prada <mario@endlessm.com>
Mon, 21 May 2018 14:44:02 +0000 (15:44 +0100)
committerMario Sanchez Prada <msanchez@gnome.org>
Mon, 11 Jun 2018 15:28:24 +0000 (16:28 +0100)
When a remote instance of a GTK application implementing the Startup
Notification protocol gets spawned it will pass the startup sequence
ID as "platform data" to the main instance. Thus, we need to make sure
that the startup sequence gets completed in that case, since the remote
instance won't do it by itself, since it won't map any top level window.

Checking for this "platform data" in the implementation of the after_emit()
virtual method in the primary instance should be a good place to do so, since
the existence of such data proves that a remote instance has been spawned.

https://gitlab.gnome.org/GNOME/gtk/issues/1084

gtk/gtkapplication.c

index dd2aeb038cbe4453b07347ab0624cccd506dc518..ef5b23f77733f4140baa5add2b3ee32320cfef51 100644 (file)
@@ -363,6 +363,17 @@ static void
 gtk_application_after_emit (GApplication *application,
                             GVariant     *platform_data)
 {
+  const char *startup_notification_id = NULL;
+
+  g_variant_lookup (platform_data, "desktop-startup-id", "&s", &startup_notification_id);
+  if (startup_notification_id)
+    {
+      GdkDisplay *display;
+
+      display = gdk_display_get_default ();
+      if (display)
+        gdk_display_notify_startup_complete (display, startup_notification_id);
+    }
 }
 
 static void