From 07f3d8d60ff8d05f3315216130d891d9520efb34 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 24 Jul 2007 04:21:05 +0000 Subject: [PATCH] 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 | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/video/quartz/SDL_QuartzVideo.m b/src/video/quartz/SDL_QuartzVideo.m index 10d502830..c6f582cee 100644 --- a/src/video/quartz/SDL_QuartzVideo.m +++ b/src/video/quartz/SDL_QuartzVideo.m @@ -369,8 +369,8 @@ static void QZ_UnsetVideoMode (_THIS, BOOL to_desktop) { /* 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 @@ static void QZ_UnsetVideoMode (_THIS, BOOL to_desktop) { } /* 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 @@ other blitting while waiting on the VBL (and hence results in higher framerates) 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 @@ other blitting while waiting on the VBL (and hence results in higher framerates) [ 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 */