Fixed bug #458 SDL-1.2
authorSam Lantinga <slouken@libsdl.org>
Tue, 24 Jul 2007 04:21:05 +0000
branchSDL-1.2
changeset 4090 fedb379bedd0
parent 4089 37345dc3dd83
child 4091 98b219f9ff17
Fixed bug #458 ------- Comment #7 From Christian Walther 2007-07-23 01:10:30 [reply] ------- Fix for some Cocoa memory management problems. OK, I think I've nailed the memory management problems with the attached patch. Too late for the release, but oh well. It shows that I haven't done much Cocoa lately... took me a while to figure out that NSWindows don't retain their delegate.
src/video/quartz/SDL_QuartzVideo.m
--- a/src/video/quartz/SDL_QuartzVideo.m	Mon Jul 23 18:36:58 2007 +0000
+++ b/src/video/quartz/SDL_QuartzVideo.m	Tue Jul 24 04:21:05 2007 +0000
@@ -369,8 +369,8 @@
         
         /* If we still have a valid window, close it. */
         if ( qz_window ) {
-            [ qz_window close ];
-            [ qz_window release ];
+            NSCAssert([ qz_window delegate ] == nil, @"full screen window shouldn't have a delegate"); /* if that should ever change, we'd have to release it here */
+            [ qz_window close ]; /* includes release because [qz_window isReleasedWhenClosed] */
             qz_window = nil;
             window_view = nil;
         }
@@ -398,9 +398,9 @@
     }
     /* Release window mode resources */
     else {
-        
-        [ qz_window close ];
-        [ qz_window release ];
+        id delegate = [ qz_window delegate ];
+        [ qz_window close ]; /* includes release because [qz_window isReleasedWhenClosed] */
+        if (delegate != nil) [ delegate release ];
         qz_window = nil;
         window_view = nil;
 
@@ -747,7 +747,7 @@
             return NULL;
         }
     
-        /*[ qz_window setReleasedWhenClosed:YES ];*/
+        /*[ qz_window setReleasedWhenClosed:YES ];*/ /* no need to set this as it's the default for NSWindows */
         QZ_SetCaption(this, this->wm_title, this->wm_icon);
         [ qz_window setAcceptsMouseMovedEvents:YES ];
         [ qz_window setViewsNeedDisplay:NO ];
@@ -755,7 +755,7 @@
             [ qz_window center ];
         }
         [ qz_window setDelegate:
-            [ [ [ SDL_QuartzWindowDelegate alloc ] init ] autorelease ] ];
+            [ [ SDL_QuartzWindowDelegate alloc ] init ] ];
         [ qz_window setContentView: [ [ [ SDL_QuartzView alloc ] init ] autorelease ] ];
     }
     /* We already have a window, just change its size */