From 1b0fb5132c2dc00a38ce43efe19029301756f575 Mon Sep 17 00:00:00 2001 From: Asura Date: Sat, 23 Jul 2022 20:51:01 +0800 Subject: [PATCH] Support switching keyboard mode by UI --- src/lang/cn.rs | 2 ++ src/ui/common.tis | 90 +++++++++++++++++++++++++++++++++++++++++++++++ src/ui/header.tis | 31 ++++++++++++++++ src/ui/remote.rs | 17 ++++++--- 4 files changed, 136 insertions(+), 4 deletions(-) diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 6e3d4d067..c1ee5d305 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -300,5 +300,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Activate onetime password", "激活一次性访问功能"), ("Set security password", "设置安全密码"), ("Connection not allowed", "对方不允许连接"), + ("Legacy mode", "传统模式"), + ("Map mode", "1:1传输"), ].iter().cloned().collect(); } diff --git a/src/ui/common.tis b/src/ui/common.tis index aae950c2d..8a0beef98 100644 --- a/src/ui/common.tis +++ b/src/ui/common.tis @@ -155,6 +155,96 @@ var svg_send = var svg_chat = ; +var svg_keyboard = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +; function scrollToBottom(el) { var y = el.box(#height, #content) - el.box(#height, #client); diff --git a/src/ui/header.tis b/src/ui/header.tis index 35a132c90..8cce3e18a 100644 --- a/src/ui/header.tis +++ b/src/ui/header.tis @@ -139,11 +139,22 @@ class Header: Reactor.Component { {svg_chat} {svg_action} {svg_display} + {svg_keyboard} + {this.renderKeyboardPop()} {this.renderDisplayPop()} {this.renderActionPop()} ; } + function renderKeyboardPop(){ + return + +
  • {svg_checkmark}{translate('Legacy mode')}
  • +
  • {svg_checkmark}{translate('Map mode')}
  • + +
    ; + } + function renderDisplayPop() { return @@ -252,6 +263,11 @@ class Header: Reactor.Component { me.popup(menu); } + event click $(#keyboard) (_, me) { + var menu = $(menu#keyboard-options); + me.popup(menu); + } + event click $(#screen) (_, me) { if (pi.current_display == me.index) return; handler.switch_display(me.index); @@ -332,6 +348,16 @@ class Header: Reactor.Component { toggleMenuState(); } } + + event click $(menu#keyboard-options>li) (_, me) { + stdout.println(me.id); + if (me.id == "legacy") { + handler.save_keyboard_mode("legacy"); + } else if (me.id == "map") { + handler.save_keyboard_mode("map"); + } + toggleMenuState() + } } function handle_custom_image_quality() { @@ -355,9 +381,14 @@ function toggleMenuState() { var s = handler.get_view_style(); if (!s) s = "original"; values.push(s); + var k = handler.get_keyboard_mode(); + values.push(k); for (var el in $$(menu#display-options>li)) { el.attributes.toggleClass("selected", values.indexOf(el.id) >= 0); } + 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"]) { var el = self.select('#' + id); if (el) { diff --git a/src/ui/remote.rs b/src/ui/remote.rs index ef14ef42e..f68d76e1b 100644 --- a/src/ui/remote.rs +++ b/src/ui/remote.rs @@ -233,6 +233,8 @@ impl sciter::EventHandler for Handler { fn get_remember(); fn peer_platform(); fn set_write_override(i32, i32, bool, bool, bool); + fn get_keyboard_mode(); + fn save_keyboard_mode(String); } } @@ -347,6 +349,16 @@ impl Handler { return self.lc.read().unwrap().image_quality.clone(); } + fn get_keyboard_mode(&mut self) -> String { + return std::env::var("KEYBOARD_MODE") + .unwrap_or(String::from("legacy")) + .to_lowercase(); + } + + fn save_keyboard_mode(&mut self, value: String) { + std::env::set_var("KEYBOARD_MODE", value); + } + fn get_custom_image_quality(&mut self) -> Value { let mut v = Value::array(0); for x in self.lc.read().unwrap().custom_image_quality.iter() { @@ -1273,10 +1285,7 @@ impl Handler { fn key_down_or_up(&mut self, down_or_up: bool, key: RdevKey, evt: Event) { // Call different functions according to keyboard mode. - let mode = match std::env::var("KEYBOARD_MODE") - .unwrap_or(String::from("legacy")).to_lowercase() - .as_str() - { + let mode = match self.get_keyboard_mode().as_str() { "map" => KeyboardMode::Map, "legacy" => KeyboardMode::Legacy, _ => KeyboardMode::Legacy,