use objc::runtime::Object;
use objc::{class, msg_send, sel, sel_impl};
#[repr(i32)]
#[derive(Debug, PartialEq)]
enum ApplicationActivationPolicy {
Accessory = 1,
Prohibited = 2,
}
pub struct PolicyManager {
initial_policy: i32,
}
impl PolicyManager {
pub fn new() -> Self {
unsafe {
let app: *mut Object = msg_send![class!(NSApplication), sharedApplication];
let initial_policy: i32 = msg_send![app, activationPolicy];
if initial_policy == ApplicationActivationPolicy::Prohibited as i32 {
let new_pol = ApplicationActivationPolicy::Accessory as i32;
let _: () = msg_send![app, setActivationPolicy: new_pol];
}
Self { initial_policy }
}
}
}
impl Drop for PolicyManager {
fn drop(&mut self) {
unsafe {
let app: *mut Object = msg_send![class!(NSApplication), sharedApplication];
let _: () = msg_send![app, setActivationPolicy: self.initial_policy];
}
}
}