diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index fe9c72fd91..776ab34ac4 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -2113,6 +2113,28 @@ gtk_label_unroot (GtkWidget *widget) GTK_WIDGET_CLASS (gtk_label_parent_class)->unroot (widget); } +static void +launch_done (GObject *source, + GAsyncResult *result, + gpointer data) +{ + GError *error = NULL; + gboolean success; + + if (GTK_IS_FILE_LAUNCHER (source)) + success = gtk_file_launcher_launch_finish (GTK_FILE_LAUNCHER (source), result, &error); + else if (GTK_IS_URI_LAUNCHER (source)) + success = gtk_uri_launcher_launch_finish (GTK_URI_LAUNCHER (source), result, &error); + else + g_assert_not_reached (); + + if (!success) + { + g_warning ("Failed to launch handler: %s", error->message); + g_error_free (error); + } +} + static gboolean gtk_label_activate_link (GtkLabel *self, const char *uri) @@ -2132,7 +2154,7 @@ gtk_label_activate_link (GtkLabel *self, file = g_file_new_for_uri (uri); launcher = gtk_file_launcher_new (file); - gtk_file_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, NULL, NULL); + gtk_file_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, launch_done, NULL); g_object_unref (launcher); g_object_unref (file); } @@ -2141,7 +2163,7 @@ gtk_label_activate_link (GtkLabel *self, GtkUriLauncher *launcher; launcher = gtk_uri_launcher_new (uri); - gtk_uri_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, NULL, NULL); + gtk_uri_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, launch_done, NULL); g_object_unref (launcher); } diff --git a/gtk/gtklinkbutton.c b/gtk/gtklinkbutton.c index 5c87e4b24b..55aa39021e 100644 --- a/gtk/gtklinkbutton.c +++ b/gtk/gtklinkbutton.c @@ -480,6 +480,28 @@ gtk_link_button_pressed_cb (GtkGestureClick *gesture, } } +static void +launch_done (GObject *source, + GAsyncResult *result, + gpointer data) +{ + GError *error = NULL; + gboolean success; + + if (GTK_IS_FILE_LAUNCHER (source)) + success = gtk_file_launcher_launch_finish (GTK_FILE_LAUNCHER (source), result, &error); + else if (GTK_IS_URI_LAUNCHER (source)) + success = gtk_uri_launcher_launch_finish (GTK_URI_LAUNCHER (source), result, &error); + else + g_assert_not_reached (); + + if (!success) + { + g_warning ("Failed to launch handler: %s", error->message); + g_error_free (error); + } +} + static gboolean gtk_link_button_activate_link (GtkLinkButton *link_button) { @@ -496,7 +518,7 @@ gtk_link_button_activate_link (GtkLinkButton *link_button) launcher = gtk_file_launcher_new (file); - gtk_file_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, NULL, NULL); + gtk_file_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, launch_done, NULL); g_object_unref (launcher); g_object_unref (file); @@ -505,7 +527,7 @@ gtk_link_button_activate_link (GtkLinkButton *link_button) { GtkUriLauncher *launcher = gtk_uri_launcher_new (link_button->uri); - gtk_uri_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, NULL, NULL); + gtk_uri_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, launch_done, NULL); g_object_unref (launcher); }