From 5e0080c5a1dbe9313e3b959591b0e164d0fb9a3c Mon Sep 17 00:00:00 2001 From: George Zhao <38124587+CreatorZZY@users.noreply.github.com> Date: Wed, 14 May 2025 23:35:02 +0800 Subject: [PATCH] feat: add support for allowing Escape key to exit fullscreen mode (#5930) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add support for allowing Escape key to exit fullscreen mode * feat(i18n): add translation for allowing ESC key to exit fullscreen mode in multiple locales * feat: enable Escape key to exit fullscreen mode regardless of platform * feat: 添加允许使用Escape键退出全屏模式的功能,并更新相关国际化支持 * fix: 修复全屏模式下Escape键退出功能的状态管理,移除相关设置项 * feat: 添加全屏状态管理功能至导航栏,更新右侧导航栏组件以支持全屏模式 * feat: 更新导航栏以支持全屏模式,调整右侧导航栏的内边距 * fix: 更新全屏模式下Escape键退出功能的默认设置为启用 * refactor: 移除全屏模式下Escape键退出功能的状态管理逻辑 * fix: 移除全屏模式下Escape键退出功能的调试日志 * feat: 添加全屏模式下Escape键的快捷键配置,默认启用 * refactor: 移除与全屏模式下Escape键退出功能相关的IPC通道和配置 * refactor: 移除全屏模式下Escape键退出功能的配置项 * refactor: 移除Navbar和McpSettingsNavbar中与全屏模式相关的代码 * refactor: 移动exit_fullscreen快捷键配置到shortcuts数组末尾 * refactor: 添加全屏模式下快捷键未设置时直接退出全屏的逻辑 * refactor: 添加全屏模式下快捷键未设置时直接退出全屏的逻辑 * refactor: remove unused useFullscreen hook * refactor: remove 'allow ESC key to exit fullscreen mode' translations from multiple locale files --------- Co-authored-by: George Zhao --- src/main/services/WindowService.ts | 17 ++++++++++++++--- src/renderer/src/i18n/locales/en-us.json | 1 + src/renderer/src/i18n/locales/ja-jp.json | 1 + src/renderer/src/i18n/locales/ru-ru.json | 1 + src/renderer/src/i18n/locales/zh-cn.json | 1 + src/renderer/src/store/migrate.ts | 16 ++++++++++++++++ src/renderer/src/store/shortcuts.ts | 7 +++++++ 7 files changed, 41 insertions(+), 3 deletions(-) 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 } ] }