From 93a11ddedf697c9b673dd59628cee3db48ac67d0 Mon Sep 17 00:00:00 2001 From: Israel Araújo de Oliveira Date: Mon, 9 Feb 2026 06:00:35 -0300 Subject: feat(desktop): add native Wayland toggle on Linux (#11971) Co-authored-by: Brendan Allan --- packages/desktop/src-tauri/src/linux_display.rs | 47 +++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 packages/desktop/src-tauri/src/linux_display.rs (limited to 'packages/desktop/src-tauri/src/linux_display.rs') diff --git a/packages/desktop/src-tauri/src/linux_display.rs b/packages/desktop/src-tauri/src/linux_display.rs new file mode 100644 index 000000000..9e1cf9091 --- /dev/null +++ b/packages/desktop/src-tauri/src/linux_display.rs @@ -0,0 +1,47 @@ +use serde::{Deserialize, Serialize}; +use serde_json::json; +use std::path::PathBuf; +use tauri::AppHandle; +use tauri_plugin_store::StoreExt; + +use crate::constants::SETTINGS_STORE; + +pub const LINUX_DISPLAY_CONFIG_KEY: &str = "linuxDisplayConfig"; + +#[derive(Default, Serialize, Deserialize)] +struct DisplayConfig { + wayland: Option, +} + +fn dir() -> Option { + Some(dirs::data_dir()?.join("ai.opencode.desktop")) +} + +fn path() -> Option { + dir().map(|dir| dir.join(SETTINGS_STORE)) +} + +pub fn read_wayland() -> Option { + let path = path()?; + let raw = std::fs::read_to_string(path).ok()?; + let config = serde_json::from_str::(&raw).ok()?; + config.wayland +} + +pub fn write_wayland(app: &AppHandle, value: bool) -> Result<(), String> { + let store = app + .store(SETTINGS_STORE) + .map_err(|e| format!("Failed to open settings store: {}", e))?; + + store.set( + LINUX_DISPLAY_CONFIG_KEY, + json!(DisplayConfig { + wayland: Some(value), + }), + ); + store + .save() + .map_err(|e| format!("Failed to save settings store: {}", e))?; + + Ok(()) +} -- cgit v1.2.3