Follow the OS appearance when set to System without a new window (#540)

This commit is contained in:
Gregory Schier
2026-08-14 13:14:01 -07:00
committed by GitHub
parent 68671377fd
commit cb43f0b9b9
7 changed files with 88 additions and 82 deletions
+10 -15
View File
@@ -160,19 +160,14 @@ fn setup_window_menu<R: Runtime>(win: &WebviewWindow<R>) -> Result<()> {
}
fn initial_appearance_script<R: Runtime>(app_handle: &AppHandle<R>) -> Option<String> {
use yaak_system_appearance::{Appearance, InitialAppearanceSource};
let settings = app_handle.db().get_settings();
let (appearance, source) = match settings.appearance.as_str() {
"dark" => (Appearance::Dark, InitialAppearanceSource::Settings),
"light" => (Appearance::Light, InitialAppearanceSource::Settings),
_ => (
yaak_system_appearance::system_appearance()?,
InitialAppearanceSource::LinuxSystem,
),
};
Some(yaak_system_appearance::initialization_script(appearance, source))
// Only report the appearance the OS prefers. The frontend needs it to resolve the
// "automatic" setting, so the configured appearance is never a substitute for it.
//
// NOTE: The value comes from the watcher state, not a fresh detection, so the frontend
// only ever sees a snapshot when the change events that keep it fresh are also flowing.
let state = app_handle.try_state::<yaak_system_appearance::SystemAppearanceState>()?;
let appearance = state.last_appearance()?;
Some(yaak_system_appearance::initialization_script(appearance))
}
/// Extension trait for easily creating a PluginContext from a WebviewWindow
@@ -1783,7 +1778,7 @@ pub fn run() {
app.state::<yaak_models::query_manager::QueryManager>().inner().clone();
let app_id = app.config().identifier.to_string();
app.manage(yaak_crypto::manager::EncryptionManager::new(query_manager, app_id));
#[cfg(target_os = "linux")]
#[cfg(any(target_os = "linux", target_os = "macos"))]
if let Some(state) = yaak_system_appearance::watch(app.app_handle().clone()) {
app.manage(state);
}
@@ -2002,7 +1997,7 @@ pub fn run() {
});
}
RunEvent::WindowEvent { event: WindowEvent::Focused(true), label, .. } => {
#[cfg(target_os = "linux")]
#[cfg(any(target_os = "linux", target_os = "macos"))]
if let Some(state) =
app_handle.try_state::<yaak_system_appearance::SystemAppearanceState>()
{