fix(titlebar): detect fullscreen via onResized+isFullscreen instead of manual state

Manually tracking setIsWindowFullscreen was unreliable (e.g. WM-triggered
fullscreen bypasses the keybinding handler). Now listens to window resize
events and queries actual fullscreen state after each resize.

Tested on CachyOS + KDE Plasma and Fedora + GNOME.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-04-07 22:07:52 +02:00
parent 5ed1b58d67
commit 47cea7e3d6
+11 -4
View File
@@ -76,6 +76,16 @@ function AppShell() {
const { t } = useTranslation(); const { t } = useTranslation();
const isMobile = useIsMobile(); const isMobile = useIsMobile();
const [isWindowFullscreen, setIsWindowFullscreen] = useState(false); const [isWindowFullscreen, setIsWindowFullscreen] = useState(false);
useEffect(() => {
if (!IS_LINUX) return;
const win = getCurrentWindow();
let unlisten: (() => void) | undefined;
win.onResized(() => {
win.isFullscreen().then(setIsWindowFullscreen).catch(() => {});
}).then(u => { unlisten = u; });
return () => { unlisten?.(); };
}, []);
const isFullscreenOpen = usePlayerStore(s => s.isFullscreenOpen); const isFullscreenOpen = usePlayerStore(s => s.isFullscreenOpen);
const toggleFullscreen = usePlayerStore(s => s.toggleFullscreen); const toggleFullscreen = usePlayerStore(s => s.toggleFullscreen);
const isQueueVisible = usePlayerStore(s => s.isQueueVisible); const isQueueVisible = usePlayerStore(s => s.isQueueVisible);
@@ -407,10 +417,7 @@ function TauriEventBridge() {
case 'fullscreen-player': toggleFullscreen(); break; case 'fullscreen-player': toggleFullscreen(); break;
case 'native-fullscreen': { case 'native-fullscreen': {
const win = getCurrentWindow(); const win = getCurrentWindow();
win.isFullscreen().then(fs => { win.isFullscreen().then(fs => win.setFullscreen(!fs));
win.setFullscreen(!fs);
setIsWindowFullscreen(!fs);
});
break; break;
} }
} }