change update_clipboard to threaded, since creating a context may take long
This commit is contained in:
parent
25d0ced8ba
commit
1f129e6ef3
38
Cargo.lock
generated
38
Cargo.lock
generated
@ -967,10 +967,24 @@ dependencies = [
|
|||||||
"serde_derive",
|
"serde_derive",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"utf16string",
|
"utf16string",
|
||||||
"x11-clipboard",
|
"x11-clipboard 0.8.1",
|
||||||
"x11rb 0.12.0",
|
"x11rb 0.12.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clipboard-master"
|
||||||
|
version = "4.0.0-beta.6"
|
||||||
|
source = "git+https://github.com/rustdesk-org/clipboard-master#38c0a5c0e5e0cab48abf1209900e3543487fc474"
|
||||||
|
dependencies = [
|
||||||
|
"objc",
|
||||||
|
"objc-foundation",
|
||||||
|
"objc_id",
|
||||||
|
"windows-win",
|
||||||
|
"wl-clipboard-rs",
|
||||||
|
"x11-clipboard 0.9.2",
|
||||||
|
"x11rb 0.13.1",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clipboard-win"
|
name = "clipboard-win"
|
||||||
version = "5.3.1"
|
version = "5.3.1"
|
||||||
@ -5456,6 +5470,7 @@ dependencies = [
|
|||||||
"cidr-utils",
|
"cidr-utils",
|
||||||
"clap 4.5.8",
|
"clap 4.5.8",
|
||||||
"clipboard",
|
"clipboard",
|
||||||
|
"clipboard-master",
|
||||||
"cocoa 0.24.1",
|
"cocoa 0.24.1",
|
||||||
"core-foundation 0.9.4",
|
"core-foundation 0.9.4",
|
||||||
"core-graphics 0.22.3",
|
"core-graphics 0.22.3",
|
||||||
@ -5532,7 +5547,7 @@ dependencies = [
|
|||||||
"winreg 0.11.0",
|
"winreg 0.11.0",
|
||||||
"winres",
|
"winres",
|
||||||
"wol-rs",
|
"wol-rs",
|
||||||
"x11-clipboard",
|
"x11-clipboard 0.8.1",
|
||||||
"x11rb 0.12.0",
|
"x11rb 0.12.0",
|
||||||
"zip",
|
"zip",
|
||||||
]
|
]
|
||||||
@ -7571,6 +7586,15 @@ dependencies = [
|
|||||||
"windows-targets 0.52.5",
|
"windows-targets 0.52.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-win"
|
||||||
|
version = "3.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "58e23e33622b3b52f948049acbec9bcc34bf6e26d74176b88941f213c75cf2dc"
|
||||||
|
dependencies = [
|
||||||
|
"error-code",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_aarch64_gnullvm"
|
name = "windows_aarch64_gnullvm"
|
||||||
version = "0.42.2"
|
version = "0.42.2"
|
||||||
@ -7862,6 +7886,16 @@ dependencies = [
|
|||||||
"x11rb 0.12.0",
|
"x11rb 0.12.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "x11-clipboard"
|
||||||
|
version = "0.9.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b98785a09322d7446e28a13203d2cae1059a0dd3dfb32cb06d0a225f023d8286"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"x11rb 0.13.1",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "x11-dl"
|
name = "x11-dl"
|
||||||
version = "2.21.0"
|
version = "2.21.0"
|
||||||
|
@ -91,6 +91,8 @@ clipboard = { path = "libs/clipboard" }
|
|||||||
ctrlc = "3.2"
|
ctrlc = "3.2"
|
||||||
# arboard = { version = "3.4.0", features = ["wayland-data-control"] }
|
# arboard = { version = "3.4.0", features = ["wayland-data-control"] }
|
||||||
arboard = { git = "https://github.com/rustdesk-org/arboard", features = ["wayland-data-control"] }
|
arboard = { git = "https://github.com/rustdesk-org/arboard", features = ["wayland-data-control"] }
|
||||||
|
clipboard-master = { git = "https://github.com/rustdesk-org/clipboard-master"}
|
||||||
|
|
||||||
system_shutdown = "4.0"
|
system_shutdown = "4.0"
|
||||||
qrcode-generator = "4.1"
|
qrcode-generator = "4.1"
|
||||||
|
|
||||||
|
@ -144,8 +144,8 @@ const PUBLIC_SERVER: &str = "public";
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
pub fn get_old_clipboard_text() -> &'static Arc<Mutex<String>> {
|
pub fn get_old_clipboard_text() -> Arc<Mutex<String>> {
|
||||||
&OLD_CLIPBOARD_TEXT
|
OLD_CLIPBOARD_TEXT.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
|
@ -1180,7 +1180,7 @@ impl<T: InvokeUiSession> Remote<T> {
|
|||||||
Some(message::Union::Clipboard(cb)) => {
|
Some(message::Union::Clipboard(cb)) => {
|
||||||
if !self.handler.lc.read().unwrap().disable_clipboard.v {
|
if !self.handler.lc.read().unwrap().disable_clipboard.v {
|
||||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
update_clipboard(cb, Some(&crate::client::get_old_clipboard_text()));
|
update_clipboard(cb, Some(crate::client::get_old_clipboard_text()));
|
||||||
#[cfg(any(target_os = "android", target_os = "ios"))]
|
#[cfg(any(target_os = "android", target_os = "ios"))]
|
||||||
{
|
{
|
||||||
let content = if cb.compress {
|
let content = if cb.compress {
|
||||||
|
@ -364,7 +364,7 @@ pub fn get_default_sound_input() -> Option<String> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
pub fn update_clipboard(clipboard: Clipboard, old: Option<&Arc<Mutex<String>>>) {
|
fn update_clipboard_(clipboard: Clipboard, old: Option<Arc<Mutex<String>>>) {
|
||||||
let content = if clipboard.compress {
|
let content = if clipboard.compress {
|
||||||
decompress(&clipboard.content)
|
decompress(&clipboard.content)
|
||||||
} else {
|
} else {
|
||||||
@ -378,7 +378,7 @@ pub fn update_clipboard(clipboard: Clipboard, old: Option<&Arc<Mutex<String>>>)
|
|||||||
match ClipboardContext::new() {
|
match ClipboardContext::new() {
|
||||||
Ok(mut ctx) => {
|
Ok(mut ctx) => {
|
||||||
let side = if old.is_none() { "host" } else { "client" };
|
let side = if old.is_none() { "host" } else { "client" };
|
||||||
let old = if let Some(old) = old { old } else { &CONTENT };
|
let old = if let Some(old) = old { old } else { CONTENT.clone() };
|
||||||
*old.lock().unwrap() = content.clone();
|
*old.lock().unwrap() = content.clone();
|
||||||
let _lock = ARBOARD_MTX.lock().unwrap();
|
let _lock = ARBOARD_MTX.lock().unwrap();
|
||||||
allow_err!(ctx.set_text(content));
|
allow_err!(ctx.set_text(content));
|
||||||
@ -391,6 +391,13 @@ pub fn update_clipboard(clipboard: Clipboard, old: Option<&Arc<Mutex<String>>>)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
|
pub fn update_clipboard(clipboard: Clipboard, old: Option<Arc<Mutex<String>>>) {
|
||||||
|
std::thread::spawn(move || {
|
||||||
|
update_clipboard_(clipboard, old);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "use_rubato")]
|
#[cfg(feature = "use_rubato")]
|
||||||
pub fn resample_channels(
|
pub fn resample_channels(
|
||||||
data: &[f32],
|
data: &[f32],
|
||||||
@ -1519,6 +1526,8 @@ impl ClipboardContext {
|
|||||||
#[inline]
|
#[inline]
|
||||||
#[cfg(any(target_os = "windows", target_os = "macos"))]
|
#[cfg(any(target_os = "windows", target_os = "macos"))]
|
||||||
pub fn new() -> ResultType<ClipboardContext> {
|
pub fn new() -> ResultType<ClipboardContext> {
|
||||||
|
let x: Option<()> = None;
|
||||||
|
x.unwrap();
|
||||||
Ok(ClipboardContext(arboard::Clipboard::new()?))
|
Ok(ClipboardContext(arboard::Clipboard::new()?))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1543,13 +1552,6 @@ impl ClipboardContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
|
||||||
#[cfg(any(target_os = "windows", target_os = "macos"))]
|
|
||||||
pub fn get_text(&mut self) -> ResultType<String> {
|
|
||||||
Ok(self.0.get_text()?)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
|
||||||
pub fn get_text(&mut self) -> ResultType<String> {
|
pub fn get_text(&mut self) -> ResultType<String> {
|
||||||
Ok(self.0.get_text()?)
|
Ok(self.0.get_text()?)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user