feat: 标题栏钉子按钮交互
补上前一提交的按钮本体:Pin/PinOff 图标随置顶状态切换, 切换失败(句柄不可得等)弹错误通知。随 C3 的 sysmon::set_topmost 使用。
This commit is contained in:
@@ -225,6 +225,15 @@ impl MqttXApp {
|
|||||||
|
|
||||||
let search = cx.new(|cx| InputState::new(window, cx).placeholder("搜索连接…"));
|
let search = cx.new(|cx| InputState::new(window, cx).placeholder("搜索连接…"));
|
||||||
|
|
||||||
|
// 自验后门:MQTTX_OPEN_RESMON=1 启动时直接打开资源监控
|
||||||
|
// (与 MQTTX_VERSION_OVERRIDE 同类的测试入口,供自动化验证 UI)。
|
||||||
|
// defer 到 effects 阶段执行,避免在 MqttXApp 构造借用内嵌套打开
|
||||||
|
if std::env::var("MQTTX_OPEN_RESMON").as_deref() == Ok("1") {
|
||||||
|
cx.defer_in(window, move |_, window, cx| {
|
||||||
|
crate::ui::resource_dialog::open(cx.entity(), window, cx);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// 「跟随系统」:监听系统外观(深浅色)变化,仅在设置为 System 时重应用主题。
|
// 「跟随系统」:监听系统外观(深浅色)变化,仅在设置为 System 时重应用主题。
|
||||||
// 订阅需随实体存活,dropped 即取消,故存入字段。
|
// 订阅需随实体存活,dropped 即取消,故存入字段。
|
||||||
let appearance_weak = cx.entity().downgrade();
|
let appearance_weak = cx.entity().downgrade();
|
||||||
@@ -1061,6 +1070,33 @@ impl MqttXApp {
|
|||||||
this.open_connection_form(None, window, cx);
|
this.open_connection_form(None, window, cx);
|
||||||
})),
|
})),
|
||||||
)
|
)
|
||||||
|
.child(
|
||||||
|
Button::new("pin-window")
|
||||||
|
.icon(if self.pinned {
|
||||||
|
IconName::PinOff
|
||||||
|
} else {
|
||||||
|
IconName::Pin
|
||||||
|
})
|
||||||
|
.ghost()
|
||||||
|
.small()
|
||||||
|
.tooltip(if self.pinned {
|
||||||
|
"取消窗口置顶"
|
||||||
|
} else {
|
||||||
|
"窗口置顶"
|
||||||
|
})
|
||||||
|
.on_click(cx.listener(|this, _, window, cx| {
|
||||||
|
let next = !this.pinned;
|
||||||
|
if crate::sysmon::set_topmost(window, next) {
|
||||||
|
this.pinned = next;
|
||||||
|
cx.notify();
|
||||||
|
} else {
|
||||||
|
window.push_notification(
|
||||||
|
Notification::error("置顶操作失败"),
|
||||||
|
cx,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
})),
|
||||||
|
)
|
||||||
.child(self.render_theme_toggle(cx))
|
.child(self.render_theme_toggle(cx))
|
||||||
.child(
|
.child(
|
||||||
Button::new("more-menu")
|
Button::new("more-menu")
|
||||||
|
|||||||
Reference in New Issue
Block a user