mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-17 21:15:32 +09:00
fix(desktop): leave full screen before hiding on macOS close (#3284)
This commit is contained in:
1 parent
46a356cc40
commit
e7859fefb1
3 files changed
+158
-2
No files matched your search
@@ -0,0 +1,37 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
export interface FullScreenHideableWindow {
|
||||
isDestroyed(): boolean;
|
||||
isFullScreen(): boolean;
|
||||
setFullScreen(flag: boolean): void;
|
||||
hide(): void;
|
||||
once(event: 'leave-full-screen', listener: () => void): unknown;
|
||||
removeListener(event: 'leave-full-screen', listener: () => void): unknown;
|
||||
}
|
||||
|
||||
const pendingHides = new WeakMap<FullScreenHideableWindow, () => void>();
|
||||
|
||||
export function hideWindowLeavingFullScreen(
|
||||
window: FullScreenHideableWindow,
|
||||
platform: NodeJS.Platform = process.platform,
|
||||
): void {
|
||||
if (platform !== 'darwin' || !window.isFullScreen()) {
|
||||
window.hide();
|
||||
return;
|
||||
}
|
||||
if (pendingHides.has(window)) return;
|
||||
const hide = () => {
|
||||
pendingHides.delete(window);
|
||||
if (!window.isDestroyed()) window.hide();
|
||||
};
|
||||
pendingHides.set(window, hide);
|
||||
window.once('leave-full-screen', hide);
|
||||
window.setFullScreen(false);
|
||||
}
|
||||
|
||||
export function cancelPendingFullScreenHide(window: FullScreenHideableWindow): void {
|
||||
const hide = pendingHides.get(window);
|
||||
if (!hide) return;
|
||||
pendingHides.delete(window);
|
||||
window.removeListener('leave-full-screen', hide);
|
||||
}
|
||||
Reference in new issue
Block a user