From 5fa3f3eb6880bab9dd4d99310427f56ddfef7404 Mon Sep 17 00:00:00 2001 From: LD Date: Sat, 11 Jun 2022 22:31:40 +0200 Subject: [PATCH] cocoadisplay: Call remove_all_windows() when the application is about to close Part of #1321 --- panda/src/cocoadisplay/cocoaGraphicsWindow.mm | 2 +- panda/src/cocoadisplay/cocoaPandaAppDelegate.h | 11 +++++++++-- panda/src/cocoadisplay/cocoaPandaAppDelegate.mm | 16 ++++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/panda/src/cocoadisplay/cocoaGraphicsWindow.mm b/panda/src/cocoadisplay/cocoaGraphicsWindow.mm index 2e6c2a3685..40d6a6ea5f 100644 --- a/panda/src/cocoadisplay/cocoaGraphicsWindow.mm +++ b/panda/src/cocoadisplay/cocoaGraphicsWindow.mm @@ -99,7 +99,7 @@ CocoaGraphicsWindow(GraphicsEngine *engine, GraphicsPipe *pipe, if (NSApp == nil) { [CocoaPandaApp sharedApplication]; - CocoaPandaAppDelegate *delegate = [[CocoaPandaAppDelegate alloc] init]; + CocoaPandaAppDelegate *delegate = [[CocoaPandaAppDelegate alloc] initWithEngine:engine]; [NSApp setDelegate:delegate]; #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 diff --git a/panda/src/cocoadisplay/cocoaPandaAppDelegate.h b/panda/src/cocoadisplay/cocoaPandaAppDelegate.h index b4af5deb55..6dd56b68e5 100644 --- a/panda/src/cocoadisplay/cocoaPandaAppDelegate.h +++ b/panda/src/cocoadisplay/cocoaPandaAppDelegate.h @@ -14,9 +14,16 @@ #import #import -// Cocoa is picky about where and when certain methods are called in the initialization process. -@interface CocoaPandaAppDelegate : NSObject +class GraphicsEngine; +// Cocoa is picky about where and when certain methods are called in the initialization process. +@interface CocoaPandaAppDelegate : NSObject { + @private + GraphicsEngine *_engine; +} + +- (id) initWithEngine:(GraphicsEngine *)engine; - (void)applicationDidFinishLaunching:(NSNotification *)notification; +- (void)applicationWillTerminate:(NSNotification *)notification; @end diff --git a/panda/src/cocoadisplay/cocoaPandaAppDelegate.mm b/panda/src/cocoadisplay/cocoaPandaAppDelegate.mm index dbb5452c75..1906e15d44 100644 --- a/panda/src/cocoadisplay/cocoaPandaAppDelegate.mm +++ b/panda/src/cocoadisplay/cocoaPandaAppDelegate.mm @@ -12,12 +12,28 @@ */ #import "cocoaPandaAppDelegate.h" +#include "graphicsEngine.h" @implementation CocoaPandaAppDelegate +- (id) initWithEngine:(GraphicsEngine *)engine { + + if (self = [super init]) { + _engine = engine; + } + + return self; +} + - (void)applicationDidFinishLaunching:(NSNotification *)notification { // This only seems to work when called here. [NSApp activateIgnoringOtherApps:YES]; } +- (void)applicationWillTerminate:(NSNotification *)notification { + // The application is about to be closed, tell the graphics engine to close + // all the windows. + _engine->remove_all_windows(); +} + @end