From 3102a241667c4cf4345f2896b5cb0654550d6b30 Mon Sep 17 00:00:00 2001 From: Asur4s Date: Wed, 11 Jan 2023 23:38:05 +0800 Subject: [PATCH] fix default keyboard mode when changing version --- src/client.rs | 10 +++++++++- src/common.rs | 7 +++++++ src/ui_session_interface.rs | 7 ++----- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/client.rs b/src/client.rs index 1bb2ff861..fc92c3674 100644 --- a/src/client.rs +++ b/src/client.rs @@ -7,6 +7,7 @@ use cpal::{ use magnum_opus::{Channels::*, Decoder as AudioDecoder}; use sha2::{Digest, Sha256}; use std::{ + str::FromStr, collections::HashMap, net::SocketAddr, ops::{Deref, Not}, @@ -48,7 +49,7 @@ pub mod file_trait; pub mod helper; pub mod io_loop; use crate::{ - common::is_keyboard_mode_supported, + common::{self, is_keyboard_mode_supported}, server::video_service::{SCRAP_X11_REF_URL, SCRAP_X11_REQUIRED}, }; pub static SERVER_KEYBOARD_ENABLED: AtomicBool = AtomicBool::new(true); @@ -1419,6 +1420,13 @@ impl LoginConfigHandler { } else { config.keyboard_mode = KeyboardMode::Legacy.to_string(); } + } else { + let keyboard_modes = + common::get_supported_keyboard_modes(get_version_number(&pi.version)); + let current_mode = &KeyboardMode::from_str(&config.keyboard_mode).unwrap_or_default(); + if !keyboard_modes.contains(current_mode) { + config.keyboard_mode = KeyboardMode::Legacy.to_string(); + } } self.conn_id = pi.conn_id; // no matter if change, for update file time diff --git a/src/common.rs b/src/common.rs index 02b4a0c10..906ea2240 100644 --- a/src/common.rs +++ b/src/common.rs @@ -698,6 +698,13 @@ pub fn is_keyboard_mode_supported(keyboard_mode: &KeyboardMode, version_number: } } +pub fn get_supported_keyboard_modes(version: i64) -> Vec { + KeyboardMode::iter() + .filter(|&mode| is_keyboard_mode_supported(mode, version)) + .map(|&mode| mode) + .collect::>() +} + #[cfg(not(target_os = "linux"))] lazy_static::lazy_static! { pub static ref IS_X11: Mutex = Mutex::new(false); diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index e7ac620ee..33193bd9e 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -4,7 +4,7 @@ use crate::client::{ load_config, send_mouse, start_video_audio_threads, FileManager, Key, LoginConfigHandler, QualityStatus, KEY_MAP, }; -use crate::common::{is_keyboard_mode_supported, GrabState}; +use crate::common::{self, is_keyboard_mode_supported, GrabState}; use crate::keyboard; use crate::{client::Data, client::Interface}; use async_trait::async_trait; @@ -204,10 +204,7 @@ impl Session { pub fn get_supported_keyboard_modes(&self) -> Vec { let version = self.get_peer_version(); - KeyboardMode::iter() - .filter(|&mode| is_keyboard_mode_supported(mode, version)) - .map(|&mode| mode) - .collect::>() + common::get_supported_keyboard_modes(version) } pub fn remove_port_forward(&self, port: i32) {