fix: set XDG_CURRENT_DESKTOP env var back to original value before invoking xdg utils (#46789)

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

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Evan Simkowitz <esimkowitz@users.noreply.github.com>
This commit is contained in:
trop[bot] 2025-04-25 15:23:04 -05:00 committed by GitHub
parent ffe6656d2f
commit 96db57f36f
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();
},