From ac362351bf3585e88b5c4193f95a6d0825f4a1b2 Mon Sep 17 00:00:00 2001 From: I Luk Kim Date: Wed, 22 Jul 2026 12:14:09 +0900 Subject: [PATCH] fix: resolve stale closure in fullscreen hotkey and use native API --- package-lock.json | 2 +- package.json | 10 +++++----- src-tauri/capabilities/default.json | 3 ++- src/components/MangaViewer.tsx | 21 ++++++++++++--------- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 107ee95..a69f4e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "tauri-app", "version": "0.1.0", "dependencies": { - "@tauri-apps/api": "^2", + "@tauri-apps/api": "^2.11.1", "@tauri-apps/plugin-opener": "^2", "react": "^19.1.0", "react-dom": "^19.1.0" diff --git a/package.json b/package.json index df53faf..2fa573b 100644 --- a/package.json +++ b/package.json @@ -10,17 +10,17 @@ "tauri": "tauri" }, "dependencies": { + "@tauri-apps/api": "^2.11.1", + "@tauri-apps/plugin-opener": "^2", "react": "^19.1.0", - "react-dom": "^19.1.0", - "@tauri-apps/api": "^2", - "@tauri-apps/plugin-opener": "^2" + "react-dom": "^19.1.0" }, "devDependencies": { + "@tauri-apps/cli": "^2", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "^4.6.0", "typescript": "~5.8.3", - "vite": "^7.0.4", - "@tauri-apps/cli": "^2" + "vite": "^7.0.4" } } diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index 4cdbf49..0738426 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -5,6 +5,7 @@ "windows": ["main"], "permissions": [ "core:default", - "opener:default" + "opener:default", + "core:window:allow-set-fullscreen" ] } diff --git a/src/components/MangaViewer.tsx b/src/components/MangaViewer.tsx index 2d1d374..bf7a33f 100644 --- a/src/components/MangaViewer.tsx +++ b/src/components/MangaViewer.tsx @@ -3,6 +3,7 @@ import type { ViewerSettings } from '../types'; import type { ChapterData } from '../types'; import { MangaPage } from './MangaPage'; import { ViewerToolbar } from './ViewerToolbar'; +import { getCurrentWindow } from '@tauri-apps/api/window'; import { SettingsPanel } from './SettingsPanel'; interface MangaViewerProps { @@ -171,7 +172,7 @@ export function MangaViewer({ }; window.addEventListener('keydown', handler); return () => window.removeEventListener('keydown', handler); - }, [goNext, goPrev, showSettings, settings.direction]); + }, [goNext, goPrev, showSettings, settings.direction, toggleFullscreen]); // Auto-hide toolbar const resetToolbarTimer = useCallback(() => { @@ -189,15 +190,17 @@ export function MangaViewer({ }; }, []); - const toggleFullscreen = () => { - if (!document.fullscreenElement) { - containerRef.current?.requestFullscreen(); - setIsFullscreen(true); - } else { - document.exitFullscreen(); - setIsFullscreen(false); + const toggleFullscreen = useCallback(async () => { + try { + const win = getCurrentWindow(); + const current = await win.isFullscreen(); + const nextState = !current; + await win.setFullscreen(nextState); + setIsFullscreen(nextState); + } catch (e) { + console.error('Failed to toggle fullscreen', e); } - }; + }, []); const bgMap = { black: '#000000',