Files
inkling/src/main/windows/inboxWindow.ts

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;
}