rfd 0.17.2

Rusty File Dialog
Documentation
use objc2::rc::Retained;
use objc2::MainThreadMarker;
use objc2_app_kit::{NSApplication, NSWindow};

pub struct FocusManager {
    key_window: Option<Retained<NSWindow>>,
}

impl FocusManager {
    pub fn new(mtm: MainThreadMarker) -> Self {
        let app = NSApplication::sharedApplication(mtm);
        let key_window = app.keyWindow();

        Self { key_window }
    }
}

impl Drop for FocusManager {
    fn drop(&mut self) {
        if let Some(win) = &self.key_window {
            win.makeKeyAndOrderFront(None);
        }
    }
}