diff --git a/src/main/services/WindowService.ts b/src/main/services/WindowService.ts index bac15cca07..aff511d748 100644 --- a/src/main/services/WindowService.ts +++ b/src/main/services/WindowService.ts @@ -198,10 +198,21 @@ export class WindowService { // 当按下Escape键且窗口处于全屏状态时退出全屏 if (input.key === 'Escape' && !input.alt && !input.control && !input.meta && !input.shift) { if (mainWindow.isFullScreen()) { - event.preventDefault() - mainWindow.setFullScreen(false) + // 获取 shortcuts 配置 + const shortcuts = configManager.getShortcuts() + const exitFullscreenShortcut = shortcuts.find((s) => s.key === 'exit_fullscreen') + if (exitFullscreenShortcut == undefined) { + mainWindow.setFullScreen(false) + return + } + if (exitFullscreenShortcut?.enabled) { + event.preventDefault() + mainWindow.setFullScreen(false) + return + } } } + return }) } @@ -306,7 +317,7 @@ export class WindowService { /** * 上述逻辑以下: - * win/linux: 是“开启托盘+设置关闭时最小化到托盘”的情况 + * win/linux: 是"开启托盘+设置关闭时最小化到托盘"的情况 * mac: 任何情况都会到这里,因此需要单独处理mac */ diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index f2cd67fe8e..4b3d496a95 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -1530,6 +1530,7 @@ "clear_shortcut": "Clear Shortcut", "clear_topic": "Clear Messages", "copy_last_message": "Copy Last Message", + "exit_fullscreen": "Exit Fullscreen", "key": "Key", "mini_window": "Quick Assistant", "new_topic": "New Topic", diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 641c8116e3..e8c2108ba7 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -1526,6 +1526,7 @@ "clear_shortcut": "ショートカットをクリア", "clear_topic": "メッセージを消去", "copy_last_message": "最後のメッセージをコピー", + "exit_fullscreen": "フルスクリーンを終了", "key": "キー", "mini_window": "クイックアシスタント", "new_topic": "新しいトピック", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index 8b52c52722..433c2047b5 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -1526,6 +1526,7 @@ "clear_shortcut": "Очистить сочетание клавиш", "clear_topic": "Очистить все сообщения", "copy_last_message": "Копировать последнее сообщение", + "exit_fullscreen": "Выйти из полноэкранного режима", "key": "Клавиша", "mini_window": "Быстрый помощник", "new_topic": "Новый топик", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 52f3f5930f..9fc89be591 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -1530,6 +1530,7 @@ "clear_shortcut": "清除快捷键", "clear_topic": "清空消息", "copy_last_message": "复制上一条消息", + "exit_fullscreen": "退出全屏", "key": "按键", "mini_window": "快捷助手", "new_topic": "新建话题", diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index 4e60ee922b..9ed708248b 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -1316,6 +1316,22 @@ const migrateConfig = { } catch (error) { return state } + }, + '101': (state: RootState) => { + try { + if (state.shortcuts) { + state.shortcuts.shortcuts.push({ + key: 'exit_fullscreen', + shortcut: ['Escape'], + editable: false, + enabled: true, + system: true + }) + } + return state + } catch (error) { + return state + } } } diff --git a/src/renderer/src/store/shortcuts.ts b/src/renderer/src/store/shortcuts.ts index 03f7eaee3c..cafe278856 100644 --- a/src/renderer/src/store/shortcuts.ts +++ b/src/renderer/src/store/shortcuts.ts @@ -79,6 +79,13 @@ const initialState: ShortcutsState = { editable: true, enabled: true, system: false + }, + { + key: 'exit_fullscreen', + shortcut: ['Escape'], + editable: false, + enabled: true, + system: true } ] }