From cd73368cb9ff454151e4b3d86ee8611085e32e71 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 1 Jul 2024 00:24:23 +0800 Subject: [PATCH] make clipboard dropped after no sub --- src/server/clipboard_service.rs | 18 +++++++++--------- src/server/service.rs | 8 +++++--- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/server/clipboard_service.rs b/src/server/clipboard_service.rs index ab4952af9..3a782d919 100644 --- a/src/server/clipboard_service.rs +++ b/src/server/clipboard_service.rs @@ -4,12 +4,18 @@ pub use crate::common::{ CONTENT, }; +#[derive(Default)] struct State { ctx: Option, } -impl Default for State { - fn default() -> Self { +impl super::service::Reset for State { + fn reset(&mut self) { + *CONTENT.lock().unwrap() = Default::default(); + self.ctx = None; + } + + fn init(&mut self) { let ctx = match ClipboardContext::new(true) { Ok(ctx) => Some(ctx), Err(err) => { @@ -17,13 +23,7 @@ impl Default for State { None } }; - Self { ctx } - } -} - -impl super::service::Reset for State { - fn reset(&mut self) { - *CONTENT.lock().unwrap() = Default::default(); + self.ctx = ctx; } } diff --git a/src/server/service.rs b/src/server/service.rs index 63c5a89d9..dac975478 100644 --- a/src/server/service.rs +++ b/src/server/service.rs @@ -35,6 +35,7 @@ pub struct ServiceInner> { pub trait Reset { fn reset(&mut self); + fn init(&mut self) {} } pub struct ServiceTmpl>(Arc>>); @@ -266,15 +267,16 @@ impl> ServiceTmpl { while sp.active() { let now = time::Instant::now(); if sp.has_subscribes() { + if !may_reset { + may_reset = true; + state.init(); + } if let Err(err) = callback(sp.clone(), &mut state) { log::error!("Error of {} service: {}", sp.name(), err); thread::sleep(time::Duration::from_millis(MAX_ERROR_TIMEOUT)); #[cfg(windows)] crate::platform::windows::try_change_desktop(); } - if !may_reset { - may_reset = true; - } } else if may_reset { state.reset(); may_reset = false;