From ddc9792d15420a2a3e56cc6b37cc89a064c5013b Mon Sep 17 00:00:00 2001
From: fufesou <shuanglongchen@yeah.net>
Date: Mon, 6 Feb 2023 18:13:17 +0800
Subject: [PATCH] win, translate mode, debug almost done

Signed-off-by: fufesou <shuanglongchen@yeah.net>
---
 Cargo.lock                                    | 28 ++-----------------
 Cargo.toml                                    |  2 +-
 .../lib/desktop/widgets/remote_menubar.dart   |  6 ++++
 src/keyboard.rs                               |  9 ++----
 src/server/input_service.rs                   |  1 -
 src/ui_session_interface.rs                   | 11 ++------
 6 files changed, 14 insertions(+), 43 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 4ac2720be..988363019 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1556,7 +1556,7 @@ dependencies = [
  "log",
  "objc",
  "pkg-config",
- "rdev 0.5.0-2 (git+https://github.com/fufesou/rdev)",
+ "rdev",
  "serde 1.0.149",
  "serde_derive",
  "tfc",
@@ -4404,29 +4404,7 @@ dependencies = [
 [[package]]
 name = "rdev"
 version = "0.5.0-2"
-dependencies = [
- "cocoa",
- "core-foundation 0.9.3",
- "core-foundation-sys 0.8.3",
- "core-graphics 0.22.3",
- "enum-map",
- "epoll",
- "inotify",
- "lazy_static",
- "libc",
- "log",
- "mio 0.8.5",
- "strum 0.24.1",
- "strum_macros 0.24.3",
- "widestring 1.0.2",
- "winapi 0.3.9",
- "x11 2.20.1",
-]
-
-[[package]]
-name = "rdev"
-version = "0.5.0-2"
-source = "git+https://github.com/fufesou/rdev#238c9778da40056e2efda1e4264355bc89fb6358"
+source = "git+https://github.com/fufesou/rdev#77b45e9e43f713851874c7fbb8e7149ab4f2e6a1"
 dependencies = [
  "cocoa",
  "core-foundation 0.9.3",
@@ -4731,7 +4709,7 @@ dependencies = [
  "objc",
  "objc_id",
  "parity-tokio-ipc",
- "rdev 0.5.0-2",
+ "rdev",
  "repng",
  "reqwest",
  "rpassword 7.2.0",
diff --git a/Cargo.toml b/Cargo.toml
index 5d75b7a23..936b9e349 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -63,7 +63,7 @@ default-net = { git = "https://github.com/Kingtous/default-net" }
 wol-rs = "0.9.1"
 flutter_rust_bridge = { version = "1.61.1", optional = true }
 errno = "0.2.8"
-rdev = { path = "../rdev" }
+rdev = { git = "https://github.com/fufesou/rdev" }
 url = { version = "2.1", features = ["serde"] }
 
 reqwest = { version = "0.11", features = ["blocking", "json", "rustls-tls"], default-features=false }
diff --git a/flutter/lib/desktop/widgets/remote_menubar.dart b/flutter/lib/desktop/widgets/remote_menubar.dart
index 4fd702ad8..c3c8ce3fe 100644
--- a/flutter/lib/desktop/widgets/remote_menubar.dart
+++ b/flutter/lib/desktop/widgets/remote_menubar.dart
@@ -1391,6 +1391,12 @@ class _RemoteMenubarState extends State<RemoteMenubar> {
           for (KeyboardModeMenu mode in modes) {
             if (bind.sessionIsKeyboardModeSupported(
                 id: widget.id, mode: mode.key)) {
+              if (mode.key == 'translate') {
+                if (!Platform.isWindows ||
+                    widget.ffi.ffiModel.pi.platform != kPeerPlatformWindows) {
+                  continue;
+                }
+              }
               list.add(MenuEntryRadioOption(
                   text: translate(mode.menu), value: mode.key));
             }
diff --git a/src/keyboard.rs b/src/keyboard.rs
index 08ab23b1b..fd9514427 100644
--- a/src/keyboard.rs
+++ b/src/keyboard.rs
@@ -210,8 +210,8 @@ pub fn start_grab_loop() {
             if KEYBOARD_HOOKED.load(Ordering::SeqCst) {
                 let keyboard_mode = client::process_event(&event, None);
                 if keyboard_mode == KeyboardMode::Translate {
-                    // shift
-                    if event.scan_code == 0x2A {
+                    // SHIFT(0x2A) RSHIFT(0x36)
+                    if event.scan_code == 0x2A || event.scan_code == 0x36 {
                         return Some(event);
                     }
                 }
@@ -396,11 +396,6 @@ pub fn event_to_key_events(event: &Event, keyboard_mode: KeyboardMode, lock_mode
         }
     }
 
-    println!(
-        "REMOVE ME ========================= key_events {:?}",
-        &key_events
-    );
-
     key_events
 }
 
diff --git a/src/server/input_service.rs b/src/server/input_service.rs
index 072ef53fb..1d7d4773d 100644
--- a/src/server/input_service.rs
+++ b/src/server/input_service.rs
@@ -1070,7 +1070,6 @@ fn legacy_keyboard_mode(evt: &KeyEvent) {
 fn translate_keyboard_mode(evt: &KeyEvent) {
     match evt.union {
         Some(key_event::Union::Unicode(unicode)) => {
-            println!("REMOVE ME ========================= simulate_unicode {}", unicode);
             allow_err!(rdev::simulate_unicode(unicode as _));
         },
         Some(key_event::Union::Chr(..)) => {
diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs
index 3801eda67..12412d7cd 100644
--- a/src/ui_session_interface.rs
+++ b/src/ui_session_interface.rs
@@ -364,14 +364,8 @@ impl<T: InvokeUiSession> Session<T> {
         #[cfg(target_os = "windows")]
         {
             match &self.lc.read().unwrap().keyboard_mode as _ {
-                "legacy" => {
-                    println!("REMOVE ME =========================== enter legacy ");
-                    rdev::set_get_key_name(true);
-                }
-                "translate" => {
-                    println!("REMOVE ME =========================== enter translate ");
-                    rdev::set_get_key_name(true);
-                }
+                "legacy" => rdev::set_get_key_name(true),
+                "translate" => rdev::set_get_key_name(true),
                 _ => {}
             }
         }
@@ -383,7 +377,6 @@ impl<T: InvokeUiSession> Session<T> {
     pub fn leave(&self) {
         #[cfg(target_os = "windows")]
         {
-            println!("REMOVE ME =========================== leave ");
             rdev::set_get_key_name(false);
         }
         IS_IN.store(false, Ordering::SeqCst);