tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 7811088c7b6d1a77bc497aea2c78b66528b4cf77
parent 1b2e8fb4797952a48222cc9a39934ddce358d1fd
Author: Martin Stransky <stransky@redhat.com>
Date:   Wed, 22 Oct 2025 09:19:12 +0000

Bug 1973613 [Linux] Add XDG_ACTIVATION token to open file manager via. DBus r=jhorak

Differential Revision: https://phabricator.services.mozilla.com/D268847

Diffstat:
Mtoolkit/system/gnome/nsGIOService.cpp | 22+++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/toolkit/system/gnome/nsGIOService.cpp b/toolkit/system/gnome/nsGIOService.cpp @@ -1007,7 +1007,19 @@ static nsresult RevealFileViaDBusWithProxy(GDBusProxy* aProxy, nsIFile* aFile, MOZ_TRY(aFile->GetNativePath(path)); RefPtr<mozilla::widget::DBusCallPromise> dbusPromise; - const char* startupId = ""; + + char* activationToken = nullptr; + auto releaseActivationToken = MakeScopeExit([&] { g_free(activationToken); }); + + // Try to get activation token from GdkDisplay + if (GdkDisplay* display = gdk_display_get_default()) { + if (GdkAppLaunchContext* context = + gdk_display_get_app_launch_context(display)) { + activationToken = g_app_launch_context_get_startup_notify_id( + G_APP_LAUNCH_CONTEXT(context), nullptr, nullptr); + g_object_unref(context); + } + } const int32_t timeout = StaticPrefs::widget_gtk_file_manager_show_items_timeout_ms(); @@ -1023,8 +1035,8 @@ static nsresult RevealFileViaDBusWithProxy(GDBusProxy* aProxy, nsIFile* aFile, g_variant_builder_init(&builder, G_VARIANT_TYPE_STRING_ARRAY); g_variant_builder_add(&builder, "s", uri.get()); - RefPtr<GVariant> variant = dont_AddRef( - g_variant_ref_sink(g_variant_new("(ass)", &builder, startupId))); + RefPtr<GVariant> variant = dont_AddRef(g_variant_ref_sink(g_variant_new( + "(ass)", &builder, activationToken ? activationToken : ""))); g_variant_builder_clear(&builder); dbusPromise = widget::DBusProxyCall(aProxy, aMethod, variant, @@ -1048,8 +1060,8 @@ static nsresult RevealFileViaDBusWithProxy(GDBusProxy* aProxy, nsIFile* aFile, RefPtr<GUnixFDList> fd_list = dont_AddRef(g_unix_fd_list_new_from_array(&fd, 1)); - RefPtr<GVariant> variant = dont_AddRef( - g_variant_ref_sink(g_variant_new("(sha{sv})", startupId, 0, &options))); + RefPtr<GVariant> variant = dont_AddRef(g_variant_ref_sink(g_variant_new( + "(sha{sv})", activationToken ? activationToken : "", 0, &options))); g_variant_builder_clear(&options); dbusPromise = widget::DBusProxyCallWithUnixFDList(