From 6efd1a9dad49b42db778bdc07020dfcf8845e2c8 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 4 Jan 2023 08:36:47 -0500 Subject: [PATCH] Pass an activation token to OpenURI The OpenURI portal can take an activation_token nowadays. So it give one. --- gtk/gopenuriportal.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/gtk/gopenuriportal.c b/gtk/gopenuriportal.c index b90771c51c..834d8655a5 100644 --- a/gtk/gopenuriportal.c +++ b/gtk/gopenuriportal.c @@ -261,6 +261,7 @@ static void open_uri (GFile *file, gboolean open_folder, const char *parent_window, + const char *activation_token, GAsyncReadyCallback callback, gpointer user_data) { @@ -306,6 +307,9 @@ open_uri (GFile *file, g_variant_builder_add (&opt_builder, "{sv}", "handle_token", g_variant_new_string (token)); g_free (token); + if (activation_token) + g_variant_builder_add (&opt_builder, "{sv}", "activation_token", g_variant_new_string (activation_token)); + opts = g_variant_builder_end (&opt_builder); if (g_file_is_native (file)) @@ -408,8 +412,28 @@ window_handle_exported (GtkWindow *window, gpointer user_data) { OpenUriData *data = user_data; + GdkDisplay *display; + GAppLaunchContext *context; + char *activation_token = NULL; - open_uri (data->file, data->open_folder, handle, open_uri_done, data); + if (window) + display = gtk_widget_get_display (GTK_WIDGET (window)); + else + display = gdk_display_get_default (); + + /* FIXME + * Call the vfunc directly since g_app_launch_context_get_startup_notify_id + * has NULL checks. + * + * We should have a more direct way to do this. + */ + context = G_APP_LAUNCH_CONTEXT (gdk_display_get_app_launch_context (display)); + activation_token = G_APP_LAUNCH_CONTEXT_GET_CLASS (context)->get_startup_notify_id (context, NULL, NULL); + g_object_unref (context); + + open_uri (data->file, data->open_folder, handle, activation_token, open_uri_done, data); + + g_free (activation_token); } void