Commit 7c4bd583 authored by Sam Lantinga's avatar Sam Lantinga

Fixed Objective-C memory leaks

Send an SDL quit event when Command-Q is pressed.

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401983
parent 79452369
...@@ -37,6 +37,18 @@ ...@@ -37,6 +37,18 @@
} }
@end @end
@interface SDLAppDelegate : NSObject
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender;
@end
@implementation SDLAppDelegate : NSObject
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
SDL_SendQuit();
return NSTerminateCancel;
}
@end
static NSString * static NSString *
GetApplicationName(void) GetApplicationName(void)
{ {
...@@ -139,6 +151,9 @@ Cocoa_RegisterApp(void) ...@@ -139,6 +151,9 @@ Cocoa_RegisterApp(void)
} }
[NSApp finishLaunching]; [NSApp finishLaunching];
} }
if ([NSApp delegate] == nil) {
[NSApp setDelegate:[[SDLAppDelegate alloc] init]];
}
[NSApp setRunning]; [NSApp setRunning];
[pool release]; [pool release];
} }
......
...@@ -419,6 +419,7 @@ Cocoa_CreateWindowFrom(_THIS, SDL_Window * window, const void *data) ...@@ -419,6 +419,7 @@ Cocoa_CreateWindowFrom(_THIS, SDL_Window * window, const void *data)
void void
Cocoa_SetWindowTitle(_THIS, SDL_Window * window) Cocoa_SetWindowTitle(_THIS, SDL_Window * window)
{ {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window; NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window;
NSString *string; NSString *string;
...@@ -426,11 +427,13 @@ Cocoa_SetWindowTitle(_THIS, SDL_Window * window) ...@@ -426,11 +427,13 @@ Cocoa_SetWindowTitle(_THIS, SDL_Window * window)
[nswindow setTitle:string]; [nswindow setTitle:string];
[nswindow setMiniwindowTitle:string]; [nswindow setMiniwindowTitle:string];
[string release]; [string release];
[pool release];
} }
void void
Cocoa_SetWindowPosition(_THIS, SDL_Window * window) Cocoa_SetWindowPosition(_THIS, SDL_Window * window)
{ {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window; NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window;
NSRect rect; NSRect rect;
...@@ -441,25 +444,30 @@ Cocoa_SetWindowPosition(_THIS, SDL_Window * window) ...@@ -441,25 +444,30 @@ Cocoa_SetWindowPosition(_THIS, SDL_Window * window)
ConvertNSRect(&rect); ConvertNSRect(&rect);
rect = [nswindow frameRectForContentRect:rect]; rect = [nswindow frameRectForContentRect:rect];
[nswindow setFrameOrigin:rect.origin]; [nswindow setFrameOrigin:rect.origin];
[pool release];
} }
void void
Cocoa_SetWindowSize(_THIS, SDL_Window * window) Cocoa_SetWindowSize(_THIS, SDL_Window * window)
{ {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window; NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window;
NSSize size; NSSize size;
size.width = window->w; size.width = window->w;
size.height = window->h; size.height = window->h;
[nswindow setContentSize:size]; [nswindow setContentSize:size];
[pool release];
} }
void void
Cocoa_ShowWindow(_THIS, SDL_Window * window) Cocoa_ShowWindow(_THIS, SDL_Window * window)
{ {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window; NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window;
[nswindow makeKeyAndOrderFront:nil]; [nswindow makeKeyAndOrderFront:nil];
[pool release];
} }
void void
...@@ -473,25 +481,31 @@ Cocoa_HideWindow(_THIS, SDL_Window * window) ...@@ -473,25 +481,31 @@ Cocoa_HideWindow(_THIS, SDL_Window * window)
void void
Cocoa_RaiseWindow(_THIS, SDL_Window * window) Cocoa_RaiseWindow(_THIS, SDL_Window * window)
{ {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window; NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window;
[nswindow makeKeyAndOrderFront:nil]; [nswindow makeKeyAndOrderFront:nil];
[pool release];
} }
void void
Cocoa_MaximizeWindow(_THIS, SDL_Window * window) Cocoa_MaximizeWindow(_THIS, SDL_Window * window)
{ {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window; NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window;
[nswindow performZoom:nil]; [nswindow performZoom:nil];
[pool release];
} }
void void
Cocoa_MinimizeWindow(_THIS, SDL_Window * window) Cocoa_MinimizeWindow(_THIS, SDL_Window * window)
{ {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window; NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->window;
[nswindow performMiniaturize:nil]; [nswindow performMiniaturize:nil];
[pool release];
} }
void void
...@@ -516,24 +530,23 @@ Cocoa_SetWindowGrab(_THIS, SDL_Window * window) ...@@ -516,24 +530,23 @@ Cocoa_SetWindowGrab(_THIS, SDL_Window * window)
void void
Cocoa_DestroyWindow(_THIS, SDL_Window * window) Cocoa_DestroyWindow(_THIS, SDL_Window * window)
{ {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
if (data) { if (data) {
NSAutoreleasePool *pool;
#ifdef SDL_VIDEO_OPENGL #ifdef SDL_VIDEO_OPENGL
if (window->flags & SDL_WINDOW_OPENGL) { if (window->flags & SDL_WINDOW_OPENGL) {
Cocoa_GL_CleanupWindow(_this, window); Cocoa_GL_CleanupWindow(_this, window);
} }
#endif #endif
pool = [[NSAutoreleasePool alloc] init];
[data->listener close]; [data->listener close];
[data->listener release]; [data->listener release];
if (data->created) { if (data->created) {
[data->window close]; [data->window close];
} }
SDL_free(data); SDL_free(data);
[pool release];
} }
[pool release];
} }
SDL_bool SDL_bool
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment