* fix(startup): autostart catch 块缺 return 导致复活主窗口 (#468) PR #474 引入的"前端兜底"useEffect 在 webview ready 后读 prefs.startMinimized,true 则跳过 currentWindow.show()。但 catch 块只 console.warn 没有 return,控制流继续走到 show()——等于"prefs 读失败 = 强 show"。 autostart 早期 IPC 抖动时 getSettings() 偶发失败,旧逻辑让用户明明开了 静默启动仍把主窗口弹出来。 修复: catch 块加 return,安全侧默认 = 当作 startMinimized=true 保持隐藏。 宁可让用户从 tray 手动唤起,也不要在 autostart 抖动时强 show 一个白色 / 透明主窗口。 LSUIElement 不在本 PR 范围: 那是全局 macOS UX 决策,会影响 Finder 双击 / Spotlight / Launchpad 启动场景,应单独 PR + 单独评审。 正确做法是 Rust 端动态切 activationPolicy 而非 plist 静态写死。 Refs #468 * docs(startup): clarify catch rationale + improve warn diagnostics Both local review and PR-Agent bot flagged the "fallback when settings read fails" semantic reversal. Re-analysis confirms the change is correct, but the rationale needs to be explicit in the code: - Rust `get_settings` signature is `pub fn -> UserPreferences` (not Result), so this catch is unreachable from a normal first-launch scenario (returns defaults). Only Tauri IPC infrastructure failures (e.g. __TAURI_INTERNALS__ not ready during autostart early-mount) reach this branch. - Tray is registered by Rust setup() before webview ready, so it remains the universal fallback entry point — no "user locked out" risk. - Improved console.warn to include err.message for diagnostics, since raw err objects serialize as [object Object] in Tauri devtools. No behavior change; comment + log improvement only. Refs review of #488 --------- Co-authored-by: baiqing <lbx12309@icloud.com>
This commit is contained in:
1 parent
6e55e3059b
commit
a1d9549db2
1 file changed
+13
-3
@@ -53,9 +53,19 @@ export function App({ isCapsule, isQa }: AppProps) {
|
||||
const prefs = await getSettings();
|
||||
if (prefs.startMinimized) return;
|
||||
} catch (err) {
|
||||
// 读 prefs 失败兜底走原有 show 行为:让权限探测失败的用户也能进 UI,
|
||||
// 避免透明 / 空白窗口前卡死(issue #163 引入这个 show 的原始意图)。
|
||||
console.warn('[startup] read startMinimized failed, falling back to show', err);
|
||||
// 安全侧默认 = 不弹窗。Rust 端 get_settings 签名是
|
||||
// `pub fn get_settings(...) -> UserPreferences`(非 Result),所以
|
||||
// 该 catch 唯一会被触发的场景是 Tauri IPC 基础设施抖动(autostart 早期
|
||||
// __TAURI_INTERNALS__ 还没就绪)。旧逻辑 fall-through to show 会在用户
|
||||
// 开了静默启动时仍把主窗口弹出来 —— #468 复现路径。
|
||||
//
|
||||
// 此时 tray 已由 Rust 端 setup() 在 webview 加载前注册完成,是稳定的
|
||||
// 兜底入口;宁可让用户从 tray 手动唤起,也不要在抖动时强 show 一个白色
|
||||
// / 透明主窗口。首次安装的"prefs 不存在"场景不走这里 —— Rust 端会返回
|
||||
// 默认 UserPreferences。
|
||||
const detail = err instanceof Error ? err.message : String(err);
|
||||
console.warn('[startup] read startMinimized failed; staying hidden to avoid #468:', detail, err);
|
||||
return;
|
||||
}
|
||||
const { getCurrentWindow } = await import('@tauri-apps/api/window');
|
||||
if (cancelled) return;
|
||||
|
||||
Reference in new issue
Block a user