diff --git a/shell/common/platform_util_linux.cc b/shell/common/platform_util_linux.cc index 6bd80cc15b1e..42f17bc90a62 100644 --- a/shell/common/platform_util_linux.cc +++ b/shell/common/platform_util_linux.cc @@ -13,6 +13,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" @@ -55,6 +56,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 { @@ -279,6 +282,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(); },