make clipboard dropped after no sub
This commit is contained in:
parent
84b5cd70ed
commit
cd73368cb9
@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user