]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/cocoa/cocoawindow.m
Use windowShouldClose rather than windowWillClose
[libs/gui.git] / source / graphics / cocoa / cocoawindow.m
index 692952002f7c6be6f5d60be10266ba2d5e03b58a..cbf67222d7b91a60371a9180686220e52a997a2b 100644 (file)
@@ -5,7 +5,7 @@
 
 @interface WindowDelegate: NSObject <NSWindowDelegate>
 
-- (void)windowWillClose:(NSNotification *)notification;
+- (BOOL)windowShouldClose:(id)sender;
 
 @end
 
@@ -13,6 +13,7 @@ struct _CocoaWindow
 {
        CocoaDisplay *display;
        __strong NSWindow *window;
+       __strong WindowDelegate *delegate;
        NSUInteger style;
 };
 
@@ -36,7 +37,8 @@ CocoaWindow *create_window(CocoaDisplay *display, unsigned width, unsigned heigh
        wrapper->window = window;
        wrapper->style = style;
 
-       [window setDelegate:[[WindowDelegate alloc] init]];
+       wrapper->delegate = [[WindowDelegate alloc] init];
+       [window setDelegate:wrapper->delegate];
 
        if(!windows)
                windows = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
@@ -55,6 +57,7 @@ void destroy_window(CocoaWindow *window)
        }
 
        [window->window release];
+       [window->delegate release];
        free(window);
 }
 
@@ -93,16 +96,18 @@ void hide_window(CocoaWindow *window)
 
 @implementation WindowDelegate
 
-- (void)windowWillClose:(NSNotification *)notification
+- (BOOL)windowShouldClose:(id)sender
 {
-       CocoaWindow *window = lookup_window((NSWindow *)[notification object]);
+       CocoaWindow *window = lookup_window((NSWindow *)sender);
        if(window)
        {
                CocoaEvent event;
                event.any.type = WINDOW_CLOSED;
                event.any.window = window;
                queue_event(window->display, &event);
+               return NO;
        }
+       return YES;
 }
 
 @end