fix conflict
This commit is contained in:
parent
95775678ca
commit
49bcf8f794
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -4229,7 +4229,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "rdev"
|
name = "rdev"
|
||||||
version = "0.5.0-2"
|
version = "0.5.0-2"
|
||||||
source = "git+https://github.com/asur4s/rdev#fdcee04f10ea0ef00d36aa612eabb9605ae9f2fc"
|
source = "git+https://github.com/asur4s/rdev#4051761e7ccf434a443b8e9592c23160c9cace56"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cocoa",
|
"cocoa",
|
||||||
"core-foundation 0.9.3",
|
"core-foundation 0.9.3",
|
||||||
|
@ -7,7 +7,7 @@ packages:
|
|||||||
name: _fe_analyzer_shared
|
name: _fe_analyzer_shared
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "50.0.0"
|
version: "49.0.0"
|
||||||
after_layout:
|
after_layout:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -21,7 +21,7 @@ packages:
|
|||||||
name: analyzer
|
name: analyzer
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.2.0"
|
version: "5.1.0"
|
||||||
animations:
|
animations:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -35,7 +35,7 @@ packages:
|
|||||||
name: archive
|
name: archive
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.3.5"
|
version: "3.3.1"
|
||||||
args:
|
args:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -64,6 +64,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.1"
|
version: "6.0.1"
|
||||||
|
bot_toast:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: bot_toast
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.0.3"
|
||||||
build:
|
build:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -77,7 +84,7 @@ packages:
|
|||||||
name: build_config
|
name: build_config
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.1.0"
|
||||||
build_daemon:
|
build_daemon:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -98,14 +105,14 @@ packages:
|
|||||||
name: build_runner
|
name: build_runner
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.2"
|
version: "2.2.1"
|
||||||
build_runner_core:
|
build_runner_core:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: build_runner_core
|
name: build_runner_core
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.2.7"
|
version: "7.2.4"
|
||||||
built_collection:
|
built_collection:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -119,7 +126,7 @@ packages:
|
|||||||
name: built_value
|
name: built_value
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "8.4.2"
|
version: "8.4.1"
|
||||||
cached_network_image:
|
cached_network_image:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -196,7 +203,7 @@ packages:
|
|||||||
name: convert
|
name: convert
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.0"
|
version: "3.0.2"
|
||||||
cross_file:
|
cross_file:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -257,8 +264,8 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: bf278fc8a8ff787e46fa3ab97674373bfaa20f23
|
ref: "82f9eab81cb2c7bfb938def7a1b399a6279bbc75"
|
||||||
resolved-ref: bf278fc8a8ff787e46fa3ab97674373bfaa20f23
|
resolved-ref: "82f9eab81cb2c7bfb938def7a1b399a6279bbc75"
|
||||||
url: "https://github.com/Kingtous/rustdesk_desktop_multi_window"
|
url: "https://github.com/Kingtous/rustdesk_desktop_multi_window"
|
||||||
source: git
|
source: git
|
||||||
version: "0.1.0"
|
version: "0.1.0"
|
||||||
@ -345,7 +352,7 @@ packages:
|
|||||||
name: file_picker
|
name: file_picker
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.2.2"
|
version: "5.2.1"
|
||||||
fixnum:
|
fixnum:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -383,8 +390,8 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: dec2166e881c47d922e1edc484d10d2cd5c2103b
|
ref: "74b1b314142b6775c1243067a3503ac568ebc74b"
|
||||||
resolved-ref: dec2166e881c47d922e1edc484d10d2cd5c2103b
|
resolved-ref: "74b1b314142b6775c1243067a3503ac568ebc74b"
|
||||||
url: "https://github.com/Kingtous/rustdesk_flutter_custom_cursor"
|
url: "https://github.com/Kingtous/rustdesk_flutter_custom_cursor"
|
||||||
source: git
|
source: git
|
||||||
version: "0.0.1"
|
version: "0.0.1"
|
||||||
@ -436,7 +443,7 @@ packages:
|
|||||||
name: flutter_svg
|
name: flutter_svg
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.6"
|
version: "1.1.5"
|
||||||
flutter_web_plugins:
|
flutter_web_plugins:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -448,21 +455,21 @@ packages:
|
|||||||
name: freezed
|
name: freezed
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.1"
|
version: "2.1.1"
|
||||||
freezed_annotation:
|
freezed_annotation:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: freezed_annotation
|
name: freezed_annotation
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.0"
|
version: "2.1.0"
|
||||||
frontend_server_client:
|
frontend_server_client:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: frontend_server_client
|
name: frontend_server_client
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.0"
|
version: "2.1.3"
|
||||||
get:
|
get:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -476,21 +483,21 @@ packages:
|
|||||||
name: glob
|
name: glob
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.0"
|
||||||
graphs:
|
graphs:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: graphs
|
name: graphs
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.0"
|
version: "2.1.0"
|
||||||
html:
|
html:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: html
|
name: html
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.15.1"
|
version: "0.15.0"
|
||||||
http:
|
http:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -511,7 +518,7 @@ packages:
|
|||||||
name: http_parser
|
name: http_parser
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.2"
|
version: "4.0.1"
|
||||||
icons_launcher:
|
icons_launcher:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@ -525,7 +532,7 @@ packages:
|
|||||||
name: image
|
name: image
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.2"
|
version: "3.2.0"
|
||||||
image_picker:
|
image_picker:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -595,7 +602,7 @@ packages:
|
|||||||
name: lints
|
name: lints
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.0.0"
|
||||||
logging:
|
logging:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -728,7 +735,7 @@ packages:
|
|||||||
name: path_provider_android
|
name: path_provider_android
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.22"
|
version: "2.0.20"
|
||||||
path_provider_ios:
|
path_provider_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -792,13 +799,6 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.1.3"
|
||||||
pointycastle:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: pointycastle
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "3.6.2"
|
|
||||||
pool:
|
pool:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -819,14 +819,14 @@ packages:
|
|||||||
name: provider
|
name: provider
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.4"
|
version: "6.0.3"
|
||||||
pub_semver:
|
pub_semver:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: pub_semver
|
name: pub_semver
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.1.1"
|
||||||
pubspec_parse:
|
pubspec_parse:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -847,7 +847,7 @@ packages:
|
|||||||
name: rxdart
|
name: rxdart
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.27.7"
|
version: "0.27.5"
|
||||||
screen_retriever:
|
screen_retriever:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -884,7 +884,7 @@ packages:
|
|||||||
name: shelf_web_socket
|
name: shelf_web_socket
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.3"
|
version: "1.0.2"
|
||||||
simple_observable:
|
simple_observable:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -903,7 +903,7 @@ packages:
|
|||||||
name: source_gen
|
name: source_gen
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.6"
|
version: "1.2.5"
|
||||||
source_span:
|
source_span:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -924,7 +924,7 @@ packages:
|
|||||||
name: sqflite_common
|
name: sqflite_common
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.0"
|
version: "2.3.0"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -945,7 +945,7 @@ packages:
|
|||||||
name: stream_transform
|
name: stream_transform
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.0.1"
|
||||||
string_scanner:
|
string_scanner:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1008,7 +1008,7 @@ packages:
|
|||||||
name: uni_links_desktop
|
name: uni_links_desktop
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.3"
|
version: "0.1.4"
|
||||||
uni_links_platform_interface:
|
uni_links_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1036,14 +1036,14 @@ packages:
|
|||||||
name: url_launcher
|
name: url_launcher
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.7"
|
version: "6.1.6"
|
||||||
url_launcher_android:
|
url_launcher_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_android
|
name: url_launcher_android
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.22"
|
version: "6.0.19"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1092,7 +1092,7 @@ packages:
|
|||||||
name: uuid
|
name: uuid
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.7"
|
version: "3.0.6"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1106,7 +1106,7 @@ packages:
|
|||||||
name: video_player
|
name: video_player
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.8"
|
version: "2.4.7"
|
||||||
video_player_android:
|
video_player_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1183,7 +1183,7 @@ packages:
|
|||||||
name: watcher
|
name: watcher
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.0.1"
|
||||||
web_socket_channel:
|
web_socket_channel:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1197,7 +1197,7 @@ packages:
|
|||||||
name: win32
|
name: win32
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.2"
|
version: "3.0.0"
|
||||||
win32_registry:
|
win32_registry:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -285,7 +285,7 @@ pub fn session_handle_flutter_key_event(
|
|||||||
down_or_up: bool,
|
down_or_up: bool,
|
||||||
) {
|
) {
|
||||||
if let Some(session) = SESSIONS.read().unwrap().get(&id) {
|
if let Some(session) = SESSIONS.read().unwrap().get(&id) {
|
||||||
// session.handle_flutter_key_event(&name, keycode, scancode, down_or_up);
|
session.handle_flutter_key_event(&name, keycode, scancode, down_or_up);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
use crate::client::get_key_state;
|
use crate::client::get_key_state;
|
||||||
use crate::common::GrabState;
|
use crate::common::GrabState;
|
||||||
#[cfg(feature = "flutter")]
|
#[cfg(feature = "flutter")]
|
||||||
use crate::flutter::FlutterHandler;
|
use crate::flutter::FlutterHandler;
|
||||||
|
#[cfg(not(feature = "flutter"))]
|
||||||
|
use crate::ui::remote::SciterHandler;
|
||||||
use crate::ui_session_interface::Session;
|
use crate::ui_session_interface::Session;
|
||||||
use hbb_common::{log, message_proto::*};
|
use hbb_common::{log, message_proto::*};
|
||||||
use rdev::{Event, EventType, Key};
|
use rdev::{Event, EventType, Key};
|
||||||
@ -16,10 +19,18 @@ use std::time::SystemTime;
|
|||||||
static mut IS_ALT_GR: bool = false;
|
static mut IS_ALT_GR: bool = false;
|
||||||
pub static KEYBOARD_HOOKED: AtomicBool = AtomicBool::new(false);
|
pub static KEYBOARD_HOOKED: AtomicBool = AtomicBool::new(false);
|
||||||
|
|
||||||
|
lazy_static::lazy_static! {
|
||||||
|
pub static ref GRAB_SENDER: Arc<Mutex<Option<mpsc::Sender<GrabState>>>> = Default::default();
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "flutter")]
|
#[cfg(feature = "flutter")]
|
||||||
lazy_static::lazy_static! {
|
lazy_static::lazy_static! {
|
||||||
pub static ref CUR_SESSION: Arc<Mutex<Option<Session<FlutterHandler>>>> = Default::default();
|
pub static ref CUR_SESSION: Arc<Mutex<Option<Session<FlutterHandler>>>> = Default::default();
|
||||||
pub static ref GRAB_SENDER: Arc<Mutex<Option<mpsc::Sender<GrabState>>>> = Default::default();
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = "flutter"))]
|
||||||
|
lazy_static::lazy_static! {
|
||||||
|
pub static ref CUR_SESSION: Arc<Mutex<Option<Session<SciterHandler>>>> = Default::default();
|
||||||
}
|
}
|
||||||
|
|
||||||
lazy_static::lazy_static! {
|
lazy_static::lazy_static! {
|
||||||
@ -50,19 +61,12 @@ pub mod client {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn save_keyboard_mode(value: String) {
|
|
||||||
release_remote_keys();
|
|
||||||
if let Some(handler) = CUR_SESSION.lock().unwrap().as_mut() {
|
|
||||||
handler.save_keyboard_mode(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn start_grab_loop() {
|
pub fn start_grab_loop() {
|
||||||
let (sender, receiver) = mpsc::channel::<GrabState>();
|
let (sender, receiver) = mpsc::channel::<GrabState>();
|
||||||
unsafe {
|
|
||||||
grab_loop(receiver);
|
grab_loop(receiver);
|
||||||
*GRAB_SENDER.lock().unwrap() = Some(sender);
|
*GRAB_SENDER.lock().unwrap() = Some(sender);
|
||||||
}
|
|
||||||
change_grab_status(GrabState::Ready);
|
change_grab_status(GrabState::Ready);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,11 +74,8 @@ pub mod client {
|
|||||||
if GrabState::Wait == state {
|
if GrabState::Wait == state {
|
||||||
release_remote_keys();
|
release_remote_keys();
|
||||||
}
|
}
|
||||||
unsafe {
|
|
||||||
if let Some(sender) = &*GRAB_SENDER.lock().unwrap() {
|
if let Some(sender) = &*GRAB_SENDER.lock().unwrap() {
|
||||||
log::info!("grab state: {:?}", state);
|
sender.send(state).ok();
|
||||||
sender.send(state);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +84,6 @@ pub mod client {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let key_event = event_to_key_event(&event);
|
let key_event = event_to_key_event(&event);
|
||||||
log::info!("key event: {:?}", key_event);
|
|
||||||
send_key_event(&key_event);
|
send_key_event(&key_event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,8 +103,9 @@ pub mod client {
|
|||||||
let command = *modifiers_lock.get(&Key::MetaLeft).unwrap()
|
let command = *modifiers_lock.get(&Key::MetaLeft).unwrap()
|
||||||
|| *modifiers_lock.get(&Key::MetaRight).unwrap()
|
|| *modifiers_lock.get(&Key::MetaRight).unwrap()
|
||||||
|| command;
|
|| command;
|
||||||
let alt =
|
let alt = *modifiers_lock.get(&Key::Alt).unwrap()
|
||||||
*modifiers_lock.get(&Key::Alt).unwrap() || *modifiers_lock.get(&Key::AltGr).unwrap() || alt;
|
|| *modifiers_lock.get(&Key::AltGr).unwrap()
|
||||||
|
|| alt;
|
||||||
|
|
||||||
(alt, ctrl, shift, command)
|
(alt, ctrl, shift, command)
|
||||||
}
|
}
|
||||||
@ -229,7 +230,7 @@ pub fn grab_loop(recv: mpsc::Receiver<GrabState>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_long_press(event: &Event) -> bool {
|
pub fn is_long_press(event: &Event) -> bool {
|
||||||
let mut keys = MODIFIERS_STATE.lock().unwrap();
|
let keys = MODIFIERS_STATE.lock().unwrap();
|
||||||
match event.event_type {
|
match event.event_type {
|
||||||
EventType::KeyPress(k) => {
|
EventType::KeyPress(k) => {
|
||||||
if let Some(&state) = keys.get(&k) {
|
if let Some(&state) = keys.get(&k) {
|
||||||
@ -251,7 +252,6 @@ pub fn release_remote_keys() {
|
|||||||
for key in keys {
|
for key in keys {
|
||||||
let event_type = EventType::KeyRelease(key);
|
let event_type = EventType::KeyRelease(key);
|
||||||
let event = event_type_to_event(event_type);
|
let event = event_type_to_event(event_type);
|
||||||
log::info!("release key: {:?}", key);
|
|
||||||
client::process_event(event);
|
client::process_event(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -264,6 +264,7 @@ pub fn get_keyboard_mode_enum() -> KeyboardMode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
pub fn add_numlock_capslock_state(key_event: &mut KeyEvent) {
|
pub fn add_numlock_capslock_state(key_event: &mut KeyEvent) {
|
||||||
if get_key_state(enigo::Key::CapsLock) {
|
if get_key_state(enigo::Key::CapsLock) {
|
||||||
key_event.modifiers.push(ControlKey::CapsLock.into());
|
key_event.modifiers.push(ControlKey::CapsLock.into());
|
||||||
@ -273,6 +274,7 @@ pub fn add_numlock_capslock_state(key_event: &mut KeyEvent) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
pub fn convert_numpad_keys(key: Key) -> Key {
|
pub fn convert_numpad_keys(key: Key) -> Key {
|
||||||
if get_key_state(enigo::Key::NumLock) {
|
if get_key_state(enigo::Key::NumLock) {
|
||||||
return key;
|
return key;
|
||||||
@ -337,6 +339,7 @@ pub fn event_to_key_event(event: &Event) -> KeyEvent {
|
|||||||
translate_keyboard_mode(event, &mut key_event);
|
translate_keyboard_mode(event, &mut key_event);
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
legacy_keyboard_mode(event, &mut key_event);
|
legacy_keyboard_mode(event, &mut key_event);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -356,10 +359,8 @@ pub fn event_type_to_event(event_type: EventType) -> Event {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "flutter")]
|
|
||||||
pub fn send_key_event(key_event: &KeyEvent) {
|
pub fn send_key_event(key_event: &KeyEvent) {
|
||||||
if let Some(handler) = CUR_SESSION.lock().unwrap().as_ref() {
|
if let Some(handler) = CUR_SESSION.lock().unwrap().as_ref() {
|
||||||
log::info!("Sending key even {:?}", key_event);
|
|
||||||
handler.send_key_event(key_event);
|
handler.send_key_event(key_event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -373,6 +374,7 @@ pub fn get_peer_platform() -> String {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
pub fn legacy_keyboard_mode(event: &Event, key_event: &mut KeyEvent) {
|
pub fn legacy_keyboard_mode(event: &Event, key_event: &mut KeyEvent) {
|
||||||
// legacy mode(0): Generate characters locally, look for keycode on other side.
|
// legacy mode(0): Generate characters locally, look for keycode on other side.
|
||||||
let (mut key, down_or_up) = match event.event_type {
|
let (mut key, down_or_up) = match event.event_type {
|
||||||
@ -616,4 +618,4 @@ pub fn map_keyboard_mode(event: &Event, key_event: &mut KeyEvent) {
|
|||||||
key_event.set_chr(keycode);
|
key_event.set_chr(keycode);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn translate_keyboard_mode(event: &Event, key_event: &mut KeyEvent) {}
|
pub fn translate_keyboard_mode(_event: &Event, _key_event: &mut KeyEvent) {}
|
||||||
|
@ -764,11 +764,6 @@ fn rdev_key_down_or_up(key: RdevKey, down_or_up: bool) {
|
|||||||
std::thread::sleep(Duration::from_millis(20));
|
std::thread::sleep(Duration::from_millis(20));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rdev_key_click(key: RdevKey) {
|
|
||||||
rdev_key_down_or_up(key, true);
|
|
||||||
rdev_key_down_or_up(key, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn sync_status(evt: &KeyEvent) {
|
fn sync_status(evt: &KeyEvent) {
|
||||||
let mut en = ENIGO.lock().unwrap();
|
let mut en = ENIGO.lock().unwrap();
|
||||||
|
|
||||||
|
@ -4,8 +4,7 @@ use crate::client::{
|
|||||||
load_config, send_mouse, start_video_audio_threads, FileManager, Key, LoginConfigHandler,
|
load_config, send_mouse, start_video_audio_threads, FileManager, Key, LoginConfigHandler,
|
||||||
QualityStatus, KEY_MAP,
|
QualityStatus, KEY_MAP,
|
||||||
};
|
};
|
||||||
#[cfg(target_os = "linux")]
|
use crate::common::GrabState;
|
||||||
use crate::common::IS_X11;
|
|
||||||
use crate::{client::Data, client::Interface};
|
use crate::{client::Data, client::Interface};
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use hbb_common::config::{Config, LocalConfig, PeerConfig};
|
use hbb_common::config::{Config, LocalConfig, PeerConfig};
|
||||||
@ -17,7 +16,8 @@ use std::collections::HashMap;
|
|||||||
use std::ops::{Deref, DerefMut};
|
use std::ops::{Deref, DerefMut};
|
||||||
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
||||||
use std::sync::{Arc, Mutex, RwLock};
|
use std::sync::{Arc, Mutex, RwLock};
|
||||||
|
use crate::keyboard;
|
||||||
|
use rdev::{Event, EventType::*};
|
||||||
pub static IS_IN: AtomicBool = AtomicBool::new(false);
|
pub static IS_IN: AtomicBool = AtomicBool::new(false);
|
||||||
|
|
||||||
#[derive(Clone, Default)]
|
#[derive(Clone, Default)]
|
||||||
@ -292,7 +292,7 @@ impl<T: InvokeUiSession> Session<T> {
|
|||||||
return "".to_owned();
|
return "".to_owned();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send_key_event(&self, mut evt: &KeyEvent) {
|
pub fn send_key_event(&self, evt: &KeyEvent) {
|
||||||
// mode: legacy(0), map(1), translate(2), auto(3)
|
// mode: legacy(0), map(1), translate(2), auto(3)
|
||||||
let mut msg_out = Message::new();
|
let mut msg_out = Message::new();
|
||||||
msg_out.set_key_event(evt.clone());
|
msg_out.set_key_event(evt.clone());
|
||||||
@ -362,6 +362,40 @@ impl<T: InvokeUiSession> Session<T> {
|
|||||||
self.send(Data::Message(msg_out));
|
self.send(Data::Message(msg_out));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn handle_flutter_key_event(
|
||||||
|
&self,
|
||||||
|
name: &str,
|
||||||
|
keycode: i32,
|
||||||
|
scancode: i32,
|
||||||
|
down_or_up: bool,
|
||||||
|
) {
|
||||||
|
if scancode < 0 || keycode < 0 {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let keycode: u32 = keycode as u32;
|
||||||
|
let scancode: u32 = scancode as u32;
|
||||||
|
|
||||||
|
#[cfg(not(target_os = "windows"))]
|
||||||
|
let key = rdev::key_from_scancode(scancode) as rdev::Key;
|
||||||
|
// Windows requires special handling
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
let key = rdev::get_win_key(keycode, scancode);
|
||||||
|
|
||||||
|
let event_type = if down_or_up {
|
||||||
|
KeyPress(key)
|
||||||
|
} else {
|
||||||
|
KeyRelease(key)
|
||||||
|
};
|
||||||
|
let event = Event {
|
||||||
|
time: std::time::SystemTime::now(),
|
||||||
|
name: Option::Some(name.to_owned()),
|
||||||
|
code: keycode as _,
|
||||||
|
scan_code: scancode as _,
|
||||||
|
event_type: event_type,
|
||||||
|
};
|
||||||
|
keyboard::client::process_event(event);
|
||||||
|
}
|
||||||
|
|
||||||
// flutter only TODO new input
|
// flutter only TODO new input
|
||||||
fn _input_key(
|
fn _input_key(
|
||||||
&self,
|
&self,
|
||||||
@ -423,7 +457,6 @@ impl<T: InvokeUiSession> Session<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo! chieh
|
|
||||||
// #[cfg(not(any(target_os = "android", target_os = "ios")))]
|
// #[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
let (alt, ctrl, shift, command) =
|
let (alt, ctrl, shift, command) =
|
||||||
keyboard::client::get_modifiers_state(alt, ctrl, shift, command);
|
keyboard::client::get_modifiers_state(alt, ctrl, shift, command);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user