make clipboard dropped after no sub

This commit is contained in:
rustdesk 2024-07-01 00:24:23 +08:00
parent 84b5cd70ed
commit cd73368cb9
2 changed files with 14 additions and 12 deletions

View File

@ -4,12 +4,18 @@ pub use crate::common::{
CONTENT, CONTENT,
}; };
#[derive(Default)]
struct State { struct State {
ctx: Option<ClipboardContext>, ctx: Option<ClipboardContext>,
} }
impl Default for State { impl super::service::Reset for State {
fn default() -> Self { fn reset(&mut self) {
*CONTENT.lock().unwrap() = Default::default();
self.ctx = None;
}
fn init(&mut self) {
let ctx = match ClipboardContext::new(true) { let ctx = match ClipboardContext::new(true) {
Ok(ctx) => Some(ctx), Ok(ctx) => Some(ctx),
Err(err) => { Err(err) => {
@ -17,13 +23,7 @@ impl Default for State {
None None
} }
}; };
Self { ctx } self.ctx = ctx;
}
}
impl super::service::Reset for State {
fn reset(&mut self) {
*CONTENT.lock().unwrap() = Default::default();
} }
} }

View File

@ -35,6 +35,7 @@ pub struct ServiceInner<T: Subscriber + From<ConnInner>> {
pub trait Reset { pub trait Reset {
fn reset(&mut self); fn reset(&mut self);
fn init(&mut self) {}
} }
pub struct ServiceTmpl<T: Subscriber + From<ConnInner>>(Arc<RwLock<ServiceInner<T>>>); pub struct ServiceTmpl<T: Subscriber + From<ConnInner>>(Arc<RwLock<ServiceInner<T>>>);
@ -266,15 +267,16 @@ impl<T: Subscriber + From<ConnInner>> ServiceTmpl<T> {
while sp.active() { while sp.active() {
let now = time::Instant::now(); let now = time::Instant::now();
if sp.has_subscribes() { if sp.has_subscribes() {
if !may_reset {
may_reset = true;
state.init();
}
if let Err(err) = callback(sp.clone(), &mut state) { if let Err(err) = callback(sp.clone(), &mut state) {
log::error!("Error of {} service: {}", sp.name(), err); log::error!("Error of {} service: {}", sp.name(), err);
thread::sleep(time::Duration::from_millis(MAX_ERROR_TIMEOUT)); thread::sleep(time::Duration::from_millis(MAX_ERROR_TIMEOUT));
#[cfg(windows)] #[cfg(windows)]
crate::platform::windows::try_change_desktop(); crate::platform::windows::try_change_desktop();
} }
if !may_reset {
may_reset = true;
}
} else if may_reset { } else if may_reset {
state.reset(); state.reset();
may_reset = false; may_reset = false;