From 8fa7d324d10a4a697e98be0748849fe01c02f3b9 Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Fri, 25 Apr 2025 09:31:36 -0700 Subject: [PATCH] fix: set `XDG_CURRENT_DESKTOP` env var back to original value before invoking xdg utils (#45310) * Fix XDG_CURRENT_DESKTOP before invoking XDGUtil * apply suggestion * use existing XDG_CURRENT_DESKTOP const --- shell/common/platform_util_linux.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/shell/common/platform_util_linux.cc b/shell/common/platform_util_linux.cc index 125b4d037a47..9dd491945548 100644 --- a/shell/common/platform_util_linux.cc +++ b/shell/common/platform_util_linux.cc @@ -15,6 +15,7 @@ #include "base/cancelable_callback.h" #include "base/containers/contains.h" +#include "base/containers/map_util.h" #include "base/environment.h" #include "base/files/file_util.h" #include "base/files/scoped_file.h" @@ -58,6 +59,8 @@ const char kFreedesktopPortalName[] = "org.freedesktop.portal.Desktop"; const char kFreedesktopPortalPath[] = "/org/freedesktop/portal/desktop"; const char kFreedesktopPortalOpenURI[] = "org.freedesktop.portal.OpenURI"; +const char kOriginalXdgCurrentDesktopEnvVar[] = "ORIGINAL_XDG_CURRENT_DESKTOP"; + const char kMethodOpenDirectory[] = "OpenDirectory"; class ShowItemHelper { @@ -282,6 +285,12 @@ bool XDGUtil(const std::vector& argv, base::nix::CreateLaunchOptionsWithXdgActivation(base::BindOnce( [](base::RepeatingClosure quit_loop, base::LaunchOptions* options_out, base::LaunchOptions options) { + // Correct the XDG_CURRENT_DESKTOP environment variable before calling + // XDG, in case it was changed for compatibility. + if (const auto* orig = base::FindOrNull( + options.environment, kOriginalXdgCurrentDesktopEnvVar)) + options.environment.emplace(base::nix::kXdgCurrentDesktopEnvVar, + *orig); *options_out = std::move(options); std::move(quit_loop).Run(); },