65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
import electron from 'electron';
|
|
import type { BrowserWindow as BrowserWindowType } from 'electron';
|
|
const { BrowserWindow, app } = electron;
|
|
import { join } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
let inboxWindow: BrowserWindowType | null = null;
|
|
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
|
|
|
export function getInboxWindow(): BrowserWindowType | null {
|
|
return inboxWindow;
|
|
}
|
|
|
|
export function createInboxWindow(opts: { visible?: boolean } = {}): BrowserWindowType {
|
|
const visible = opts.visible ?? true;
|
|
if (inboxWindow && !inboxWindow.isDestroyed()) {
|
|
if (visible) {
|
|
inboxWindow.show();
|
|
inboxWindow.focus();
|
|
}
|
|
return inboxWindow;
|
|
}
|
|
|
|
inboxWindow = new BrowserWindow({
|
|
width: 1440,
|
|
height: 900,
|
|
show: false,
|
|
webPreferences: {
|
|
preload: join(__dirname, '../preload/index.js'),
|
|
contextIsolation: true,
|
|
nodeIntegration: false,
|
|
sandbox: false
|
|
}
|
|
});
|
|
|
|
if (process.env.ELECTRON_RENDERER_URL) {
|
|
inboxWindow.loadURL(`${process.env.ELECTRON_RENDERER_URL}/inbox/index.html`);
|
|
} else {
|
|
inboxWindow.loadFile(join(__dirname, '../renderer/inbox/index.html'));
|
|
}
|
|
|
|
inboxWindow.on('close', (e) => {
|
|
if (!app.isQuitting) {
|
|
e.preventDefault();
|
|
inboxWindow?.hide();
|
|
}
|
|
});
|
|
|
|
inboxWindow.once('ready-to-show', () => {
|
|
if (visible) {
|
|
inboxWindow?.show();
|
|
return;
|
|
}
|
|
// macOS hidden autostart: regular NSWindow 를 NSApp 에 register 해야 dock running
|
|
// indicator (점) 가 표출된다. panel type 의 quickCapture 만 있으면 NSPanel 미인지 →
|
|
// dock 점이 안 보여 "앱이 안 떠 있는 것처럼" 보이는 버그. showInactive 로 focus 점유
|
|
// 없이 짧게 표출 후 즉시 hide — 사용자 화면 깜빡임 최소화.
|
|
if (process.platform === 'darwin') {
|
|
inboxWindow?.showInactive();
|
|
inboxWindow?.hide();
|
|
}
|
|
});
|
|
return inboxWindow;
|
|
}
|