fix default keyboard mode when changing version

This commit is contained in:
Asur4s 2023-01-11 23:38:05 +08:00
parent a3769ca8e9
commit 3102a24166
3 changed files with 18 additions and 6 deletions

View File

@ -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

View File

@ -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> {
KeyboardMode::iter()
.filter(|&mode| is_keyboard_mode_supported(mode, version))
.map(|&mode| mode)
.collect::<Vec<_>>()
}
#[cfg(not(target_os = "linux"))]
lazy_static::lazy_static! {
pub static ref IS_X11: Mutex<bool> = Mutex::new(false);

View File

@ -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<T: InvokeUiSession> Session<T> {
pub fn get_supported_keyboard_modes(&self) -> Vec<KeyboardMode> {
let version = self.get_peer_version();
KeyboardMode::iter()
.filter(|&mode| is_keyboard_mode_supported(mode, version))
.map(|&mode| mode)
.collect::<Vec<_>>()
common::get_supported_keyboard_modes(version)
}
pub fn remove_port_forward(&self, port: i32) {