c0dd3b9028
- 原生 win32 实现的 TrayManager:Shell_NotifyIcon + 私有 message-only 窗口承载 popup 菜单,专用 OS 线程跑 GetMessage 泵,避免引入 cgo 依赖。 - WindowSubclass 通过 SetWindowLongPtrW 子类化 Gio 主窗口,拦截 WM_CLOSE:minimize_to_tray=true 时吞掉消息只隐藏窗口;exit 路径下 放行让 Gio 正常关闭事件循环。 - Preferences 新增"最小化到托盘"复选框,切换后立即重装/卸载钩子, 不需要重启程序。 - 托盘菜单提供 Show / Hide / Exit;左键单击图标等同 Show;右键弹菜单。 - 非 Windows 平台所有相关 API 退化为 ErrUnsupported / no-op stub。
24 lines
443 B
Go
24 lines
443 B
Go
//go:build !windows
|
|
|
|
package win32
|
|
|
|
type WindowSubclass struct{}
|
|
|
|
func InstallCloseHook(hwnd uintptr, onClose func() bool) (*WindowSubclass, error) {
|
|
return nil, ErrUnsupported
|
|
}
|
|
|
|
func (s *WindowSubclass) Remove() {}
|
|
|
|
func ShowWindow(hwnd uintptr, cmdShow int32) {}
|
|
|
|
const (
|
|
SW_HIDE int32 = 0
|
|
SW_SHOW int32 = 5
|
|
SW_RESTORE int32 = 9
|
|
)
|
|
|
|
func FindWindowByTitle(title string) uintptr { return 0 }
|
|
|
|
func PostCloseMessage(hwnd uintptr) {}
|