tauri-plugin-context-menu 0.8.2

Handle native Context Menu in Tauri
Documentation
use std::any::Any;
use std::sync::{Arc, Mutex};
use tauri::{Runtime, Window};

pub struct WindowHolder {
    window: Arc<Mutex<Option<Arc<dyn Any + Send + Sync>>>>,
}

impl WindowHolder {
    pub fn new() -> Self {
        Self {
            window: Arc::new(Mutex::new(None)),
        }
    }

    pub fn set_window<R: Runtime>(&self, window: Window<R>) {
        let mut lock = self.window.lock().unwrap();
        *lock = Some(Arc::new(window));
    }

    pub fn get_window<R: Runtime>(&self) -> Option<Arc<Window<R>>> {
        let lock = self.window.lock().unwrap();
        match &*lock {
            Some(window) => Some(window.clone().downcast::<Window<R>>().unwrap()),
            None => None,
        }
    }
}

lazy_static::lazy_static! {
    pub static ref CURRENT_WINDOW: WindowHolder = WindowHolder::new();
}