更新饥荒
This commit is contained in:
@@ -70,6 +70,46 @@ updater.init({
|
||||
setQuitting: (v) => { isQuitting = v },
|
||||
})
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// 屏幕模式:window 普通窗口 / windowFull 窗口全屏(最大化铺满工作区+隐藏菜单栏)/
|
||||
// full 真全屏(覆盖任务栏)。渲染进程经 preload 的 setScreenMode 切换;
|
||||
// 菜单「视图 → 全屏」(F11) 与 Esc 退全屏通过 enter/leave-full-screen 事件回同步。
|
||||
// 模式持久化到 config.json,下次启动恢复。
|
||||
// ---------------------------------------------------------------------
|
||||
let screenMode = 'window'
|
||||
let prevWindowed = 'window' // 从真全屏退出时回到的窗口模式
|
||||
|
||||
function applyWindowedMode(win, mode) {
|
||||
if (!win || win.isDestroyed()) return
|
||||
if (mode === 'windowFull') {
|
||||
if (!win.isMaximized()) win.maximize()
|
||||
win.setAutoHideMenuBar(true)
|
||||
win.setMenuBarVisibility(false)
|
||||
} else {
|
||||
if (win.isMaximized()) win.unmaximize()
|
||||
win.setAutoHideMenuBar(false)
|
||||
win.setMenuBarVisibility(true)
|
||||
}
|
||||
}
|
||||
|
||||
function setScreenModeInMain(mode) {
|
||||
if (!mainWin || mainWin.isDestroyed()) return { mode: screenMode }
|
||||
if (mode === 'full') {
|
||||
if (!mainWin.isFullScreen()) mainWin.setFullScreen(true)
|
||||
screenMode = 'full'
|
||||
} else {
|
||||
if (mainWin.isFullScreen()) mainWin.setFullScreen(false)
|
||||
prevWindowed = mode === 'windowFull' ? 'windowFull' : 'window'
|
||||
screenMode = prevWindowed
|
||||
applyWindowedMode(mainWin, prevWindowed)
|
||||
}
|
||||
writeCfg({ screenMode })
|
||||
mainWin.webContents.send('nlg:screen-mode-changed', screenMode)
|
||||
return { mode: screenMode }
|
||||
}
|
||||
|
||||
ipcMain.handle('nlg:set-screen-mode', (_e, mode) => setScreenModeInMain(mode === 'full' ? 'full' : mode === 'windowFull' ? 'windowFull' : 'window'))
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// 服务器设置窗口(极简内嵌页面,深色风格与主站一致)
|
||||
// ---------------------------------------------------------------------
|
||||
@@ -214,7 +254,7 @@ function buildMenu() {
|
||||
{ label: '缩小', role: 'zoomOut' },
|
||||
{ label: '实际大小', role: 'resetZoom' },
|
||||
{ type: 'separator' },
|
||||
{ label: '全屏', role: 'togglefullscreen' },
|
||||
{ label: '全屏', role: 'togglefullscreen', accelerator: 'F11' },
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -264,15 +304,35 @@ function createWindow() {
|
||||
},
|
||||
})
|
||||
mainWin.once('ready-to-show', () => {
|
||||
if (cfg.winMax) mainWin.maximize()
|
||||
// 恢复上次屏幕模式:full=真全屏;windowFull=窗口全屏(最大化+隐藏菜单栏)
|
||||
if (cfg.screenMode === 'full') {
|
||||
screenMode = 'full'
|
||||
mainWin.setFullScreen(true)
|
||||
} else {
|
||||
screenMode = prevWindowed = cfg.screenMode === 'windowFull' ? 'windowFull' : 'window'
|
||||
applyWindowedMode(mainWin, screenMode)
|
||||
if (screenMode === 'window' && cfg.winMax) mainWin.maximize() // 普通窗口保留「最大化启动」记忆
|
||||
}
|
||||
mainWin.show()
|
||||
// 启动后 3 秒静默检查一次更新(已是最新版不弹窗,发现新版本才提示)
|
||||
setTimeout(() => { updater.checkUpdate(true).catch(() => {}) }, 3000)
|
||||
})
|
||||
// 原生全屏状态变化回同步(菜单 F11 / Esc 退出全屏时渲染层才能拿到正确状态)
|
||||
mainWin.on('enter-full-screen', () => {
|
||||
screenMode = 'full'
|
||||
writeCfg({ screenMode })
|
||||
if (!mainWin.isDestroyed()) mainWin.webContents.send('nlg:screen-mode-changed', screenMode)
|
||||
})
|
||||
mainWin.on('leave-full-screen', () => {
|
||||
screenMode = prevWindowed
|
||||
applyWindowedMode(mainWin, prevWindowed)
|
||||
writeCfg({ screenMode })
|
||||
if (!mainWin.isDestroyed()) mainWin.webContents.send('nlg:screen-mode-changed', screenMode)
|
||||
})
|
||||
// 点关闭:记住窗口状态并隐藏到托盘(冒烟模式 / 真正退出时直接关)
|
||||
mainWin.on('close', (e) => {
|
||||
try {
|
||||
writeCfg({ winBounds: mainWin.getNormalBounds(), winMax: mainWin.isMaximized() })
|
||||
writeCfg({ winBounds: mainWin.getNormalBounds(), winMax: mainWin.isMaximized(), screenMode })
|
||||
} catch {}
|
||||
if (!isQuitting && !SMOKE && tray) {
|
||||
e.preventDefault()
|
||||
|
||||
Reference in New Issue
Block a user