fix: resolve stale closure in fullscreen hotkey and use native API

main
I Luk Kim 3 weeks ago
parent f4b669c26a
commit ac362351bf

2
package-lock.json generated

@ -8,7 +8,7 @@
"name": "tauri-app", "name": "tauri-app",
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"@tauri-apps/api": "^2", "@tauri-apps/api": "^2.11.1",
"@tauri-apps/plugin-opener": "^2", "@tauri-apps/plugin-opener": "^2",
"react": "^19.1.0", "react": "^19.1.0",
"react-dom": "^19.1.0" "react-dom": "^19.1.0"

@ -10,17 +10,17 @@
"tauri": "tauri" "tauri": "tauri"
}, },
"dependencies": { "dependencies": {
"@tauri-apps/api": "^2.11.1",
"@tauri-apps/plugin-opener": "^2",
"react": "^19.1.0", "react": "^19.1.0",
"react-dom": "^19.1.0", "react-dom": "^19.1.0"
"@tauri-apps/api": "^2",
"@tauri-apps/plugin-opener": "^2"
}, },
"devDependencies": { "devDependencies": {
"@tauri-apps/cli": "^2",
"@types/react": "^19.1.8", "@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6", "@types/react-dom": "^19.1.6",
"@vitejs/plugin-react": "^4.6.0", "@vitejs/plugin-react": "^4.6.0",
"typescript": "~5.8.3", "typescript": "~5.8.3",
"vite": "^7.0.4", "vite": "^7.0.4"
"@tauri-apps/cli": "^2"
} }
} }

@ -5,6 +5,7 @@
"windows": ["main"], "windows": ["main"],
"permissions": [ "permissions": [
"core:default", "core:default",
"opener:default" "opener:default",
"core:window:allow-set-fullscreen"
] ]
} }

@ -3,6 +3,7 @@ import type { ViewerSettings } from '../types';
import type { ChapterData } from '../types'; import type { ChapterData } from '../types';
import { MangaPage } from './MangaPage'; import { MangaPage } from './MangaPage';
import { ViewerToolbar } from './ViewerToolbar'; import { ViewerToolbar } from './ViewerToolbar';
import { getCurrentWindow } from '@tauri-apps/api/window';
import { SettingsPanel } from './SettingsPanel'; import { SettingsPanel } from './SettingsPanel';
interface MangaViewerProps { interface MangaViewerProps {
@ -171,7 +172,7 @@ export function MangaViewer({
}; };
window.addEventListener('keydown', handler); window.addEventListener('keydown', handler);
return () => window.removeEventListener('keydown', handler); return () => window.removeEventListener('keydown', handler);
}, [goNext, goPrev, showSettings, settings.direction]); }, [goNext, goPrev, showSettings, settings.direction, toggleFullscreen]);
// Auto-hide toolbar // Auto-hide toolbar
const resetToolbarTimer = useCallback(() => { const resetToolbarTimer = useCallback(() => {
@ -189,15 +190,17 @@ export function MangaViewer({
}; };
}, []); }, []);
const toggleFullscreen = () => { const toggleFullscreen = useCallback(async () => {
if (!document.fullscreenElement) { try {
containerRef.current?.requestFullscreen(); const win = getCurrentWindow();
setIsFullscreen(true); const current = await win.isFullscreen();
} else { const nextState = !current;
document.exitFullscreen(); await win.setFullscreen(nextState);
setIsFullscreen(false); setIsFullscreen(nextState);
} catch (e) {
console.error('Failed to toggle fullscreen', e);
} }
}; }, []);
const bgMap = { const bgMap = {
black: '#000000', black: '#000000',

Loading…
Cancel
Save