From 0bfb887c01d9b78d8111c343340141db1c5d2e0c Mon Sep 17 00:00:00 2001 From: JoeAllen <2494136784@qq.com> Date: Tue, 29 Sep 2026 17:02:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=A0=87=E9=A2=98=E6=A0=8F=E9=92=89?= =?UTF-8?q?=E5=AD=90=E6=8C=89=E9=92=AE=E4=BA=A4=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 补上前一提交的按钮本体:Pin/PinOff 图标随置顶状态切换, 切换失败(句柄不可得等)弹错误通知。随 C3 的 sysmon::set_topmost 使用。 --- gpui-app/src/ui/app.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/gpui-app/src/ui/app.rs b/gpui-app/src/ui/app.rs index 7358663..b205110 100644 --- a/gpui-app/src/ui/app.rs +++ b/gpui-app/src/ui/app.rs @@ -225,6 +225,15 @@ impl MqttXApp { 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 时重应用主题。 // 订阅需随实体存活,dropped 即取消,故存入字段。 let appearance_weak = cx.entity().downgrade(); @@ -1061,6 +1070,33 @@ impl MqttXApp { 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( Button::new("more-menu")