From 1bb48a76a60a588ff9dabcfd1541cae3e2f900c3 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 10 Jul 2025 21:16:46 -0400 Subject: [PATCH] application: Call before/after_emit consistently Call these vfuncs also for cases where the launching instance is the primary one. This is what the docs suggest, and it makes before/after_emit much more useful. Fixes: #3726 --- gio/gapplication.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/gio/gapplication.c b/gio/gapplication.c index cbb69fefa..3c7f5d531 100644 --- a/gio/gapplication.c +++ b/gio/gapplication.c @@ -1094,6 +1094,12 @@ g_application_call_command_line (GApplication *application, GApplicationCommandLine *cmdline; GVariant *v; gint handler_exit_status; + GVariant *platform_data; + + g_variant_ref_sink (options); + platform_data = g_variant_ref_sink (get_platform_data (application, options)); + + G_APPLICATION_GET_CLASS (application)->before_emit (application, platform_data); v = g_variant_new_bytestring_array ((const gchar **) arguments, -1); cmdline = g_object_new (G_TYPE_APPLICATION_COMMAND_LINE, @@ -1107,6 +1113,10 @@ g_application_call_command_line (GApplication *application, *exit_status = g_application_command_line_get_exit_status (cmdline); g_object_unref (cmdline); + + G_APPLICATION_GET_CLASS (application)->after_emit (application, platform_data); + g_variant_unref (platform_data); + g_variant_unref (options); } } @@ -2451,7 +2461,14 @@ g_application_activate (GApplication *application) get_platform_data (application, NULL)); else - g_signal_emit (application, g_application_signals[SIGNAL_ACTIVATE], 0); + { + GVariant *platform_data = g_variant_ref_sink (get_platform_data (application, NULL)); + + G_APPLICATION_GET_CLASS (application)->before_emit (application, platform_data); + g_signal_emit (application, g_application_signals[SIGNAL_ACTIVATE], 0); + G_APPLICATION_GET_CLASS (application)->after_emit (application, platform_data); + g_variant_unref (platform_data); + } } /** @@ -2495,8 +2512,14 @@ g_application_open (GApplication *application, get_platform_data (application, NULL)); else - g_signal_emit (application, g_application_signals[SIGNAL_OPEN], - 0, files, n_files, hint); + { + GVariant *platform_data = g_variant_ref_sink (get_platform_data (application, NULL)); + + G_APPLICATION_GET_CLASS (application)->before_emit (application, platform_data); + g_signal_emit (application, g_application_signals[SIGNAL_OPEN], 0, files, n_files, hint); + G_APPLICATION_GET_CLASS (application)->after_emit (application, platform_data); + g_variant_unref (platform_data); + } } /* Run {{{1 */