X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgraphics%2Fcocoa%2Fcocoawindow.m;h=5b63e8c678e10daed993f181f82207dfd3a3186b;hb=9c5745de58e26321f939fd84c1c0f8a5a6cb2601;hp=692952002f7c6be6f5d60be10266ba2d5e03b58a;hpb=ad7b7bd9c61fc61e5ae5b8434d0d687b63a755c7;p=libs%2Fgui.git diff --git a/source/graphics/cocoa/cocoawindow.m b/source/graphics/cocoa/cocoawindow.m index 6929520..5b63e8c 100644 --- a/source/graphics/cocoa/cocoawindow.m +++ b/source/graphics/cocoa/cocoawindow.m @@ -5,7 +5,7 @@ @interface WindowDelegate: NSObject -- (void)windowWillClose:(NSNotification *)notification; +- (BOOL)windowShouldClose:(id)sender; @end @@ -13,11 +13,11 @@ struct _CocoaWindow { CocoaDisplay *display; __strong NSWindow *window; + __strong WindowDelegate *delegate; NSUInteger style; }; CFMutableDictionaryRef windows = NULL; -CFMutableArrayRef event_queue = NULL; CocoaWindow *create_window(CocoaDisplay *display, unsigned width, unsigned height, bool fullscreen, bool resizable) { @@ -36,7 +36,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 +56,7 @@ void destroy_window(CocoaWindow *window) } [window->window release]; + [window->delegate release]; free(window); } @@ -93,16 +95,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