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
This commit is contained in:
Evan Simkowitz 2025-04-25 09:31:36 -07:00 committed by GitHub
parent 7fa297a849
commit 8fa7d324d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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<std::string>& 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();
},