use std::sync::Mutex;
type ActionCallback = Box<dyn Fn() + Send + Sync>;
struct WindowActions {
drag: Option<ActionCallback>,
minimize: Option<ActionCallback>,
maximize: Option<ActionCallback>,
close: Option<ActionCallback>,
}
static ACTIONS: Mutex<WindowActions> = Mutex::new(WindowActions {
drag: None,
minimize: None,
maximize: None,
close: None,
});
pub fn set_active_window_actions(
drag: impl Fn() + Send + Sync + 'static,
minimize: impl Fn() + Send + Sync + 'static,
maximize: impl Fn() + Send + Sync + 'static,
close: impl Fn() + Send + Sync + 'static,
) {
if let Ok(mut actions) = ACTIONS.lock() {
actions.drag = Some(Box::new(drag));
actions.minimize = Some(Box::new(minimize));
actions.maximize = Some(Box::new(maximize));
actions.close = Some(Box::new(close));
}
}
pub fn drag_window() {
if let Ok(actions) = ACTIONS.lock() {
if let Some(ref f) = actions.drag {
f();
}
}
}
pub fn minimize_window() {
if let Ok(actions) = ACTIONS.lock() {
if let Some(ref f) = actions.minimize {
f();
}
}
}
pub fn maximize_window() {
if let Ok(actions) = ACTIONS.lock() {
if let Some(ref f) = actions.maximize {
f();
}
}
}
pub fn close_window() {
if let Ok(actions) = ACTIONS.lock() {
if let Some(ref f) = actions.close {
f();
}
}
}