From 0bb4d43e9ea9d9dfb9c46c8d27d1a97cd0ad6bea Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 9 Jul 2024 15:19:16 +0800 Subject: [PATCH] add custom client option to allow remote cm modification (#8660) Signed-off-by: 21pages --- flutter/lib/consts.dart | 1 + flutter/lib/desktop/pages/server_page.dart | 25 ++++++++++++++++------ libs/hbb_common/src/config.rs | 2 ++ 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 036a1dd3c..ff3017634 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -135,6 +135,7 @@ const String kOptionAllowLinuxHeadless = "allow-linux-headless"; const String kOptionAllowRemoveWallpaper = "allow-remove-wallpaper"; const String kOptionStopService = "stop-service"; const String kOptionDirectxCapture = "enable-directx-capture"; +const String kOptionAllowRemoteCmModification = "allow-remote-cm-modification"; const String kOptionToggleViewOnly = "view-only"; diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index 43f9c2bd3..1e63c71bd 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -112,7 +112,9 @@ class ConnectionManagerState extends State void didChangeAppLifecycleState(AppLifecycleState state) { super.didChangeAppLifecycleState(state); if (state == AppLifecycleState.resumed) { - shouldBeBlocked(_block, null); + if (!allowRemoteCMModification()) { + shouldBeBlocked(_block, null); + } } } @@ -183,7 +185,7 @@ class ConnectionManagerState extends State selectedBorderColor: MyTheme.accent, maxLabelWidth: 100, tail: null, //buildScrollJumper(), - blockTab: _block, + blockTab: allowRemoteCMModification() ? null : _block, selectedTabBackgroundColor: Theme.of(context).hintColor.withOpacity(0), tabBuilder: (key, icon, label, themeConf) { @@ -226,10 +228,12 @@ class ConnectionManagerState extends State Consumer( builder: (_, model, child) => SizedBox( width: realChatPageWidth, - child: buildRemoteBlock( - child: buildSidePage(), - block: _block, - mask: true), + child: allowRemoteCMModification() + ? buildSidePage() + : buildRemoteBlock( + child: buildSidePage(), + block: _block, + mask: true), )), SizedBox( width: realClosedWidth, @@ -1057,6 +1061,10 @@ class _CmControlPanel extends StatelessWidget { } void checkClickTime(int id, Function() callback) async { + if (allowRemoteCMModification()) { + callback(); + return; + } var clickCallbackTime = DateTime.now().millisecondsSinceEpoch; await bind.cmCheckClickTime(connId: id); Timer(const Duration(milliseconds: 120), () async { @@ -1065,6 +1073,11 @@ void checkClickTime(int id, Function() callback) async { }); } +bool allowRemoteCMModification() { + return option2bool(kOptionAllowRemoteCmModification, + bind.mainGetLocalOption(key: kOptionAllowRemoteCmModification)); +} + class _FileTransferLogPage extends StatefulWidget { _FileTransferLogPage({Key? key}) : super(key: key); diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 152087836..07e6fee1b 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -2109,6 +2109,7 @@ pub mod keys { pub const OPTION_FLUTTER_PEER_TAB_VISIBLE: &str = "peer-tab-visible"; pub const OPTION_FLUTTER_PEER_CARD_UI_TYLE: &str = "peer-card-ui-type"; pub const OPTION_FLUTTER_CURRENT_AB_NAME: &str = "current-ab-name"; + pub const OPTION_ALLOW_REMOTE_CM_MODIFICATION: &str = "allow-remote-cm-modification"; // android floating window options pub const OPTION_DISABLE_FLOATING_WINDOW: &str = "disable-floating-window"; @@ -2195,6 +2196,7 @@ pub mod keys { "hide-server-settings", "hide-proxy-settings", "hide-username-on-card", + OPTION_ALLOW_REMOTE_CM_MODIFICATION, ]; // DEFAULT_SETTINGS, OVERWRITE_SETTINGS pub const KEYS_SETTINGS: &[&str] = &[