use std::sync::{Arc, Mutex, Weak};
use crate::wm::{EverythingClient, IpcError};
static SHARED: Mutex<Weak<EverythingClient>> = Mutex::new(Weak::new());
impl EverythingClient {
pub fn shared() -> Result<Arc<Self>, IpcError> {
let mut guard = SHARED.lock().unwrap();
if let Some(client) = guard.upgrade() {
return Ok(client);
}
let client = Arc::new(Self::new()?);
*guard = Arc::downgrade(&client);
Ok(client)
}
pub unsafe fn shared_quit_join_thread() {
let mut guard = SHARED.lock().unwrap();
if let Some(client) = guard.upgrade() {
*guard = Default::default();
drop(guard);
let client = unsafe { &mut *Arc::as_ptr(&client).cast_mut() };
client.reply_window.quit_join_thread();
}
}
}