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:resized | OS가 창 크기를 바꾼 후 | {windowId, x, y, width, height} |
window:moved | 창이 이동한 후 | {windowId, x, y} |
window:focus | 창이 키 윈도우가 됨 | {windowId} |
window:blur | 창이 키 윈도우에서 빠짐 | {windowId} |
window:close | close 요청 (취소 가능) | {windowId} (preventDefault 가능) |
window:closed | 창 파괴 직후 (단방향) | {windowId} |
window:all-closed | 마지막 창이 닫힘 | {} |
Frontend JS
섹션 제목: “Frontend JS”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 }) => { /* ... */ });Node 백엔드
섹션 제목: “Node 백엔드”import { on } from '@suji/node';
on('window:resized', (data) => { const { windowId, width, height } = JSON.parse(data); // 창 크기 저장 등});Zig 백엔드
섹션 제목: “Zig 백엔드”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);Rust 백엔드
섹션 제목: “Rust 백엔드”suji::on("window:resized", on_resized, std::ptr::null_mut());Go 백엔드
섹션 제목: “Go 백엔드”suji.On("window:resized", func(data string) { /* ... */ })- focus/blur는 app activation에 의존. 다른 앱이 활성 중이면 key/active window 변경이 일어나지 않을 수 있다.
- Linux CEF Views 경로는
setBoundsresize, 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 기반이라 이 한도에 의존하지 않는다.