From 443630aae818d6b9eb21f24ca2a7238f68ae35ef Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 21 Feb 2011 15:25:49 -0800 Subject: [PATCH] We still want the delegate functionality for windowShouldClose() --- src/video/cocoa/SDL_cocoawindow.h | 4 +++ src/video/cocoa/SDL_cocoawindow.m | 44 ++++++++++++++++++++----------- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/video/cocoa/SDL_cocoawindow.h b/src/video/cocoa/SDL_cocoawindow.h index 3b91ea23b..5e0ebaded 100644 --- a/src/video/cocoa/SDL_cocoawindow.h +++ b/src/video/cocoa/SDL_cocoawindow.h @@ -29,7 +29,11 @@ typedef struct SDL_WindowData SDL_WindowData; /* *INDENT-OFF* */ +#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6 +@interface Cocoa_WindowListener : NSResponder { +#else @interface Cocoa_WindowListener : NSResponder { +#endif SDL_WindowData *_data; } diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index c0755b3ed..1db11457a 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -48,13 +48,17 @@ - (void)listen:(SDL_WindowData *)data center = [NSNotificationCenter defaultCenter]; - [center addObserver:self selector:@selector(windowDisExpose:) name:NSWindowDidExposeNotification object:window]; - [center addObserver:self selector:@selector(windowDidMove:) name:NSWindowDidMoveNotification object:window]; - [center addObserver:self selector:@selector(windowDidResize:) name:NSWindowDidResizeNotification object:window]; - [center addObserver:self selector:@selector(windowDidMiniaturize:) name:NSWindowDidMiniaturizeNotification object:window]; - [center addObserver:self selector:@selector(windowDidDeminiaturize:) name:NSWindowDidDeminiaturizeNotification object:window]; - [center addObserver:self selector:@selector(windowDidBecomeKey:) name:NSWindowDidBecomeKeyNotification object:window]; - [center addObserver:self selector:@selector(windowDidResignKey:) name:NSWindowDidResignKeyNotification object:window]; + if ([window delegate] != nil) { + [center addObserver:self selector:@selector(windowDidExpose:) name:NSWindowDidExposeNotification object:window]; + [center addObserver:self selector:@selector(windowDidMove:) name:NSWindowDidMoveNotification object:window]; + [center addObserver:self selector:@selector(windowDidResize:) name:NSWindowDidResizeNotification object:window]; + [center addObserver:self selector:@selector(windowDidMiniaturize:) name:NSWindowDidMiniaturizeNotification object:window]; + [center addObserver:self selector:@selector(windowDidDeminiaturize:) name:NSWindowDidDeminiaturizeNotification object:window]; + [center addObserver:self selector:@selector(windowDidBecomeKey:) name:NSWindowDidBecomeKeyNotification object:window]; + [center addObserver:self selector:@selector(windowDidResignKey:) name:NSWindowDidResignKeyNotification object:window]; + } else { + [window setDelegate:self]; + } [center addObserver:self selector:@selector(windowDidHide:) name:NSApplicationDidHideNotification object:NSApp]; [center addObserver:self selector:@selector(windowDidUnhide:) name:NSApplicationDidUnhideNotification object:NSApp]; @@ -76,18 +80,26 @@ - (void)close center = [NSNotificationCenter defaultCenter]; - [center removeObserver:self name:NSWindowDidExposeNotification object:window]; - [center removeObserver:self name:NSWindowDidMoveNotification object:window]; - [center removeObserver:self name:NSWindowDidResizeNotification object:window]; - [center removeObserver:self name:NSWindowDidMiniaturizeNotification object:window]; - [center removeObserver:self name:NSWindowDidDeminiaturizeNotification object:window]; - [center removeObserver:self name:NSWindowDidBecomeKeyNotification object:window]; - [center removeObserver:self name:NSWindowDidResignKeyNotification object:window]; + if ([window delegate] != self) { + [center removeObserver:self name:NSWindowDidExposeNotification object:window]; + [center removeObserver:self name:NSWindowDidMoveNotification object:window]; + [center removeObserver:self name:NSWindowDidResizeNotification object:window]; + [center removeObserver:self name:NSWindowDidMiniaturizeNotification object:window]; + [center removeObserver:self name:NSWindowDidDeminiaturizeNotification object:window]; + [center removeObserver:self name:NSWindowDidBecomeKeyNotification object:window]; + [center removeObserver:self name:NSWindowDidResignKeyNotification object:window]; + } else { + [window setDelegate:nil]; + } [center removeObserver:self name:NSApplicationDidHideNotification object:NSApp]; [center removeObserver:self name:NSApplicationDidUnhideNotification object:NSApp]; - [window setNextResponder:nil]; - [view setNextResponder:nil]; + if ([window nextResponder] == self) { + [window setNextResponder:nil]; + } + if ([view nextResponder] == self) { + [view setNextResponder:nil]; + } } - (BOOL)windowShouldClose:(id)sender