mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-21 22:15:40 +00:00
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:
+11
-4
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user