fix, RwLock, remove nested read calls

Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
fufesou
2023-09-17 13:01:27 +08:00
parent a1e1f5aab6
commit ae3efa1151
4 changed files with 69 additions and 87 deletions

View File

@@ -1,5 +1,3 @@
use hbb_common::config::Config;
#[cfg(not(any(target_os = "android", target_os = "ios")))]
use crate::common::get_default_sound_input;
use crate::{
@@ -293,12 +291,12 @@ pub fn session_get_keyboard_mode(session_id: SessionID) -> Option<String> {
pub fn session_set_keyboard_mode(session_id: SessionID, value: String) {
let mut _mode_updated = false;
if let Some(session) = SESSIONS.write().unwrap().get_mut(&session_id) {
session.save_keyboard_mode(value);
session.save_keyboard_mode(value.clone());
_mode_updated = true;
}
#[cfg(windows)]
if _mode_updated {
crate::keyboard::update_grab_get_key_name();
crate::keyboard::update_grab_get_key_name(&value);
}
}
@@ -378,7 +376,9 @@ pub fn session_handle_flutter_key_event(
down_or_up: bool,
) {
if let Some(session) = SESSIONS.read().unwrap().get(&session_id) {
let keyboard_mode = session.get_keyboard_mode();
session.handle_flutter_key_event(
&keyboard_mode,
&name,
platform_code,
position_code,
@@ -397,11 +397,12 @@ pub fn session_handle_flutter_key_event(
pub fn session_enter_or_leave(_session_id: SessionID, _enter: bool) -> SyncReturn<()> {
#[cfg(not(any(target_os = "android", target_os = "ios")))]
if let Some(session) = SESSIONS.read().unwrap().get(&_session_id) {
let keyboard_mode = session.get_keyboard_mode();
if _enter {
set_cur_session_id(_session_id);
session.enter();
set_cur_session_id_(_session_id, &keyboard_mode);
session.enter(&keyboard_mode);
} else {
session.leave();
session.leave(&keyboard_mode);
}
}
SyncReturn(())
@@ -1509,9 +1510,15 @@ pub fn main_update_me() -> SyncReturn<bool> {
}
pub fn set_cur_session_id(session_id: SessionID) {
if let Some(session) = SESSIONS.read().unwrap().get(&session_id) {
set_cur_session_id_(session_id, &session.get_keyboard_mode())
}
}
fn set_cur_session_id_(session_id: SessionID, keyboard_mode: &str) {
super::flutter::set_cur_session_id(session_id);
#[cfg(windows)]
crate::keyboard::update_grab_get_key_name();
crate::keyboard::update_grab_get_key_name(keyboard_mode);
}
pub fn install_show_run_without_install() -> SyncReturn<bool> {