Skip to content

Window Lifecycle Events

This content is not available in your language yet.

Electron BrowserWindow 이벤트와 동등한 OS-level 창 이벤트. macOS는 NSWindowDelegate (windowDidResize: / windowDidMove: / windowDidBecomeKey: / windowDidResignKey:)와 CEF Views CefWindowDelegate에서 라우팅한다. Linux는 CEF Views 경로에서 window:resized/window:moved, ready/title, show/hide, minimize/maximize 계열을 지원한다. Windows 지원은 향후 추가 예정이다.

채널발화 시점Payload
window:created창이 만들어진 직후{windowId, name?}
window:resizedOS가 창 크기를 바꾼 후{windowId, x, y, width, height}
window:moved창이 이동한 후{windowId, x, y}
window:focus창이 키 윈도우가 됨{windowId}
window:blur창이 키 윈도우에서 빠짐{windowId}
window:closeclose 요청 (취소 가능){windowId} (preventDefault 가능)
window:closed창 파괴 직후 (단방향){windowId}
window:all-closed마지막 창이 닫힘{}
import { on } from '@suji/api';
on('window:resized', ({ windowId, x, y, width, height }) => {
console.log(`win ${windowId} → ${width}x${height} at (${x},${y})`);
});
on('window:focus', ({ windowId }) => { /* ... */ });
on('window:blur', ({ windowId }) => { /* ... */ });
on('window:moved', ({ windowId, x, y }) => { /* ... */ });
import { on } from '@suji/node';
on('window:resized', (data) => {
const { windowId, width, height } = JSON.parse(data);
// 창 크기 저장 등
});
fn onResized(event: suji.Event) void {
// event.data: {"windowId":N,"x":..,"y":..,"width":..,"height":..}
}
pub const my_app = suji.app()
.on("window:resized", onResized)
.on("window:focus", onFocus)
.on("window:blur", onBlur);
suji::on("window:resized", on_resized, std::ptr::null_mut());
suji.On("window:resized", func(data string) { /* ... */ })
  • focus/blur는 app activation에 의존. 다른 앱이 활성 중이면 key/active window 변경이 일어나지 않을 수 있다.
  • Linux CEF Views 경로는 setBounds resize, lifecycle control, ready/title, show/hide를 지원한다. CEF Views의 min/max native getter는 headless 환경에서 command 직후 lag가 있어, Suji가 CEF Views delegate에 command-side 상태를 보존해 is_minimized/is_maximized와 restore/unmaximize 이벤트를 일관되게 라우팅한다.
  • Windows lifecycle 이벤트 지원은 향후 추가 예정이다.
  • macOS non-CEF fallback의 동시 부착 가능한 창 수는 SUJI_WINDOW_LIFECYCLE_MAX = 64. CEF Views 경로는 CEF delegate 기반이라 이 한도에 의존하지 않는다.