Browse Source

fix: add support for ELECTRON_OZONE_PLATFORM_HINT env var (#39792)

Co-authored-by: John Kleinschmidt <[email protected]>
Valentin Hăloiu 1 year ago
parent
commit
58fd8825d2

+ 10 - 0
docs/api/environment-variables.md

@@ -111,6 +111,16 @@ Options:
 * `kioclient5`
 * `kioclient`
 
+### `ELECTRON_OZONE_PLATFORM_HINT` _Linux_
+
+Selects the preferred platform backend used on Linux. The default one is `x11`. `auto` selects Wayland if possible, X11 otherwise.
+
+Options:
+
+* `auto`
+* `wayland`
+* `x11`
+
 ## Development Variables
 
 The following environment variables are intended primarily for development and

+ 8 - 2
shell/browser/electron_browser_main_parts_linux.cc

@@ -15,6 +15,9 @@
 #include "shell/common/thread_restrictions.h"
 #endif
 
+constexpr base::StringPiece kElectronOzonePlatformHint(
+    "ELECTRON_OZONE_PLATFORM_HINT");
+
 #if BUILDFLAG(OZONE_PLATFORM_WAYLAND)
 
 constexpr char kPlatformWayland[] = "wayland";
@@ -115,17 +118,20 @@ std::string MaybeFixPlatformName(const std::string& ozone_platform_hint) {
 }  // namespace
 
 void ElectronBrowserMainParts::DetectOzonePlatform() {
+  auto const env = base::Environment::Create();
   auto* const command_line = base::CommandLine::ForCurrentProcess();
   if (!command_line->HasSwitch(switches::kOzonePlatform)) {
-    const auto ozone_platform_hint =
+    auto ozone_platform_hint =
         command_line->GetSwitchValueASCII(switches::kOzonePlatformHint);
+    if (ozone_platform_hint.empty()) {
+      env->GetVar(kElectronOzonePlatformHint, &ozone_platform_hint);
+    }
     if (!ozone_platform_hint.empty()) {
       command_line->AppendSwitchASCII(
           switches::kOzonePlatform, MaybeFixPlatformName(ozone_platform_hint));
     }
   }
 
-  auto env = base::Environment::Create();
   std::string desktop_startup_id;
   if (env->GetVar("DESKTOP_STARTUP_ID", &desktop_startup_id))
     command_line->AppendSwitchASCII("desktop-startup-id", desktop_startup_id);