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(); },