From 77be752ff175b0059af02ccabbc3cbd5996610b1 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 7 Aug 2025 13:29:21 +0800 Subject: [PATCH] sciter hide cm (#12570) Signed-off-by: 21pages --- src/ui.rs | 16 ++++++++++++++-- src/ui/cm.rs | 9 +++++++++ src/ui/cm.tis | 19 +++++++++++++------ 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 6bef48ba2..6bf7c68da 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -118,6 +118,11 @@ pub fn start(args: &mut [String]) { Box::new(cm::SciterConnectionManager::new()) }); page = "cm.html"; + *cm::HIDE_CM.lock().unwrap() = crate::ipc::get_config("hide_cm") + .ok() + .flatten() + .unwrap_or_default() + == "true"; } else if (args[0] == "--connect" || args[0] == "--file-transfer" || args[0] == "--port-forward" @@ -178,6 +183,13 @@ pub fn start(args: &mut [String]) { .unwrap_or("".to_owned()), page )); + let hide_cm = *cm::HIDE_CM.lock().unwrap(); + if !args.is_empty() && args[0] == "--cm" && hide_cm { + // run_app calls expand(show) + run_loop, we use collapse(hide) + run_loop instead to create a hidden window + frame.collapse(true); + frame.run_loop(); + return; + } frame.run_app(); } @@ -633,9 +645,9 @@ impl UI { pub fn verify2fa(&self, code: String) -> bool { verify2fa(code) } - + fn verify_login(&self, raw: String, id: String) -> bool { - crate::verify_login(&raw, &id) + crate::verify_login(&raw, &id) } fn generate_2fa_img_src(&self, data: String) -> String { diff --git a/src/ui/cm.rs b/src/ui/cm.rs index 57e6b37dd..92cd2e2f2 100644 --- a/src/ui/cm.rs +++ b/src/ui/cm.rs @@ -7,6 +7,10 @@ use sciter::{make_args, Element, Value, HELEMENT}; use std::sync::Mutex; use std::{ops::Deref, sync::Arc}; +lazy_static::lazy_static! { + pub static ref HIDE_CM: Arc> = Arc::new(Mutex::new(false)); +} + #[derive(Clone, Default)] pub struct SciterHandler { pub element: Arc>>, @@ -151,6 +155,10 @@ impl SciterConnectionManager { fn get_option(&self, key: String) -> String { crate::ui_interface::get_option(key) } + + fn hide_cm(&self) -> bool { + *crate::ui::cm::HIDE_CM.lock().unwrap() + } } impl sciter::EventHandler for SciterConnectionManager { @@ -172,5 +180,6 @@ impl sciter::EventHandler for SciterConnectionManager { fn can_elevate(); fn elevate_portable(i32); fn get_option(String); + fn hide_cm(); } } diff --git a/src/ui/cm.tis b/src/ui/cm.tis index 479e26f92..0b0165b73 100644 --- a/src/ui/cm.tis +++ b/src/ui/cm.tis @@ -6,6 +6,13 @@ var show_chat = false; var show_elevation = true; var svg_elevate = ; +var hide_cm = undefined; +function setWindowState(state) { + if (hide_cm == undefined) hide_cm = handler.hide_cm(); + if (hide_cm) return; + view.windowState = state; +} + class Body: Reactor.Component { this var cur = 0; @@ -163,7 +170,7 @@ class Body: Reactor.Component body.update(); handler.authorize(cid); self.timer(30ms, function() { - view.windowState = View.WINDOW_MINIMIZED; + setWindowState(View.WINDOW_MINIMIZED); }); }); } @@ -177,7 +184,7 @@ class Body: Reactor.Component handler.elevate_portable(cid); handler.authorize(cid); self.timer(30ms, function() { - view.windowState = View.WINDOW_MINIMIZED; + setWindowState(View.WINDOW_MINIMIZED); }); }); } @@ -189,7 +196,7 @@ class Body: Reactor.Component body.update(); handler.elevate_portable(cid); self.timer(30ms, function() { - view.windowState = View.WINDOW_MINIMIZED; + setWindowState(View.WINDOW_MINIMIZED); }); }); } @@ -350,7 +357,7 @@ function bring_to_top(idx=-1) { if (is_linux) { view.focus = self; } else { - view.windowState = View.WINDOW_SHOWN; + setWindowState(View.WINDOW_SHOWN); } if (idx >= 0) body.cur = idx; } else { @@ -396,7 +403,7 @@ handler.addConnection = function(id, is_file_transfer, is_view_camera, is_termin self.timer(1ms, adjustHeader); if (authorized) { self.timer(3s, function() { - view.windowState = View.WINDOW_MINIMIZED; + setWindowState(View.WINDOW_MINIMIZED); }); } } @@ -509,7 +516,7 @@ var tm0 = getTime(); function self.closing() { if (connections.length == 0 && getTime() - tm0 > 30000) return true; - view.windowState = View.WINDOW_HIDDEN; + setWindowState(View.WINDOW_HIDDEN); return false; }