diff --git a/apps/desktop/src/main/index.ts b/apps/desktop/src/main/index.ts index 1918506..cc39066 100644 --- a/apps/desktop/src/main/index.ts +++ b/apps/desktop/src/main/index.ts @@ -31,6 +31,8 @@ function createWindow() { // 窗口控制(FR-W2) ipcMain.on(IPC.winMinimize, () => win?.minimize()); ipcMain.on(IPC.winMaximize, () => { if (win?.isMaximized()) win.unmaximize(); else win?.maximize(); }); + // FR-W2:返回窗口最大化状态供 TitleBar 切换图标 + ipcMain.handle(IPC.winIsMaximized, () => win?.isMaximized() ?? false); ipcMain.on(IPC.winClose, () => win?.close()); if (process.env.ELECTRON_RENDERER_URL) win.loadURL(process.env.ELECTRON_RENDERER_URL); else win.loadFile(nodePath.join(__dirname, '../renderer/index.html')); diff --git a/apps/desktop/src/renderer/App.tsx b/apps/desktop/src/renderer/App.tsx index e04be68..ca6309b 100644 --- a/apps/desktop/src/renderer/App.tsx +++ b/apps/desktop/src/renderer/App.tsx @@ -37,7 +37,10 @@ export function App() { const layout = useLayout(); useEffect(() => { loadVault(); loadTree(); restore(); appearance.load(); useKeymap.getState().load(); useSettings.getState().loadGpu(); }, []); - useEffect(() => { if (activeId && tabs.length > 0) { const t = tabs.find(x => x.id === activeId); if (t) openDoc(t.path).catch(() => {}); } }, []); + useEffect(() => { if (activeId && tabs.length > 0) { const t = tabs.find(x => x.id === activeId); if (t) openDoc(t.path).then(() => { + // FR-T5:恢复标签页保存的滚动位置 + if (t.scrollTop > 0) { setTimeout(() => { const ed = document.querySelector('.ProseMirror'); const c = ed?.closest('[class*="editor"]') as HTMLElement | null; if (c) c.scrollTop = t.scrollTop; }, 100); } + }).catch(() => {}); } }, [activeId]); // FR-S4:关窗前冲刷未保存内容 useEffect(() => { const onBeforeUnload = () => { try { useStore.getState().saveNow(); } catch {} }; @@ -52,9 +55,9 @@ export function App() {