| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- // Prevents additional console window on Windows in release, DO NOT REMOVE!!
- #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
- // borrowed from https://github.com/skyline69/balatro-mod-manager
- #[cfg(target_os = "linux")]
- fn configure_display_backend() -> Option<String> {
- use std::env;
- let set_env_if_absent = |key: &str, value: &str| {
- if env::var_os(key).is_none() {
- // Safety: called during startup before any threads are spawned, so mutating the
- // process environment is safe.
- unsafe { env::set_var(key, value) };
- }
- };
- let on_wayland = env::var_os("WAYLAND_DISPLAY").is_some()
- || matches!(
- env::var("XDG_SESSION_TYPE"),
- Ok(v) if v.eq_ignore_ascii_case("wayland")
- );
- if !on_wayland {
- return None;
- }
- // Allow users to explicitly keep Wayland if they know their setup is stable.
- let allow_wayland = matches!(
- env::var("OC_ALLOW_WAYLAND"),
- Ok(v) if matches!(v.to_ascii_lowercase().as_str(), "1" | "true" | "yes")
- );
- if allow_wayland {
- return Some("Wayland session detected; respecting OC_ALLOW_WAYLAND=1".into());
- }
- // Prefer XWayland when available to avoid Wayland protocol errors seen during startup.
- if env::var_os("DISPLAY").is_some() {
- set_env_if_absent("WINIT_UNIX_BACKEND", "x11");
- set_env_if_absent("GDK_BACKEND", "x11");
- set_env_if_absent("WEBKIT_DISABLE_DMABUF_RENDERER", "1");
- return Some(
- "Wayland session detected; forcing X11 backend to avoid compositor protocol errors. \
- Set OC_ALLOW_WAYLAND=1 to keep native Wayland."
- .into(),
- );
- }
- set_env_if_absent("WEBKIT_DISABLE_DMABUF_RENDERER", "1");
- Some(
- "Wayland session detected without X11; leaving Wayland enabled (set WINIT_UNIX_BACKEND/GDK_BACKEND manually if needed)."
- .into(),
- )
- }
- fn main() {
- #[cfg(target_os = "linux")]
- {
- if let Some(backend_note) = configure_display_backend() {
- eprintln!("{backend_note:?}");
- }
- }
- opencode_lib::run()
- }
|