Fix macOS quit: intercept applicationShouldTerminate: to allow real exit
GLFW's applicationShouldTerminate: converts all quit paths (Cmd+Q, dock, menu bar) into window close requests and returns NSTerminateCancel, so our close-to-hide intercept was hiding the window instead of letting the app exit. Fix by implementing applicationShouldTerminate: in ReopenDelegate, setting a darwinQuitting flag before forwarding to GLFW's delegate. The close intercept checks this flag and calls Window.Close() instead of Hide() when quitting. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
9a30559343
commit
d43e0c126b
@@ -3,6 +3,7 @@
|
||||
#import <AppKit/AppKit.h>
|
||||
|
||||
extern void appReopened(void);
|
||||
extern void appShouldTerminate(void);
|
||||
|
||||
@interface ReopenDelegate : NSObject<NSApplicationDelegate>
|
||||
@property (nonatomic, strong) id<NSApplicationDelegate> wrapped;
|
||||
@@ -11,6 +12,16 @@ extern void appReopened(void);
|
||||
|
||||
@implementation ReopenDelegate
|
||||
|
||||
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
|
||||
// Set the quitting flag before GLFW's delegate fires close requests for
|
||||
// each window, so our close intercept knows to close rather than hide.
|
||||
appShouldTerminate();
|
||||
if ([self.wrapped respondsToSelector:_cmd]) {
|
||||
return [self.wrapped applicationShouldTerminate:sender];
|
||||
}
|
||||
return NSTerminateNow;
|
||||
}
|
||||
|
||||
- (BOOL)applicationShouldHandleReopen:(NSApplication *)app
|
||||
hasVisibleWindows:(BOOL)hasVisible {
|
||||
if (!hasVisible) {
|
||||
|
||||
Reference in New Issue
Block a user