系统托盘 (System Tray)
zero-native 支持带有菜单的系统托盘图标。托盘操作将在运行时作为名称为 "tray.action" 的 CommandEvent 分发。
平台支持情况
托盘支持目前已在 macOS 上实现。Linux 下将返回 UnsupportedService,直到选定了可移植的状态通知器(Status Notifier)实现。
TrayOptions (托盘选项)
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
icon_path | []const u8 | "" | 托盘图标的文件路径 |
tooltip | []const u8 | "" | 鼠标悬停时的工具提示文本 |
items | []const TrayMenuItem | &. | 托盘菜单项列表 |
TrayMenuItem (托盘菜单项)
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
id | TrayItemId (u32) | 0 | 菜单项的唯一标识符 ID |
label | []const u8 | "" | 菜单项展示的文本标签 |
separator | bool | false | 是否为分割线 |
enabled | bool | true | 菜单项是否启用/可点击 |
PlatformServices 方法
createTray(options)— 创建或替换托盘图标updateTrayMenu(items)— 更新菜单项,而无需重新创建托盘removeTray()— 移除托盘图标
处理托盘操作 (Handling Tray Actions)
当用户点击托盘菜单项时,运行时会分发一个名称为 "tray.action" 的 CommandEvent。使用你的 event_fn 回调函数来处理它:
zig
fn event(context: *anyopaque, runtime: *Runtime, ev: Event) anyerror!void {
switch (ev) {
.command => |cmd| {
if (std.mem.eql(u8, cmd.name, "tray.action")) {
// 处理托盘菜单点击事件
}
},
else => {},
}
}