From d8e51c6b14cedb9bc1767c22ae6092bfe3aa5e7c Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 29 Sep 2023 15:09:58 +0800 Subject: [PATCH 1/2] render cm side page after window size change, calculate real window width Signed-off-by: 21pages --- flutter/lib/desktop/pages/server_page.dart | 72 +++++++++++++--------- flutter/lib/models/chat_model.dart | 4 ++ 2 files changed, 46 insertions(+), 30 deletions(-) diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index 2ef04b244..89a43adf6 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -175,34 +175,47 @@ class ConnectionManagerState extends State { ], ); }, - pageViewBuilder: (pageView) => Row( - children: [ - Consumer( - builder: (_, model, child) => model.isShowCMSidePage - ? Expanded( - child: buildRemoteBlock( - child: Container( - decoration: BoxDecoration( - border: Border( - right: BorderSide( - color: Theme.of(context) - .dividerColor))), - child: buildSidePage()), - ), - flex: (kConnectionManagerWindowSizeOpenChat.width - - kConnectionManagerWindowSizeClosedChat - .width) - .toInt(), - ) - : Offstage(), - ), - Expanded( - child: pageView, - flex: kConnectionManagerWindowSizeClosedChat.width - .toInt() - - 4 // prevent stretch of the page view when chat is open, - ), - ], + pageViewBuilder: (pageView) => LayoutBuilder( + builder: (context, constrains) { + var borderWidth = 0.0; + if (constrains.maxWidth > + kConnectionManagerWindowSizeClosedChat.width) { + borderWidth = kConnectionManagerWindowSizeOpenChat.width - + constrains.maxWidth; + } else { + borderWidth = kConnectionManagerWindowSizeClosedChat.width - + constrains.maxWidth; + } + if (borderWidth < 0 || borderWidth > 50) { + borderWidth = 0; + } + final realClosedWidth = + kConnectionManagerWindowSizeClosedChat.width - + borderWidth; + final realChatPageWidth = + constrains.maxWidth - realClosedWidth; + return Row(children: [ + if (constrains.maxWidth > + kConnectionManagerWindowSizeClosedChat.width) + Consumer( + builder: (_, model, child) => SizedBox( + width: realChatPageWidth, + child: buildRemoteBlock( + child: Container( + decoration: BoxDecoration( + border: Border( + right: BorderSide( + color: Theme.of(context) + .dividerColor))), + child: buildSidePage()), + ), + )), + SizedBox( + width: realClosedWidth, + child: + SizedBox(width: realClosedWidth, child: pageView)), + ]); + }, ), ), ); @@ -966,8 +979,7 @@ class __FileTransferLogPageState extends State<_FileTransferLogPage> { return PreferredSize( preferredSize: const Size(200, double.infinity), child: Container( - margin: const EdgeInsets.only(top: 16.0, bottom: 16.0, right: 16.0), - padding: const EdgeInsets.all(8.0), + padding: const EdgeInsets.all(12.0), child: Obx( () { final jobTable = gFFI.cmFileModel.currentJobTable; diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index ed216e500..77eeb3a7e 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -285,7 +285,10 @@ class ChatModel with ChangeNotifier { await toggleCMSidePage(); } + var _togglingCMSidePage = false; // protect order for await toggleCMSidePage() async { + if (_togglingCMSidePage) return false; + _togglingCMSidePage = true; if (_isShowCMSidePage) { _isShowCMSidePage = !_isShowCMSidePage; notifyListeners(); @@ -300,6 +303,7 @@ class ChatModel with ChangeNotifier { _isShowCMSidePage = !_isShowCMSidePage; notifyListeners(); } + _togglingCMSidePage = false; } changeCurrentKey(MessageKey key) { From 17a56bbf481234301b6d6ccacf8c9be9f98d0e26 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 30 Sep 2023 19:47:59 +0800 Subject: [PATCH 2/2] elevation: keyboard permission required and remove foreground filter Signed-off-by: 21pages --- flutter/lib/common/widgets/dialog.dart | 9 +++++++- flutter/lib/common/widgets/toolbar.dart | 8 ++++--- src/client/io_loop.rs | 11 +++++---- src/lang/ar.rs | 1 + src/lang/ca.rs | 1 + src/lang/cn.rs | 1 + src/lang/cs.rs | 1 + src/lang/da.rs | 1 + src/lang/de.rs | 1 + src/lang/el.rs | 1 + src/lang/eo.rs | 1 + src/lang/es.rs | 1 + src/lang/fa.rs | 1 + src/lang/fr.rs | 1 + src/lang/hu.rs | 1 + src/lang/id.rs | 1 + src/lang/it.rs | 1 + src/lang/ja.rs | 1 + src/lang/ko.rs | 1 + src/lang/kz.rs | 1 + src/lang/lt.rs | 1 + src/lang/lv.rs | 4 +--- src/lang/nl.rs | 1 + src/lang/pl.rs | 1 + src/lang/pt_PT.rs | 1 + src/lang/ptbr.rs | 1 + src/lang/ro.rs | 1 + src/lang/ru.rs | 1 + src/lang/sk.rs | 1 + src/lang/sl.rs | 1 + src/lang/sq.rs | 1 + src/lang/sr.rs | 1 + src/lang/sv.rs | 1 + src/lang/template.rs | 1 + src/lang/th.rs | 1 + src/lang/tr.rs | 1 + src/lang/tw.rs | 1 + src/lang/ua.rs | 1 + src/lang/vn.rs | 1 + src/platform/windows.rs | 30 +------------------------ src/server/connection.rs | 17 +++++++++----- 41 files changed, 69 insertions(+), 45 deletions(-) diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index 0cb2741be..2fe5d7637 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -711,6 +711,13 @@ void showWaitUacDialog( (setState, close, context) => CustomAlertDialog( title: null, content: msgboxContent(type, 'Wait', 'wait_accept_uac_tip'), + actions: [ + dialogButton( + 'OK', + icon: Icon(Icons.done_rounded), + onPressed: close, + ), + ], )); } @@ -931,7 +938,7 @@ void showElevationError(SessionID sessionId, String type, String title, dialogButton('Cancel', onPressed: () { close(); }, isOutline: true), - dialogButton('Retry', onPressed: submit), + if (text != 'No permission') dialogButton('Retry', onPressed: submit), ], onSubmit: submit, onCancel: close, diff --git a/flutter/lib/common/widgets/toolbar.dart b/flutter/lib/common/widgets/toolbar.dart index 4cf6fd3ea..0e8ed6b3d 100644 --- a/flutter/lib/common/widgets/toolbar.dart +++ b/flutter/lib/common/widgets/toolbar.dart @@ -49,7 +49,8 @@ class TToggleMenu { handleOsPasswordEditIcon( SessionID sessionId, OverlayDialogManager dialogManager) { isEditOsPassword = true; - showSetOSPassword(sessionId, false, dialogManager, null, () => isEditOsPassword = false); + showSetOSPassword( + sessionId, false, dialogManager, null, () => isEditOsPassword = false); } handleOsPasswordAction( @@ -62,7 +63,8 @@ handleOsPasswordAction( await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ?? ''; if (password.isEmpty) { - showSetOSPassword(sessionId, true, dialogManager, password, () => isEditOsPassword = false); + showSetOSPassword(sessionId, true, dialogManager, password, + () => isEditOsPassword = false); } else { bind.sessionInputOsPassword(sessionId: sessionId, value: password); } @@ -76,7 +78,7 @@ List toolbarControls(BuildContext context, String id, FFI ffi) { List v = []; // elevation - if (ffi.elevationModel.showRequestMenu) { + if (perms['keyboard'] != false && ffi.elevationModel.showRequestMenu) { v.add( TTextMenu( child: Text(translate('Request Elevation')), diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 254f72583..0d579e3da 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1303,9 +1303,10 @@ impl Remote { } } Some(misc::Union::Uac(uac)) => { + let keyboard = self.handler.server_keyboard_enabled.read().unwrap().clone(); #[cfg(feature = "flutter")] { - if uac { + if uac && keyboard { self.handler.msgbox( "on-uac", "Prompt", @@ -1324,7 +1325,7 @@ impl Remote { let title = "Prompt"; let text = "Please wait for confirmation of UAC..."; let link = ""; - if uac { + if uac && keyboard { self.handler.msgbox(msgtype, title, text, link); } else { self.handler.cancel_msgbox(&format!( @@ -1335,9 +1336,10 @@ impl Remote { } } Some(misc::Union::ForegroundWindowElevated(elevated)) => { + let keyboard = self.handler.server_keyboard_enabled.read().unwrap().clone(); #[cfg(feature = "flutter")] { - if elevated { + if elevated && keyboard { self.handler.msgbox( "on-foreground-elevated", "Prompt", @@ -1356,7 +1358,7 @@ impl Remote { let title = "Prompt"; let text = "elevated_foreground_window_tip"; let link = ""; - if elevated { + if elevated && keyboard { self.handler.msgbox(msgtype, title, text, link); } else { self.handler.cancel_msgbox(&format!( @@ -1370,6 +1372,7 @@ impl Remote { if err.is_empty() { self.handler.msgbox("wait-uac", "", "", ""); } else { + self.handler.cancel_msgbox("wait-uac"); self.handler .msgbox("elevation-error", "Elevation Error", &err, ""); } diff --git a/src/lang/ar.rs b/src/lang/ar.rs index 3500e2916..f4bbff8db 100644 --- a/src/lang/ar.rs +++ b/src/lang/ar.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 1fd7dff11..3a093484d 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 00cdc9390..da2c61bb2 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", "启动时检查软件更新"), ("upgrade_rustdesk_server_pro_to_{}_tip", "请升级专业版服务器到{}或更高版本!"), ("pull_group_failed_tip", "获取组信息失败"), + ("No permission", "没有权限"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index cd7f3a306..87e9d5612 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index 7d1321890..2c6960eaa 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 4d2d8b466..8df8acb95 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", "Beim Start auf Softwareaktualisierung prüfen"), ("upgrade_rustdesk_server_pro_to_{}_tip", "Bitte aktualisieren Sie RustDesk Server Pro auf die Version {} oder neuer!"), ("pull_group_failed_tip", "Aktualisierung der Gruppe fehlgeschlagen"), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 76327d0ea..a371721c3 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 9b73932f2..95b95c941 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index 4de8a142e..a1faef630 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", "Comprobar actualización al iniciar"), ("upgrade_rustdesk_server_pro_to_{}_tip", "¡Por favor, actualiza RustDesk Server Pro a la versión {} o superior"), ("pull_group_failed_tip", "No se ha podido refrescar el grupo"), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 25a526377..2ea2e3098 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 16022b6f5..1c0b92817 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", "Vérifier la disponibilité des mises à jour au démarrage"), ("upgrade_rustdesk_server_pro_to_{}_tip", "Veuillez mettre à jour RustDesk Server Pro avec la version {} ou une version plus récente !"), ("pull_group_failed_tip", "Échec de l'actualisation du groupe"), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index bb3388341..afe29cef8 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index 967ff2bcd..19945a3b9 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", "Periksa pembaruan aplikasi saat sistem dinyalakan."), ("upgrade_rustdesk_server_pro_to_{}_tip", "Silahkan perbarui RustDesk Server Pro ke versi {} atau yang lebih baru!"), ("pull_group_failed_tip", "Gagal memperbarui grup"), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index e0a944036..d1dc5e660 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", "All'avvio verifica presenza aggiornamenti programma"), ("upgrade_rustdesk_server_pro_to_{}_tip", "Aggiorna RustDesk Server Pro alla versione {} o successiva!"), ("pull_group_failed_tip", "Impossibile aggiornare il gruppo"), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 04b00dbfe..435ea3ff9 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 4d8677c81..a74ebca51 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 2eab96f76..5eeb06b18 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index c2dece955..5342596b1 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lv.rs b/src/lang/lv.rs index b1abd922b..167452db4 100644 --- a/src/lang/lv.rs +++ b/src/lang/lv.rs @@ -57,7 +57,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("ID Server", "ID serveris"), ("Relay Server", "Releja serveris"), ("API Server", "API serveris"), - ("Key", "Atslēga"), ("invalid_http", "jāsākas ar http:// vai https://"), ("Invalid IP", "Nederīga IP"), ("Invalid format", "Nederīgs formāts"), @@ -297,7 +296,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("This file exists, skip or overwrite this file?", "Šis fails pastāv, izlaist vai pārrakstīt šo failu?"), ("Quit", "Iziet"), ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"), - ("doc_fix_wayland", "https://rustdesk.com/docs/en/manual/linux/#x11-required"), ("Help", "Palīdzība"), ("Failed", "Neizdevās"), ("Succeeded", "Izdevās"), @@ -481,7 +479,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Me", "Es"), ("identical_file_tip", "Šis fails ir identisks sesijas failam."), ("show_monitors_tip", "Rādīt monitorus rīkjoslā"), - ("enter_rustdesk_passwd_tip", "Ievadiet RustDesk paroli"), ("View Mode", "Skatīšanas režīms"), ("login_linux_tip", "Jums ir jāpiesakās attālajā Linux kontā, lai iespējotu X darbvirsmas sesiju"), ("verify_rustdesk_password_tip", "Pārbaudīt RustDesk paroli"), @@ -560,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", "Startējot pārbaudīt, vai nav programmatūras atjauninājumu"), ("upgrade_rustdesk_server_pro_to_{}_tip", "Lūdzu, jauniniet RustDesk Server Pro uz versiju {} vai jaunāku!"), ("pull_group_failed_tip", "Neizdevās atsvaidzināt grupu"), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index b879a896c..dfd1b121f 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 71813688c..0f273a121 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", "Sprawdź aktualizacje przy starcie programu"), ("upgrade_rustdesk_server_pro_to_{}_tip", "Proszę zaktualizować RustDesk Server Pro do wersji {} lub nowszej!"), ("pull_group_failed_tip", "Błąd odświeżania grup"), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index f540bc76d..a42baf7d7 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 719886a18..aea4c4134 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index b347278fc..5c05f88c0 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 3556bdbd0..da3ab1704 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", "Проверять обновления программы при запуске"), ("upgrade_rustdesk_server_pro_to_{}_tip", "Обновите RustDesk Server Pro до версии {} или новее!"), ("pull_group_failed_tip", "Невозможно обновить группу"), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 05c3160fd..aaa8a1d1d 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index c22b2ecd1..da32b5805 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index d0875114d..1e1ce6427 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 13819f37e..527242a14 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index e54b7c7b6..5f6d15dfc 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index e442c826e..282370744 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 2629540d2..edb5f857d 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 20a1ce942..89db0f029 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 0074e8afb..002bf2473 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index facada5f1..182caec7f 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 9eec26b0c..fd86d9b74 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -557,5 +557,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Check for software update on startup", ""), ("upgrade_rustdesk_server_pro_to_{}_tip", ""), ("pull_group_failed_tip", ""), + ("No permission", ""), ].iter().cloned().collect(); } diff --git a/src/platform/windows.rs b/src/platform/windows.rs index e4b3c431d..a74cbf896 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1587,29 +1587,6 @@ pub fn is_elevated(process_id: Option) -> ResultType { } } -#[inline] -fn filter_foreground_window(process_id: DWORD) -> ResultType { - if let Ok(output) = std::process::Command::new("tasklist") - .args(vec![ - "/SVC", - "/NH", - "/FI", - &format!("PID eq {}", process_id), - ]) - .creation_flags(CREATE_NO_WINDOW) - .output() - { - let s = String::from_utf8_lossy(&output.stdout) - .to_string() - .to_lowercase(); - Ok(["Taskmgr", "mmc", "regedit"] - .iter() - .any(|name| s.contains(&name.to_string().to_lowercase()))) - } else { - bail!("run tasklist failed"); - } -} - pub fn is_foreground_window_elevated() -> ResultType { unsafe { let mut process_id: DWORD = 0; @@ -1617,12 +1594,7 @@ pub fn is_foreground_window_elevated() -> ResultType { if process_id == 0 { bail!("Failed to get processId, errno {}", GetLastError()) } - let elevated = is_elevated(Some(process_id))?; - if elevated { - filter_foreground_window(process_id) - } else { - Ok(false) - } + is_elevated(Some(process_id)) } } diff --git a/src/server/connection.rs b/src/server/connection.rs index a14fe07e0..35538a85a 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -2047,12 +2047,18 @@ impl Connection { #[cfg(windows)] async fn handle_elevation_request(&mut self, para: portable_client::StartPara) { - let mut err = "No need to elevate".to_string(); - if !crate::platform::is_installed() && !portable_client::running() { - err = portable_client::start_portable_service(para) - .err() - .map_or("".to_string(), |e| e.to_string()); + let mut err; + if !self.keyboard { + err = "No permission".to_string(); + } else { + err = "No need to elevate".to_string(); + if !crate::platform::is_installed() && !portable_client::running() { + err = portable_client::start_portable_service(para) + .err() + .map_or("".to_string(), |e| e.to_string()); + } } + let mut misc = Misc::new(); misc.set_elevation_response(err); let mut msg = Message::new(); @@ -2369,6 +2375,7 @@ impl Connection { if self.portable.is_installed || self.file_transfer.is_some() || self.port_forward_socket.is_some() + || !self.keyboard { return; }