diff --git a/flutter/lib/desktop/widgets/remote_menubar.dart b/flutter/lib/desktop/widgets/remote_menubar.dart
index 4f9a227bd..329df4e19 100644
--- a/flutter/lib/desktop/widgets/remote_menubar.dart
+++ b/flutter/lib/desktop/widgets/remote_menubar.dart
@@ -895,6 +895,7 @@ class _DisplayMenuState extends State<_DisplayMenu> {
disableClipboard(),
lockAfterSessionEnd(),
privacyMode(),
+ swapKey(),
]);
}
@@ -1501,6 +1502,23 @@ class _DisplayMenuState extends State<_DisplayMenu> {
ffi: widget.ffi,
child: Text(translate('Privacy mode')));
}
+
+ swapKey() {
+ final visible = perms['keyboard'] != false &&
+ ((Platform.isMacOS && pi.platform != kPeerPlatformMacOS) ||
+ (!Platform.isMacOS && pi.platform == kPeerPlatformMacOS));
+ if (!visible) return Offstage();
+ final option = 'allow_swap_key';
+ final value = bind.sessionGetToggleOptionSync(id: widget.id, arg: option);
+ return _CheckboxMenuButton(
+ value: value,
+ onChanged: (value) {
+ if (value == null) return;
+ bind.sessionToggleOption(id: widget.id, value: option);
+ },
+ ffi: widget.ffi,
+ child: Text(translate('Swap control-command key')));
+ }
}
class _KeyboardMenu extends StatelessWidget {
diff --git a/src/ui/header.tis b/src/ui/header.tis
index 01808a156..257ba417e 100644
--- a/src/ui/header.tis
+++ b/src/ui/header.tis
@@ -156,7 +156,6 @@ class Header: Reactor.Component {
{svg_checkmark}{translate('Legacy mode')}
{svg_checkmark}{translate('Map mode')}
- {svg_checkmark}{translate('Swap Control-Command Key')}
;
}
@@ -199,6 +198,7 @@ class Header: Reactor.Component {
{keyboard_enabled && clipboard_enabled ? {svg_checkmark}{translate('Disable clipboard')} : ""}
{keyboard_enabled ? {svg_checkmark}{translate('Lock after session end')} : ""}
{keyboard_enabled && pi.platform == "Windows" ? {svg_checkmark}{translate('Privacy mode')} : ""}
+ {keyboard_enabled && ((is_osx && pi.platform != "Mac OS") || (!is_osx && pi.platform == "Mac OS")) ? {svg_checkmark}{translate('Swap control-command key')} : ""}
;
}
@@ -441,7 +441,7 @@ function toggleMenuState() {
for (var el in $$(menu#keyboard-options>li)) {
el.attributes.toggleClass("selected", values.indexOf(el.id) >= 0);
}
- for (var id in ["show-remote-cursor", "show-quality-monitor", "disable-audio", "enable-file-transfer", "disable-clipboard", "lock-after-session-end"]) {
+ for (var id in ["show-remote-cursor", "show-quality-monitor", "disable-audio", "enable-file-transfer", "disable-clipboard", "lock-after-session-end", "allow_swap_key"]) {
var el = self.select('#' + id);
if (el) {
var value = handler.get_toggle_option(id);
diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs
index 37367c191..f764aa3ed 100644
--- a/src/ui_session_interface.rs
+++ b/src/ui_session_interface.rs
@@ -1010,6 +1010,7 @@ impl Interface for Session {
handle_test_delay(t, peer).await;
}
}
+
fn swap_modifier_mouse(&self, msg : &mut hbb_common::protos::message::MouseEvent) {
let allow_swap_key = self.get_toggle_option("allow_swap_key".to_string());
if allow_swap_key {