记录桌面壳生命周期状态读取失败

桌面生命周期窗口状态读取失败时记录具体字段并使用保守默认值

桌面壳配置检查拒绝窗口状态读取静默兜底

共享决策日志补充生命周期读取失败边界
This commit is contained in:
2026-06-20 09:50:51 +08:00
parent 88d278122e
commit 328bf920bd
3 changed files with 52 additions and 6 deletions
@@ -74,10 +74,30 @@ pub(crate) fn emit_desktop_lifecycle_payload(
emit_desktop_lifecycle_event(window, payload.state, payload.focused, payload.native_state)
}
fn resolve_desktop_lifecycle_window_flag(
label: &'static str,
result: tauri::Result<bool>,
default_value: bool,
) -> bool {
match result {
Ok(value) => value,
Err(error) => {
eprintln!("desktop host event failed for app.lifecycle.{label}: {error}");
default_value
}
}
}
pub(crate) fn emit_current_desktop_lifecycle_event(window: &WebviewWindow) -> tauri::Result<()> {
let visible = window.is_visible().unwrap_or(true);
let minimized = window.is_minimized().unwrap_or(false);
let focused = window.is_focused().unwrap_or(visible && !minimized);
let visible =
resolve_desktop_lifecycle_window_flag("visible", window.is_visible(), true);
let minimized =
resolve_desktop_lifecycle_window_flag("minimized", window.is_minimized(), false);
let focused = resolve_desktop_lifecycle_window_flag(
"focused",
window.is_focused(),
visible && !minimized,
);
emit_desktop_lifecycle_payload(
window,
resolve_desktop_lifecycle_payload(focused, visible, minimized),
@@ -151,6 +171,20 @@ mod tests {
));
}
#[test]
fn desktop_lifecycle_window_flag_logs_failure_and_uses_default() {
assert!(resolve_desktop_lifecycle_window_flag(
"visible",
Ok(true),
false
));
assert!(!resolve_desktop_lifecycle_window_flag(
"focused",
Err(tauri::Error::WindowNotFound),
false
));
}
#[test]
fn desktop_lifecycle_payload_maps_hidden_and_minimized_to_background() {
assert_eq!(