diff options
author | Christian Persch <chpe@src.gnome.org> | 2022-12-02 22:05:38 +0100 |
---|---|---|
committer | Christian Persch <chpe@src.gnome.org> | 2022-12-02 22:05:38 +0100 |
commit | 98c0ab76de14b8836e0b5a6196751b4766072be9 (patch) | |
tree | abbc026893d24b5a62251ddd631bf0e63376e91b /src | |
parent | d11869ae9127bea4c81aeb92f2d7c29aa8fd98d9 (diff) | |
download | gnome-terminal-98c0ab76de14b8836e0b5a6196751b4766072be9.tar.gz |
client: Transport XDG_ACTIVATION_TOKEN to the server
Diffstat (limited to 'src')
-rw-r--r-- | src/terminal-client-utils.cc | 7 | ||||
-rw-r--r-- | src/terminal-client-utils.hh | 1 | ||||
-rw-r--r-- | src/terminal-gdbus.cc | 6 | ||||
-rw-r--r-- | src/terminal-options.cc | 38 | ||||
-rw-r--r-- | src/terminal-options.hh | 1 | ||||
-rw-r--r-- | src/terminal.cc | 4 |
6 files changed, 44 insertions, 13 deletions
diff --git a/src/terminal-client-utils.cc b/src/terminal-client-utils.cc index d7c59fe4..9e799611 100644 --- a/src/terminal-client-utils.cc +++ b/src/terminal-client-utils.cc @@ -142,7 +142,8 @@ terminal_client_get_file_uninstalled(char const* exe_install_dir, * terminal_client_append_create_instance_options: * @builder: a #GVariantBuilder of #GVariantType "a{sv}" * @display: (array element-type=guint8): - * @startup_id: (array element-type=guint8): + * @startup_id: + * @activation_token: * @geometry: * @role: * @profile: @@ -156,6 +157,7 @@ void terminal_client_append_create_instance_options (GVariantBuilder *builder, const char *display_name, const char *startup_id, + const char *activation_token, const char *geometry, const char *role, const char *profile, @@ -172,6 +174,9 @@ terminal_client_append_create_instance_options (GVariantBuilder *builder, if (startup_id) g_variant_builder_add (builder, "{sv}", "desktop-startup-id", g_variant_new_bytestring (startup_id)); + if (activation_token) + g_variant_builder_add (builder, "{sv}", + "activation-token", g_variant_new_string (activation_token)); /* String options */ if (profile) diff --git a/src/terminal-client-utils.hh b/src/terminal-client-utils.hh index 33e5c909..faf0c5ed 100644 --- a/src/terminal-client-utils.hh +++ b/src/terminal-client-utils.hh @@ -36,6 +36,7 @@ char* terminal_client_get_file_uninstalled(char const* exe_install_dir, void terminal_client_append_create_instance_options (GVariantBuilder *builder, const char *display_name, const char *startup_id, + const char *activation_token, const char *geometry, const char *role, const char *profile, diff --git a/src/terminal-gdbus.cc b/src/terminal-gdbus.cc index dc77b457..55f33915 100644 --- a/src/terminal-gdbus.cc +++ b/src/terminal-gdbus.cc @@ -439,13 +439,15 @@ terminal_factory_impl_create_instance (TerminalFactory *factory, /* Still no parent window? Create a new one */ if (window == nullptr) { - const char *startup_id, *role; + const char *startup_id, *role, *activation_token; gboolean start_maximized, start_fullscreen; window = terminal_window_new (G_APPLICATION (app)); have_new_window = TRUE; - if (g_variant_lookup (options, "desktop-startup-id", "^&ay", &startup_id)) + if (g_variant_lookup (options, "activation-token", "&s", &activation_token)) + gtk_window_set_startup_id (GTK_WINDOW (window), activation_token); + else if (g_variant_lookup (options, "desktop-startup-id", "^&ay", &startup_id)) gtk_window_set_startup_id (GTK_WINDOW (window), startup_id); /* Overwrite the default, unique window role set in terminal_window_init */ diff --git a/src/terminal-options.cc b/src/terminal-options.cc index 9e672f5d..8f1ced58 100644 --- a/src/terminal-options.cc +++ b/src/terminal-options.cc @@ -999,6 +999,18 @@ digest_options_callback (GOptionContext *context, return TRUE; } +static char* +getenv_utf8(char const* env) +{ + auto const value = g_getenv(env); + if (!value || + !value[0] || + !g_utf8_validate(value, -1, nullptr)) + return nullptr; + + return g_strdup(value); +} + /** * terminal_options_parse: * @argcp: (inout) address of the argument count. Changed if any arguments were handled @@ -1031,12 +1043,8 @@ terminal_options_parse (int *argcp, options->default_maximize = FALSE; options->execute = FALSE; - const char *startup_id = g_getenv ("DESKTOP_STARTUP_ID"); - if (startup_id && startup_id[0] && - g_utf8_validate (startup_id, -1, nullptr)) - options->startup_id = g_strdup (startup_id); - else - options->startup_id = nullptr; + options->startup_id = getenv_utf8("DESKTOP_STARTUP_ID"); + options->startup_id = getenv_utf8("XDG_ACTIVATION_TOKEN"); options->display_name = nullptr; options->initial_windows = nullptr; options->default_role = nullptr; @@ -1113,12 +1121,12 @@ terminal_options_parse (int *argcp, return nullptr; } +#ifdef GDK_WINDOWING_X11 /* Do this here so that gdk_display is initialized */ - if (options->startup_id == nullptr) + if (options->startup_id == nullptr) { options->startup_id = terminal_client_get_fallback_startup_id (); - /* Still nullptr? */ - if (options->startup_id == nullptr) - terminal_printerr_detail ("Warning: DESKTOP_STARTUP_ID not set and no fallback available.\n"); + } +#endif /* X11 */ GdkDisplay *display = gdk_display_get_default (); if (display != nullptr) @@ -1314,6 +1322,7 @@ terminal_options_free (TerminalOptions *options) g_free (options->display_name); g_free (options->startup_id); + g_free (options->activation_token); g_free (options->server_app_id); g_free (options->sm_client_id); @@ -1644,6 +1653,15 @@ get_goption_context (TerminalOptions *options) nullptr, nullptr }, + { + "activation-token", + 0, + G_OPTION_FLAG_HIDDEN, + G_OPTION_ARG_STRING, + &options->activation_token, + nullptr, + nullptr + }, { nullptr, 0, 0, G_OPTION_ARG_NONE, nullptr, nullptr, nullptr } }; diff --git a/src/terminal-options.hh b/src/terminal-options.hh index fe88361f..48edb320 100644 --- a/src/terminal-options.hh +++ b/src/terminal-options.hh @@ -74,6 +74,7 @@ typedef struct char *server_app_id; char *startup_id; + char *activation_token; char *display_name; gboolean show_preferences; GList *initial_windows; diff --git a/src/terminal.cc b/src/terminal.cc index ce6060fd..520b1040 100644 --- a/src/terminal.cc +++ b/src/terminal.cc @@ -354,6 +354,9 @@ handle_show_preferences_remote (TerminalOptions *options, if (options->startup_id) g_variant_builder_add (&builder, "{sv}", "desktop-startup-id", g_variant_new_string (options->startup_id)); + if (options->activation_token) + g_variant_builder_add (&builder, "{sv}", + "activation-token", g_variant_new_string (options->activation_token)); g_variant_builder_close (&builder); if (!g_dbus_connection_call_sync (bus, @@ -454,6 +457,7 @@ handle_options (TerminalOptions *options, terminal_client_append_create_instance_options (&builder, options->display_name, options->startup_id, + options->activation_token, iw->geometry, iw->role, it->profile ? it->profile : options->default_profile, |