fix(overlay): keep macOS modal windows on fullscreen Spaces (#200)

This commit is contained in:
sudacode authored and GitHub committed 2026-08-15 21:43:26 -07:00
1 parent 2174e689a2
commit a02c33dac4
22 files changed
+568 -98

No files matched your search

+9 -4
View File
@@ -12,15 +12,17 @@ export function buildOverlayWindowOptions(
options: {
isDev: boolean;
linuxX11FullscreenOverlay?: boolean;
platform?: NodeJS.Platform;
yomitanSession?: Session | null;
},
): BrowserWindowConstructorOptions {
const showNativeDebugFrame = process.platform === 'win32' && options.isDev;
const isLinuxVisibleOverlay = process.platform === 'linux' && kind === 'visible';
const platform = options.platform ?? process.platform;
const showNativeDebugFrame = platform === 'win32' && options.isDev;
const isLinuxVisibleOverlay = platform === 'linux' && kind === 'visible';
const isLinuxFullscreenOverlay =
isLinuxVisibleOverlay && options.linuxX11FullscreenOverlay === true;
const shouldStartAlwaysOnTop =
!(process.platform === 'win32' && kind === 'visible') &&
!(platform === 'win32' && kind === 'visible') &&
(!isLinuxVisibleOverlay || isLinuxFullscreenOverlay);
const shouldAllowCompositorResize = isLinuxVisibleOverlay && !isLinuxFullscreenOverlay;
@@ -41,7 +43,10 @@ export function buildOverlayWindowOptions(
hasShadow: false,
focusable: !isLinuxFullscreenOverlay,
acceptFirstMouse: true,
...(process.platform === 'win32' ? { thickFrame: showNativeDebugFrame } : {}),
// A macOS panel is a fullscreen auxiliary window, so modal surfaces stay on the
// active mpv Space instead of opening on SubMiner's last regular desktop.
...(platform === 'darwin' && kind === 'modal' ? { type: 'panel' as const } : {}),
...(platform === 'win32' ? { thickFrame: showNativeDebugFrame } : {}),
webPreferences: {
preload: path.join(__dirname, '..', '..', 'preload.js'),
contextIsolation: true,