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

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

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

共享决策日志补充生命周期读取失败边界
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
+8 -3
View File
@@ -2253,7 +2253,9 @@ const requiredRustHostSnippets = [
'WindowEvent::Focused',
'WindowEvent::Resized',
'resolve_desktop_lifecycle_payload',
'resolve_desktop_lifecycle_window_flag',
'emit_current_desktop_lifecycle_event',
'desktop_lifecycle_window_flag_logs_failure_and_uses_default',
'"background"',
'"hidden"',
'"minimized"',
@@ -2273,9 +2275,9 @@ const requiredRustHostSnippets = [
'PageLoadEvent::Finished',
'replay_desktop_webview_state',
'log_desktop_host_event_result',
'window.is_focused()',
'window.is_visible()',
'window.is_minimized()',
'resolve_desktop_lifecycle_window_flag("visible",',
'resolve_desktop_lifecycle_window_flag("minimized",',
'resolve_desktop_lifecycle_window_flag(\n "focused",',
'resolve_desktop_network_status',
'network.statusChanged',
'register_desktop_navigation_events',
@@ -2786,6 +2788,9 @@ for (const blockedLifecycleSnippet of [
'let _ = emit_current_desktop_lifecycle_event(window)',
'let _ = emit_current_desktop_lifecycle_event(&lifecycle_window)',
'let _ = emit_desktop_image_drop_event(&drop_window',
'window.is_visible().unwrap_or(',
'window.is_minimized().unwrap_or(',
'window.is_focused().unwrap_or(',
'let _ = app.deep_link().register_all()',
'let _ = window.navigate(target_url)',
'let _ = show_main_window(window.app_handle())',
@@ -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!(