diff --git a/src/backend/browser/sandbox.ts b/src/backend/browser/sandbox.ts index d7ec97d6e7..d61c924bfc 100644 --- a/src/backend/browser/sandbox.ts +++ b/src/backend/browser/sandbox.ts @@ -240,6 +240,9 @@ export const api: Sandbox = { maximizeWindow() { throw new Error(`Not supported on Browser version: maximizeWindow`); }, + toggleFullScreenMode() { + throw new Error(`Not supported on Browser version: toggleFullScreenMode`); + }, /* eslint-disable no-console */ // ログの吐き出し先は console ぐらいしかないので、ここでは特例で許可している logError(...params: unknown[]) { console.error(...params); diff --git a/src/backend/electron/main.ts b/src/backend/electron/main.ts index 723259239b..4fddcddead 100644 --- a/src/backend/electron/main.ts +++ b/src/backend/electron/main.ts @@ -754,7 +754,13 @@ registerIpcMainHandle({ win.maximize(); } }, - + TOGGLE_FULLSCREENMODE: () => { + if (win.isFullScreen()) { + win.setFullScreen(false); + } else { + win.setFullScreen(true); + } + }, OPEN_LOG_DIRECTORY: () => { void shell.openPath(app.getPath("logs")); }, diff --git a/src/backend/electron/preload.ts b/src/backend/electron/preload.ts index c94d3d1ea5..e296d33a25 100644 --- a/src/backend/electron/preload.ts +++ b/src/backend/electron/preload.ts @@ -152,6 +152,10 @@ const api: Sandbox = { void ipcRendererInvokeProxy.MAXIMIZE_WINDOW(); }, + toggleFullScreenMode: () => { + void ipcRendererInvokeProxy.TOGGLE_FULLSCREENMODE(); + }, + logError: (...params) => { console.error(...params); // 経緯 https://github.com/VOICEVOX/voicevox/pull/1620#discussion_r1371804569 diff --git a/src/components/Menu/MenuBar/MenuBar.vue b/src/components/Menu/MenuBar/MenuBar.vue index 5bd26b70cf..a31ed398a3 100644 --- a/src/components/Menu/MenuBar/MenuBar.vue +++ b/src/components/Menu/MenuBar/MenuBar.vue @@ -134,6 +134,10 @@ const openHelpDialog = () => { }); }; +const toggleFullScreenMode = async () => { + window.backend.toggleFullScreenMode(); +}; + const createNewProject = async () => { if (!uiLocked.value) { await store.dispatch("CREATE_NEW_PROJECT", {}); @@ -396,7 +400,16 @@ const menudata = computed(() => [ closeAllDialog(); }, disableWhenUiLocked: false, - subMenu: [...props.viewSubMenuData], + subMenu: [ + ...props.viewSubMenuData, + { type: "separator" }, + { + type: "button", + label: "全画面表示/ウィンドウ表示切り替え", + onClick: toggleFullScreenMode, + disableWhenUiLocked: false, + }, + ], }, { type: "root", @@ -527,6 +540,10 @@ function registerHotkeyForAllEditors(action: Omit) { }); } +registerHotkeyForAllEditors({ + callback: toggleFullScreenMode, + name: "全画面表示/ウィンドウ表示切り替え", +}); registerHotkeyForAllEditors({ callback: createNewProject, name: "新規プロジェクト", diff --git a/src/type/ipc.ts b/src/type/ipc.ts index 006aca3532..5feee65b22 100644 --- a/src/type/ipc.ts +++ b/src/type/ipc.ts @@ -179,6 +179,11 @@ export type IpcIHData = { return: void; }; + TOGGLE_FULLSCREENMODE: { + args: []; + return: void; + }; + OPEN_LOG_DIRECTORY: { args: []; return: void; diff --git a/src/type/preload.ts b/src/type/preload.ts index 6a746cfa45..85f9005bb3 100644 --- a/src/type/preload.ts +++ b/src/type/preload.ts @@ -146,6 +146,10 @@ export const defaultHotkeySettings: HotkeySettingType[] = [ action: "新規プロジェクト", combination: HotkeyCombination(!isMac ? "Ctrl N" : "Meta N"), }, + { + action: "全画面表示/ウィンドウ表示切り替え", + combination: HotkeyCombination(!isMac ? "F11" : "Ctrl Meta F"), + }, { action: "プロジェクトを名前を付けて保存", combination: HotkeyCombination(!isMac ? "Ctrl Shift S" : "Shift Meta S"), @@ -273,6 +277,7 @@ export interface Sandbox { closeWindow(): void; minimizeWindow(): void; maximizeWindow(): void; + toggleFullScreenMode(): void; logError(...params: unknown[]): void; logWarn(...params: unknown[]): void; logInfo(...params: unknown[]): void; @@ -466,6 +471,7 @@ export const hotkeyActionNameSchema = z.enum([ "元に戻す", "やり直す", "新規プロジェクト", + "全画面表示/ウィンドウ表示切り替え", "プロジェクトを名前を付けて保存", "プロジェクトを上書き保存", "プロジェクトを読み込む",