Remote toolbar snap edges

1. Translations
2. Apply option to remote windows on changed

Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
fufesou 2026-05-23 18:27:01 +08:00
parent da68a7bc18
commit dc07262940
53 changed files with 163 additions and 39 deletions

View file

@ -491,9 +491,12 @@ class _GeneralState extends State<_General> {
if (!isWeb && !bind.isIncomingOnly())
_OptionCheckBox(
context,
'Allow docking remote toolbar to any window edge',
'allow-remote-toolbar-docking-any-edge-tip',
kOptionAllowMultiEdgeToolbarDock,
isServer: false,
update: (_) {
reloadAllWindows();
},
),
_OptionCheckBox(context, 'Adaptive bitrate', kOptionEnableAbr),
if (!isWeb) wallpaper(),

View file

@ -403,8 +403,10 @@ class _RemoteToolbarState extends State<RemoteToolbar> {
// handle just slides it horizontally preserving long-standing UX while
// still fixing the bug where dragging only moved the handle. When true,
// the user has opted into multi-edge docking with nearest-edge snap.
// Read once on init; takes effect on next session.
// Kept in sync after settings-triggered rebuilds.
final _multiEdgeEnabled = false.obs;
bool _pendingDockingOptionSync = false;
int _dockingOptionSyncSerial = 0;
int get windowId => stateGlobal.windowId;
@ -426,47 +428,96 @@ class _RemoteToolbarState extends State<RemoteToolbar> {
void _minimize() async =>
await WindowController.fromWindowId(windowId).minimize();
Future<void> _syncDockingOptions({required bool force}) async {
final syncSerial = ++_dockingOptionSyncSerial;
if (_dragging.isTrue) {
_pendingDockingOptionSync = true;
return;
}
// Use the canonical helper so the option's documented default semantics
// apply (allow-* prefix => default false). Keeping it raw-string would
// diverge from how _OptionCheckBox displays the same key.
final multiEdgeEnabled =
mainGetLocalBoolOptionSync(kOptionAllowMultiEdgeToolbarDock);
final wasMultiEdgeEnabled = _multiEdgeEnabled.value;
if (!force && wasMultiEdgeEnabled == multiEdgeEnabled) return;
final savedFraction = await bind.sessionGetOption(
sessionId: widget.ffi.sessionId, arg: kOptionRemoteMenubarFraction);
// Backward compat: legacy horizontal-only position.
final legacyFraction = await bind.sessionGetOption(
sessionId: widget.ffi.sessionId, arg: _legacyRemoteMenubarDragX);
if (syncSerial != _dockingOptionSyncSerial) return;
var nextEdge = _edge.value;
var savedFractionForNextEdge = savedFraction;
var keepCurrentPosition = false;
if (!multiEdgeEnabled) {
nextEdge = _ToolbarEdge.top;
} else if (force || wasMultiEdgeEnabled) {
final edgeStr = await bind.sessionGetOption(
sessionId: widget.ffi.sessionId, arg: kOptionRemoteMenubarEdge);
if (syncSerial != _dockingOptionSyncSerial) return;
nextEdge = _parseToolbarEdge(edgeStr);
} else {
// The setting changed from top-only to multi-edge while this toolbar is
// already visible. Keep its current position instead of jumping to the
// last saved multi-edge dock.
nextEdge = _ToolbarEdge.top;
savedFractionForNextEdge = _fraction.value.toString();
keepCurrentPosition = true;
}
final rawFraction = _toolbarRawFraction(
multiEdgeEnabled: multiEdgeEnabled,
edge: nextEdge,
savedFraction: savedFractionForNextEdge,
legacyFraction: legacyFraction,
);
// Clamp to the saved drag-bound contract so a corrupted or out-of-range
// saved value can't bypass it until the user drags again.
final dragLeft = double.tryParse(
bind.mainGetLocalOption(key: kOptionRemoteMenubarDragLeft)) ??
0.0;
final dragRight = double.tryParse(
bind.mainGetLocalOption(key: kOptionRemoteMenubarDragRight)) ??
1.0;
final nextFraction = (double.tryParse(rawFraction) ?? 0.5)
.clamp(dragLeft, dragRight)
.toDouble();
if (syncSerial != _dockingOptionSyncSerial) return;
_edge.value = nextEdge;
_fraction.value = nextFraction;
_multiEdgeEnabled.value = multiEdgeEnabled;
_pendingDockingOptionSync = false;
if (keepCurrentPosition) {
bind.sessionPeerOption(
sessionId: widget.ffi.sessionId,
name: kOptionRemoteMenubarEdge,
value: _toolbarEdgeToString(nextEdge),
);
bind.sessionPeerOption(
sessionId: widget.ffi.sessionId,
name: kOptionRemoteMenubarFraction,
value: nextFraction.toString(),
);
}
}
void _syncDockingOptionsAfterDragIfNeeded() {
if (!_pendingDockingOptionSync) return;
WidgetsBinding.instance.addPostFrameCallback((_) async {
await _syncDockingOptions(force: false);
});
}
@override
initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
// Use the canonical helper so the option's documented default semantics
// apply (allow-* prefix => default false). Keeping it raw-string would
// diverge from how _OptionCheckBox displays the same key.
_multiEdgeEnabled.value =
mainGetLocalBoolOptionSync(kOptionAllowMultiEdgeToolbarDock);
final savedFraction = await bind.sessionGetOption(
sessionId: widget.ffi.sessionId, arg: kOptionRemoteMenubarFraction);
// Backward compat: legacy horizontal-only position.
final legacyFraction = await bind.sessionGetOption(
sessionId: widget.ffi.sessionId, arg: _legacyRemoteMenubarDragX);
// Only honour a saved edge when the user has opted into multi-edge
// docking. Without the opt-in, the toolbar stays on the top edge.
if (_multiEdgeEnabled.value) {
final edgeStr = await bind.sessionGetOption(
sessionId: widget.ffi.sessionId, arg: kOptionRemoteMenubarEdge);
_edge.value = _parseToolbarEdge(edgeStr);
} else {
_edge.value = _ToolbarEdge.top;
}
final rawFraction = _toolbarRawFraction(
multiEdgeEnabled: _multiEdgeEnabled.value,
edge: _edge.value,
savedFraction: savedFraction,
legacyFraction: legacyFraction,
);
// Clamp to the saved drag-bound contract so a corrupted or out-of-range
// saved value can't bypass it until the user drags again.
final dragLeft = double.tryParse(
bind.mainGetLocalOption(key: kOptionRemoteMenubarDragLeft)) ??
0.0;
final dragRight = double.tryParse(
bind.mainGetLocalOption(key: kOptionRemoteMenubarDragRight)) ??
1.0;
_fraction.value = (double.tryParse(rawFraction) ?? 0.5)
.clamp(dragLeft, dragRight)
.toDouble();
await _syncDockingOptions(force: true);
// Initialize toolbar states (collapse, hide) from session options
widget.state.init(widget.ffi.sessionId);
});
@ -487,6 +538,14 @@ class _RemoteToolbarState extends State<RemoteToolbar> {
});
}
@override
void didUpdateWidget(covariant RemoteToolbar oldWidget) {
super.didUpdateWidget(oldWidget);
WidgetsBinding.instance.addPostFrameCallback((_) async {
await _syncDockingOptions(force: false);
});
}
_debouncerHideProc(int v) {
if (!pin && collapse.isFalse && _isCursorOverImage && _dragging.isFalse) {
collapse.value = true;
@ -601,6 +660,8 @@ class _RemoteToolbarState extends State<RemoteToolbar> {
previewEdge: _previewEdge,
previewFraction: _previewFraction,
toolbarSize: _toolbarSize,
syncDockingOptionsAfterDragIfNeeded:
_syncDockingOptionsAfterDragIfNeeded,
isHorizontal: isHorizontal,
multiEdgeEnabled: _multiEdgeEnabled.value,
toolbarState: widget.state,
@ -2786,6 +2847,7 @@ class _DraggableShowHide extends StatefulWidget {
final Rxn<_ToolbarEdge> previewEdge;
final Rxn<double> previewFraction;
final Rxn<Size> toolbarSize;
final VoidCallback syncDockingOptionsAfterDragIfNeeded;
final bool isHorizontal;
// Whether multi-edge docking is enabled for this session (toggled in
// Settings -> Other). When false, the drag handle slides the toolbar
@ -2807,6 +2869,7 @@ class _DraggableShowHide extends StatefulWidget {
required this.previewEdge,
required this.previewFraction,
required this.toolbarSize,
required this.syncDockingOptionsAfterDragIfNeeded,
required this.isHorizontal,
required this.multiEdgeEnabled,
required this.dragging,
@ -2956,6 +3019,7 @@ class _DraggableShowHideState extends State<_DraggableShowHide> {
widget.previewFraction.value = null;
widget.dragging.value = false;
_resetDragTracking();
widget.syncDockingOptionsAfterDragIfNeeded();
if (newEdge == null || frac == null) return;
widget.edge.value = newEdge;
widget.fraction.value = frac;
@ -2987,6 +3051,7 @@ class _DraggableShowHideState extends State<_DraggableShowHide> {
widget.previewFraction.value = null;
widget.dragging.value = false;
_resetDragTracking();
widget.syncDockingOptionsAfterDragIfNeeded();
}
Widget _buildDraggable(BuildContext context) {

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "كلمة المرور مخفية"),
("preset-password-in-use-tip", "كلمة المرور المحددة مسبقًا قيد الاستخدام"),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "Зададзены пастаянны пароль (скрыты)."),
("preset-password-in-use-tip", "Пададзены пароль цяпер выкарыстоўваецца"),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "永久密码已设置(已隐藏)"),
("preset-password-in-use-tip", "当前使用预设密码"),
("Enable privacy mode", "允许隐私模式"),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "Ein permanentes Passwort wurde festgelegt (ausgeblendet)."),
("preset-password-in-use-tip", "Das voreingestellte Passwort wird derzeit verwendet."),
("Enable privacy mode", "Datenschutzmodus aktivieren"),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -274,5 +274,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("keep-awake-during-incoming-sessions-label", "Keep screen awake during incoming sessions"),
("password-hidden-tip", "Permanent password is set (hidden)."),
("preset-password-in-use-tip", "Preset password is currently in use."),
("allow-remote-toolbar-docking-any-edge-tip", "Allow docking remote toolbar to any window edge"),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "Le mot de passe permanent est défini (masqué)."),
("preset-password-in-use-tip", "Le mot de passe prédéfini est actuellement utilisé."),
("Enable privacy mode", "Activer le mode de confidentialité"),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -654,6 +654,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Accessible devices", "એક્સેસિબલ ઉપકરણો"),
("upgrade_remote_rustdesk_client_to_{}_tip", "રિમોટ ક્લાયન્ટને {} માં અપગ્રેડ કરો"),
("d3d_render_tip", "D3D રેન્ડરિંગ વાપરો"),
("Use D3D rendering", ""),
("Printer", "પ્રિન્ટર"),
("printer-os-requirement-tip", "પ્રિન્ટિંગ માટે Windows જરૂરી છે."),
("printer-requires-installed-{}-client-tip", "આ માટે {} ક્લાયન્ટ ઇન્સ્ટોલ હોવું જોઈએ."),
@ -743,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "સુરક્ષા માટે પાસવર્ડ છુપાવેલ છે."),
("preset-password-in-use-tip", "પ્રીસેટ પાસવર્ડ વપરાશમાં છે."),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -654,6 +654,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Accessible devices", "सुलभ डिवाइस"),
("upgrade_remote_rustdesk_client_to_{}_tip", "रिमोट RustDesk क्लाइंट को संस्करण {} में अपग्रेड करें"),
("d3d_render_tip", "D3D रेंडरिंग का उपयोग करें"),
("Use D3D rendering", ""),
("Printer", "प्रिंटर"),
("printer-os-requirement-tip", "प्रिंटिंग के लिए Windows आवश्यक है।"),
("printer-requires-installed-{}-client-tip", "इसके लिए क्लाइंट साइड पर {} इंस्टॉल होना चाहिए।"),
@ -742,5 +743,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Display Name", "प्रदर्शित नाम"),
("password-hidden-tip", "पासवर्ड सुरक्षा के लिए छिपा हुआ है।"),
("preset-password-in-use-tip", "पूर्व-निर्धारित पासवर्ड उपयोग में है।"),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "Állandó jelszó lett beállítva (rejtett)."),
("preset-password-in-use-tip", "Jelenleg az alapértelmezett jelszót használja."),
("Enable privacy mode", "Adatvédelmi mód aktiválása"),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "È impostata una password permanente (nascosta)."),
("preset-password-in-use-tip", "È attualmente in uso la password preimpostata."),
("Enable privacy mode", "Abilita modalità privacy"),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "永続的なパスワードが設定されています (非表示)"),
("preset-password-in-use-tip", "プリセットパスワードが現在使用されています"),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "영구 비밀번호가 설정되었습니다 (숨김)."),
("preset-password-in-use-tip", "현재 사전 설정된 비밀번호가 사용 중입니다."),
("Enable privacy mode", "개인정보 보호 모드 사용함"),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -654,6 +654,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Accessible devices", "ലഭ്യമായ ഉപകരണങ്ങൾ"),
("upgrade_remote_rustdesk_client_to_{}_tip", "റിമോട്ട് പതിപ്പ് {} ലേക്ക് മാറ്റുക"),
("d3d_render_tip", "D3D റെൻഡറിംഗ് ഉപയോഗിക്കുക"),
("Use D3D rendering", ""),
("Printer", "പ്രിന്റർ"),
("printer-os-requirement-tip", "പ്രിന്റിംഗിന് വിൻഡോസ് വേണം."),
("printer-requires-installed-{}-client-tip", "ഇതിന് {} ക്ലയന്റ് ഇൻസ്റ്റാൾ ചെയ്യണം."),
@ -742,5 +743,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Display Name", "ഡിസ്‌പ്ലേ പേര്"),
("password-hidden-tip", "സുരക്ഷയ്ക്കായി പാസ്‌വേഡ് മറച്ചിരിക്കുന്നു."),
("preset-password-in-use-tip", "പ്രീസെറ്റ് പാസ്‌വേഡ് ഉപയോഗത്തിലാണ്."),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "Er is een permanent wachtwoord ingesteld (verborgen)."),
("preset-password-in-use-tip", "Het basis wachtwoord is momenteel in gebruik."),
("Enable privacy mode", "Privacymodus inschakelen"),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "Ustawiono (ukryto) stare hasło."),
("preset-password-in-use-tip", "Obecnie używane jest hasło domyślne."),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -540,7 +540,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("auto_disconnect_option_tip", "Deconectează automat sesiunile de la distanță după o perioadă de inactivitate."),
("Connection failed due to inactivity", "Conexiunea a eșuat din cauza inactivității"),
("Check for software update on startup", "Verifică actualizări la pornire"),
("upgrade_rustdesk_server_pro_{}_tip", "Versiunea serverului RustDesk Pro este mai mică decât {}. Te rugăm să o actualizezi."),
("upgrade_rustdesk_server_pro_to_{}_tip", "Versiunea serverului RustDesk Pro este mai mică decât {}. Te rugăm să o actualizezi."),
("pull_group_failed_tip", "Sincronizarea grupului a eșuat. Verifică conexiunea la rețea sau autentifică-te din nou."),
("Filter by intersection", "Filtrează prin intersecție"),
("Remove wallpaper during incoming sessions", "Elimină imaginea de fundal în timpul sesiunilor primite"),
@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "Parola este ascunsă din motive de securitate. Fă clic pe pictograma ochiului pentru a o afișa."),
("preset-password-in-use-tip", "Se folosește o parolă prestabilită. Se recomandă setarea unei parole personalizate pentru securitate sporită."),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "Установлен постоянный пароль (скрытый)."),
("preset-password-in-use-tip", "Установленный пароль сейчас используется."),
("Enable privacy mode", "Использовать режим конфиденциальности"),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "Parola gizli"),
("preset-password-in-use-tip", "Önceden ayarlanmış parola kullanılıyor"),
("Enable privacy mode", "Gizlilik modunu etkinleştir"),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", "固定密碼已設定(已隱藏)"),
("preset-password-in-use-tip", "目前正在使用預設密碼"),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}

View file

@ -744,5 +744,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("password-hidden-tip", ""),
("preset-password-in-use-tip", ""),
("Enable privacy mode", ""),
("allow-remote-toolbar-docking-any-edge-tip", ""),
].iter().cloned().collect();
}