ui/window
窗口:打开、关闭、置前、窗口快捷键、事件循环、离屏截图。
| 文件 | 内容 |
|---|---|
window.go |
Open、Main、Options(含 Overlay)、Window |
shortcut.go |
快捷键解析与分发 |
root.go |
窗口根视图:背景、滚动、24dp 边距 |
position_* |
首次显示居中;macOS 按屏幕可用区域计算,其他平台使用 Gio 动作 |
screenshot.go |
Screenshot 离屏渲染成 PNG |
automation.go |
自动化模式:内存窗口、语义快照、模拟点击输入滚动 |
automation_server.go |
自动化协议:KEEL_AUTOMATION socket 上的 JSON 请求 |
testdata/raise |
真实窗口死锁回归测试 |
- 依赖:
core、theme。不依赖el、kit:窗口只认core.Widget接口。 - 被谁依赖:应用代码。
cmd/keel-mcp通过 socket 协议驱动它,不引用它的代码。
设置环境变量 KEEL_AUTOMATION=1(或 socket 路径)启动应用时,每个窗口会多一个影子窗口,供 Agent 操作;真实窗口照常显示,Agent 的操作会实时反映在屏幕上。再加 KEEL_HEADLESS=1 则不显示窗口,见 Agent 端到端测试。
window.Open(window.Options{Title: "Hello", Content: page})
window.Main() // 最后一个窗口关闭后退出进程
改这里的代码前先读 架构 · 不能在锁内等待主线程。详见 窗口与应用。
macOS 的 Main 会订阅 NSWorkspace 的辅助功能显示偏好,启动时读取“减少动态效果”,变化时更新 theme.ReducedMotion。AppKit 回调通过有界队列交给后台消费者,再在 core.Update 中更新主题,避免主线程等待帧锁。无窗口测试不安装原生观察者;其他平台目前使用应用设置。