macOS: Emit LoopDestroyed on CMD+Q (#2073)

override applicationWillTerminate:

Co-authored-by: Mads Marquart <mads@marquart.dk>
This commit is contained in:
tinaun 2022-06-09 10:08:52 -04:00 committed by GitHub
parent 2c01e9e747
commit c5eaa0ab69
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 0 deletions

View file

@ -8,6 +8,7 @@ And please only add new entries to the top of this list, right below the `# Unre
# Unreleased # Unreleased
- On macOS, Fix emitting `Event::LoopDestroyed` on CMD+Q.
- On macOS, fixed an issue where having multiple windows would prevent run_return from ever returning. - On macOS, fixed an issue where having multiple windows would prevent run_return from ever returning.
- On Wayland, fix bug where the cursor wouldn't hide in GNOME. - On Wayland, fix bug where the cursor wouldn't hide in GNOME.
- On macOS, Windows, and Wayland, add `set_cursor_hittest` to let the window ignore mouse events. - On macOS, Windows, and Wayland, add `set_cursor_hittest` to let the window ignore mouse events.

View file

@ -34,6 +34,11 @@ pub static APP_DELEGATE_CLASS: Lazy<AppDelegateClass> = Lazy::new(|| unsafe {
sel!(applicationDidFinishLaunching:), sel!(applicationDidFinishLaunching:),
did_finish_launching as extern "C" fn(&Object, Sel, id), did_finish_launching as extern "C" fn(&Object, Sel, id),
); );
decl.add_method(
sel!(applicationWillTerminate:),
will_terminate as extern "C" fn(&Object, Sel, id),
);
decl.add_ivar::<*mut c_void>(AUX_DELEGATE_STATE_NAME); decl.add_ivar::<*mut c_void>(AUX_DELEGATE_STATE_NAME);
AppDelegateClass(decl.register()) AppDelegateClass(decl.register())
@ -75,3 +80,10 @@ extern "C" fn did_finish_launching(this: &Object, _: Sel, _: id) {
trace_scope!("applicationDidFinishLaunching:"); trace_scope!("applicationDidFinishLaunching:");
AppState::launched(this); AppState::launched(this);
} }
extern "C" fn will_terminate(_this: &Object, _: Sel, _: id) {
trace!("Triggered `applicationWillTerminate`");
// TODO: Notify every window that it will be destroyed, like done in iOS?
AppState::exit();
trace!("Completed `applicationWillTerminate`");
}