use cocoa::appkit::{NSApp, NSApplication, NSApplicationActivationPolicyRegular};
use cocoa::base::{id, nil};
use cocoa::foundation::NSAutoreleasePool;
use crate::util::assert_main_thread;
pub struct RunLoop {
ns_app: id,
}
impl RunLoop {
pub fn new() -> RunLoop {
assert_main_thread();
unsafe {
let _pool = NSAutoreleasePool::new(nil);
let ns_app = NSApp();
ns_app.setActivationPolicy_(NSApplicationActivationPolicyRegular);
RunLoop { ns_app }
}
}
pub fn run(&mut self) {
unsafe {
self.ns_app.run();
}
}
}
pub fn request_quit() {
unsafe {
let () = msg_send![NSApp(), terminate: nil];
}
}
impl Default for RunLoop {
fn default() -> Self {
RunLoop::new()
}
}