mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-06-07 18:02:48 +08:00
right menu to show/hide peer card
Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
parent
fb0c75f188
commit
be74f90334
@ -1,36 +1,73 @@
|
|||||||
|
import 'dart:ui' as ui;
|
||||||
|
|
||||||
|
import 'package:bot_toast/bot_toast.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_hbb/common/widgets/address_book.dart';
|
||||||
import 'package:flutter_hbb/common/widgets/peers_view.dart';
|
import 'package:flutter_hbb/common/widgets/peers_view.dart';
|
||||||
import 'package:flutter_hbb/common/widgets/peer_card.dart';
|
import 'package:flutter_hbb/common/widgets/peer_card.dart';
|
||||||
import 'package:flutter_hbb/consts.dart';
|
import 'package:flutter_hbb/consts.dart';
|
||||||
|
import 'package:flutter_hbb/desktop/widgets/popup_menu.dart';
|
||||||
|
import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart';
|
||||||
|
import 'package:flutter_hbb/desktop/widgets/material_mod_popup_menu.dart'
|
||||||
|
as mod_menu;
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
import '../../common.dart';
|
import '../../common.dart';
|
||||||
import '../../models/platform_model.dart';
|
import '../../models/platform_model.dart';
|
||||||
|
|
||||||
class PeerTabPage extends StatefulWidget {
|
class PeerTabPage extends StatefulWidget {
|
||||||
final List<String> tabs;
|
const PeerTabPage({Key? key}) : super(key: key);
|
||||||
final List<Widget> children;
|
|
||||||
const PeerTabPage({required this.tabs, required this.children, Key? key})
|
|
||||||
: super(key: key);
|
|
||||||
@override
|
@override
|
||||||
State<PeerTabPage> createState() => _PeerTabPageState();
|
State<PeerTabPage> createState() => _PeerTabPageState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class _TabEntry {
|
||||||
|
final String name;
|
||||||
|
final Widget widget;
|
||||||
|
final Function() load;
|
||||||
|
_TabEntry(this.name, this.widget, this.load);
|
||||||
|
}
|
||||||
|
|
||||||
class _PeerTabPageState extends State<PeerTabPage>
|
class _PeerTabPageState extends State<PeerTabPage>
|
||||||
with SingleTickerProviderStateMixin {
|
with SingleTickerProviderStateMixin {
|
||||||
final RxInt _tabIndex = 0.obs;
|
late final RxInt _tabHiddenFlag;
|
||||||
|
late final RxString _currentTab;
|
||||||
|
final List<_TabEntry> entries = [
|
||||||
|
_TabEntry(
|
||||||
|
'Recent Sessions',
|
||||||
|
RecentPeersView(
|
||||||
|
menuPadding: kDesktopMenuPadding,
|
||||||
|
),
|
||||||
|
bind.mainLoadRecentPeers),
|
||||||
|
_TabEntry(
|
||||||
|
'Favorites',
|
||||||
|
FavoritePeersView(
|
||||||
|
menuPadding: kDesktopMenuPadding,
|
||||||
|
),
|
||||||
|
bind.mainLoadFavPeers),
|
||||||
|
_TabEntry(
|
||||||
|
'Discovered',
|
||||||
|
DiscoveredPeersView(
|
||||||
|
menuPadding: kDesktopMenuPadding,
|
||||||
|
),
|
||||||
|
bind.mainDiscover),
|
||||||
|
_TabEntry(
|
||||||
|
'Address Book',
|
||||||
|
const AddressBook(
|
||||||
|
menuPadding: kDesktopMenuPadding,
|
||||||
|
),
|
||||||
|
() => {}),
|
||||||
|
];
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
setPeer();
|
_tabHiddenFlag = (int.tryParse(
|
||||||
super.initState();
|
bind.getLocalFlutterConfig(k: 'hidden-peer-card'),
|
||||||
}
|
radix: 2) ??
|
||||||
|
0)
|
||||||
setPeer() {
|
.obs;
|
||||||
final index = bind.getLocalFlutterConfig(k: 'peer-tab-index');
|
_currentTab = bind.getLocalFlutterConfig(k: 'current-peer-tab').obs;
|
||||||
if (index != '') {
|
adjustTab();
|
||||||
_tabIndex.value = int.parse(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
final uiType = bind.getLocalFlutterConfig(k: 'peer-card-ui-type');
|
final uiType = bind.getLocalFlutterConfig(k: 'peer-card-ui-type');
|
||||||
if (uiType != '') {
|
if (uiType != '') {
|
||||||
@ -38,27 +75,14 @@ class _PeerTabPageState extends State<PeerTabPage>
|
|||||||
? PeerUiType.list
|
? PeerUiType.list
|
||||||
: PeerUiType.grid;
|
: PeerUiType.grid;
|
||||||
}
|
}
|
||||||
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
||||||
// hard code for now
|
// hard code for now
|
||||||
Future<void> _handleTabSelection(int index) async {
|
Future<void> handleTabSelection(String tabName) async {
|
||||||
_tabIndex.value = index;
|
_currentTab.value = tabName;
|
||||||
await bind.setLocalFlutterConfig(k: 'peer-tab-index', v: index.toString());
|
await bind.setLocalFlutterConfig(k: 'current-peer-tab', v: tabName);
|
||||||
switch (index) {
|
entries.firstWhereOrNull((e) => e.name == tabName)?.load();
|
||||||
case 0:
|
|
||||||
bind.mainLoadRecentPeers();
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
bind.mainLoadFavPeers();
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
bind.mainDiscover();
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
|
|
||||||
/// AddressBook initState will refresh ab state
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -80,8 +104,9 @@ class _PeerTabPageState extends State<PeerTabPage>
|
|||||||
child: Row(
|
child: Row(
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Expanded(child: _createSwitchBar(context)),
|
Expanded(
|
||||||
const SizedBox(width: 10),
|
child: visibleContextMenuListener(
|
||||||
|
_createSwitchBar(context))),
|
||||||
const PeerSearchBar(),
|
const PeerSearchBar(),
|
||||||
Offstage(
|
Offstage(
|
||||||
offstage: !isDesktop,
|
offstage: !isDesktop,
|
||||||
@ -97,44 +122,48 @@ class _PeerTabPageState extends State<PeerTabPage>
|
|||||||
|
|
||||||
Widget _createSwitchBar(BuildContext context) {
|
Widget _createSwitchBar(BuildContext context) {
|
||||||
final textColor = Theme.of(context).textTheme.titleLarge?.color;
|
final textColor = Theme.of(context).textTheme.titleLarge?.color;
|
||||||
return ListView(
|
return Obx(() => ListView(
|
||||||
scrollDirection: Axis.horizontal,
|
scrollDirection: Axis.horizontal,
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
controller: ScrollController(),
|
controller: ScrollController(),
|
||||||
children: super.widget.tabs.asMap().entries.map((t) {
|
children: entries.where((e) => !isTabHidden(e.name)).map((t) {
|
||||||
return Obx(() => InkWell(
|
return InkWell(
|
||||||
child: Container(
|
child: Container(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 8),
|
padding: const EdgeInsets.symmetric(horizontal: 8),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: _tabIndex.value == t.key
|
color: _currentTab.value == t.name
|
||||||
? Theme.of(context).backgroundColor
|
? Theme.of(context).backgroundColor
|
||||||
: null,
|
: null,
|
||||||
borderRadius: BorderRadius.circular(isDesktop ? 2 : 6),
|
borderRadius: BorderRadius.circular(isDesktop ? 2 : 6),
|
||||||
),
|
),
|
||||||
child: Align(
|
child: Align(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
child: Text(
|
child: Text(
|
||||||
t.value,
|
translate(t.name),
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
height: 1,
|
height: 1,
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
color:
|
color:
|
||||||
_tabIndex.value == t.key ? textColor : textColor
|
_currentTab.value == t.name ? textColor : textColor
|
||||||
?..withOpacity(0.5)),
|
?..withOpacity(0.5)),
|
||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
onTap: () async => await _handleTabSelection(t.key),
|
onTap: () async => await handleTabSelection(t.name),
|
||||||
));
|
);
|
||||||
}).toList());
|
}).toList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _createPeersView() {
|
Widget _createPeersView() {
|
||||||
final verticalMargin = isDesktop ? 12.0 : 6.0;
|
final verticalMargin = isDesktop ? 12.0 : 6.0;
|
||||||
return Expanded(
|
return Expanded(
|
||||||
child: Obx(() => widget
|
child: Obx(() =>
|
||||||
.children[_tabIndex.value]) //: (to) => _tabIndex.value = to)
|
entries
|
||||||
.marginSymmetric(vertical: verticalMargin),
|
.firstWhereOrNull((e) => e.name == _currentTab.value)
|
||||||
|
?.widget ??
|
||||||
|
visibleContextMenuListener(Center(
|
||||||
|
child: Text(translate('Right click to select tabs')),
|
||||||
|
))).marginSymmetric(vertical: verticalMargin),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,6 +196,81 @@ class _PeerTabPageState extends State<PeerTabPage>
|
|||||||
.toList(),
|
.toList(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isTabHidden(String name) {
|
||||||
|
int index = entries.indexWhere((e) => e.name == name);
|
||||||
|
if (index >= 0) {
|
||||||
|
return _tabHiddenFlag & (1 << index) != 0;
|
||||||
|
}
|
||||||
|
assert(false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
adjustTab() {
|
||||||
|
List<String> visibleTabs =
|
||||||
|
entries.where((e) => !isTabHidden(e.name)).map((e) => e.name).toList();
|
||||||
|
if (visibleTabs.isNotEmpty) {
|
||||||
|
if (!visibleTabs.contains(_currentTab.value)) {
|
||||||
|
handleTabSelection(visibleTabs[0]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_currentTab.value = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget visibleContextMenuListener(Widget child) {
|
||||||
|
return Listener(
|
||||||
|
onPointerDown: (e) {
|
||||||
|
if (e.kind != ui.PointerDeviceKind.mouse) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (e.buttons == 2) {
|
||||||
|
showRightMenu(
|
||||||
|
(CancelFunc cancelFunc) {
|
||||||
|
return visibleContextMenu(cancelFunc);
|
||||||
|
},
|
||||||
|
target: e.position,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: child);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget visibleContextMenu(CancelFunc cancelFunc) {
|
||||||
|
final List<MenuEntryBase> menu = entries.asMap().entries.map((e) {
|
||||||
|
int bitMask = 1 << e.key;
|
||||||
|
return MenuEntrySwitch(
|
||||||
|
switchType: SwitchType.scheckbox,
|
||||||
|
text: translate(e.value.name),
|
||||||
|
getter: () async {
|
||||||
|
return _tabHiddenFlag.value & bitMask == 0;
|
||||||
|
},
|
||||||
|
setter: (show) async {
|
||||||
|
if (show) {
|
||||||
|
_tabHiddenFlag.value &= ~bitMask;
|
||||||
|
} else {
|
||||||
|
_tabHiddenFlag.value |= bitMask;
|
||||||
|
}
|
||||||
|
await bind.setLocalFlutterConfig(
|
||||||
|
k: 'hidden-peer-card',
|
||||||
|
v: _tabHiddenFlag.value.toRadixString(2));
|
||||||
|
cancelFunc();
|
||||||
|
adjustTab();
|
||||||
|
});
|
||||||
|
}).toList();
|
||||||
|
return mod_menu.PopupMenu(
|
||||||
|
items: menu
|
||||||
|
.map((entry) => entry.build(
|
||||||
|
context,
|
||||||
|
const MenuConfig(
|
||||||
|
commonColor: MyTheme.accent,
|
||||||
|
height: 20.0,
|
||||||
|
dividerHeight: 12.0,
|
||||||
|
)))
|
||||||
|
.expand((i) => i)
|
||||||
|
.toList(),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class PeerSearchBar extends StatefulWidget {
|
class PeerSearchBar extends StatefulWidget {
|
||||||
|
@ -121,28 +121,7 @@ class _ConnectionPageState extends State<ConnectionPage>
|
|||||||
])),
|
])),
|
||||||
SliverFillRemaining(
|
SliverFillRemaining(
|
||||||
hasScrollBody: false,
|
hasScrollBody: false,
|
||||||
child: PeerTabPage(
|
child: PeerTabPage().paddingOnly(right: 12.0),
|
||||||
tabs: [
|
|
||||||
translate('Recent Sessions'),
|
|
||||||
translate('Favorites'),
|
|
||||||
translate('Discovered'),
|
|
||||||
translate('Address Book')
|
|
||||||
],
|
|
||||||
children: [
|
|
||||||
RecentPeersView(
|
|
||||||
menuPadding: kDesktopMenuPadding,
|
|
||||||
),
|
|
||||||
FavoritePeersView(
|
|
||||||
menuPadding: kDesktopMenuPadding,
|
|
||||||
),
|
|
||||||
DiscoveredPeersView(
|
|
||||||
menuPadding: kDesktopMenuPadding,
|
|
||||||
),
|
|
||||||
const AddressBook(
|
|
||||||
menuPadding: kDesktopMenuPadding,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
).paddingOnly(right: 12.0),
|
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
).paddingOnly(left: 12.0),
|
).paddingOnly(left: 12.0),
|
||||||
|
@ -75,20 +75,7 @@ class _ConnectionPageState extends State<ConnectionPage> {
|
|||||||
])),
|
])),
|
||||||
SliverFillRemaining(
|
SliverFillRemaining(
|
||||||
hasScrollBody: false,
|
hasScrollBody: false,
|
||||||
child: PeerTabPage(
|
child: PeerTabPage(),
|
||||||
tabs: [
|
|
||||||
translate('Recent Sessions'),
|
|
||||||
translate('Favorites'),
|
|
||||||
translate('Discovered'),
|
|
||||||
translate('Address Book')
|
|
||||||
],
|
|
||||||
children: [
|
|
||||||
RecentPeersView(),
|
|
||||||
FavoritePeersView(),
|
|
||||||
DiscoveredPeersView(),
|
|
||||||
const AddressBook(),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
).marginOnly(top: 2, left: 10, right: 10);
|
).marginOnly(top: 2, left: 10, right: 10);
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", "隐藏连接管理窗口"),
|
("Hide connection management window", "隐藏连接管理窗口"),
|
||||||
("hide_cm_tip", "在只允许密码连接并且只用固定密码的情况下才允许隐藏"),
|
("hide_cm_tip", "在只允许密码连接并且只用固定密码的情况下才允许隐藏"),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", "右键选择选项卡"),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", "Fenster zur Verwaltung der Verbindung verstecken"),
|
("Hide connection management window", "Fenster zur Verwaltung der Verbindung verstecken"),
|
||||||
("hide_cm_tip", "Dies ist nur möglich, wenn der Zugriff nur über ein permanentes Passwort erfolgt."), // Sehr unklar. Muss noch angepasst werden. Original: Allow hiding only if accepting sessions via password and using pernament passw"),
|
("hide_cm_tip", "Dies ist nur möglich, wenn der Zugriff nur über ein permanentes Passwort erfolgt."), // Sehr unklar. Muss noch angepasst werden. Original: Allow hiding only if accepting sessions via password and using pernament passw"),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", "Ocultar ventana de gestión de conexión"),
|
("Hide connection management window", "Ocultar ventana de gestión de conexión"),
|
||||||
("hide_cm_tip", "Permitir ocultar solo si se aceptan sesiones a través de contraseña y usando contraseña permanente"),
|
("hide_cm_tip", "Permitir ocultar solo si se aceptan sesiones a través de contraseña y usando contraseña permanente"),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", "پنهان کردن پنجره مدیریت اتصال"),
|
("Hide connection management window", "پنهان کردن پنجره مدیریت اتصال"),
|
||||||
("hide_cm_tip", "فقط در صورت پذیرفتن جلسات از طریق رمز عبور و استفاده از رمز عبور دائمی، مخفی شدن مجاز است"),
|
("hide_cm_tip", "فقط در صورت پذیرفتن جلسات از طریق رمز عبور و استفاده از رمز عبور دائمی، مخفی شدن مجاز است"),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", "Masquer la fenêtre de gestion des connexions"),
|
("Hide connection management window", "Masquer la fenêtre de gestion des connexions"),
|
||||||
("hide_cm_tip", "Autoriser le masquage uniquement si vous acceptez des sessions via un mot de passe et utilisez un mot de passe permanent"),
|
("hide_cm_tip", "Autoriser le masquage uniquement si vous acceptez des sessions via un mot de passe et utilisez un mot de passe permanent"),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -397,6 +397,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Request access to your device", "Αίτημα πρόσβασης στη συσκευή σας"),
|
("Request access to your device", "Αίτημα πρόσβασης στη συσκευή σας"),
|
||||||
("Hide connection management window", "Απόκρυψη παραθύρου διαχείρισης σύνδεσης"),
|
("Hide connection management window", "Απόκρυψη παραθύρου διαχείρισης σύνδεσης"),
|
||||||
("hide_cm_tip", "Να επιτρέπεται η απόκρυψη, μόνο εάν αποδέχεστε συνδέσεις μέσω κωδικού πρόσβασης και χρησιμοποιείτε μόνιμο κωδικό πρόσβασης"),
|
("hide_cm_tip", "Να επιτρέπεται η απόκρυψη, μόνο εάν αποδέχεστε συνδέσεις μέσω κωδικού πρόσβασης και χρησιμοποιείτε μόνιμο κωδικό πρόσβασης"),
|
||||||
("wayland_experiment_tip", ""),
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", "Nascondi la finestra di gestione delle connessioni"),
|
("Hide connection management window", "Nascondi la finestra di gestione delle connessioni"),
|
||||||
("hide_cm_tip", "Permetti di nascondere solo se si accettano sessioni con password permanente"),
|
("hide_cm_tip", "Permetti di nascondere solo se si accettano sessioni con password permanente"),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", "Скрывать окно управления соединениями"),
|
("Hide connection management window", "Скрывать окно управления соединениями"),
|
||||||
("hide_cm_tip", "Разрешать скрытие случае, если принимаются сеансы по паролю или используется постоянный пароль"),
|
("hide_cm_tip", "Разрешать скрытие случае, если принимаются сеансы по паролю или используется постоянный пароль"),
|
||||||
("wayland_experiment_tip", "Поддержка Wayland находится на экспериментальной стадии, используйте X11, если вам требуется автоматический доступ."),
|
("wayland_experiment_tip", "Поддержка Wayland находится на экспериментальной стадии, используйте X11, если вам требуется автоматический доступ."),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", "Fshih dritaren e menaxhimit të lidhjes"),
|
("Hide connection management window", "Fshih dritaren e menaxhimit të lidhjes"),
|
||||||
("hide_cm_tip", "Kjo është e mundur vetëm nëse aksesi bëhet nëpërmjet një fjalëkalimi të përhershëm"),
|
("hide_cm_tip", "Kjo është e mundur vetëm nëse aksesi bëhet nëpërmjet një fjalëkalimi të përhershëm"),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", "Göm hanteringsfönster"),
|
("Hide connection management window", "Göm hanteringsfönster"),
|
||||||
("hide_cm_tip", "Tillåt att gömma endast om accepterande sessioner med lösenord och permanenta lösenord"),
|
("hide_cm_tip", "Tillåt att gömma endast om accepterande sessioner med lösenord och permanenta lösenord"),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", "Bağlantı yönetimi penceresini gizle"),
|
("Hide connection management window", "Bağlantı yönetimi penceresini gizle"),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", "隱藏連接管理窗口"),
|
("Hide connection management window", "隱藏連接管理窗口"),
|
||||||
("hide_cm_tip", "在只允許密碼連接並且只用固定密碼的情況下才允許隱藏"),
|
("hide_cm_tip", "在只允許密碼連接並且只用固定密碼的情況下才允許隱藏"),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", "右鍵選擇選項卡"),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -398,5 +398,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Hide connection management window", ""),
|
("Hide connection management window", ""),
|
||||||
("hide_cm_tip", ""),
|
("hide_cm_tip", ""),
|
||||||
("wayland_experiment_tip", ""),
|
("wayland_experiment_tip", ""),
|
||||||
|
("Right click to select tabs", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user