Fixed lifetime management of application delegate.

This commit is contained in:
Camilla Berglund 2015-01-04 17:49:12 +01:00
parent d459145d28
commit 1634742177
3 changed files with 7 additions and 6 deletions

View File

@ -228,11 +228,11 @@ void _glfwPlatformTerminate(void)
_glfw.ns.eventSource = NULL;
}
id delegate = [NSApp delegate];
if (delegate)
if (_glfw.ns.delegate)
{
[delegate release];
[NSApp setDelegate:nil];
[_glfw.ns.delegate release];
_glfw.ns.delegate = nil;
}
[_glfw.ns.autoreleasePool release];

View File

@ -76,6 +76,7 @@ typedef struct _GLFWwindowNS
typedef struct _GLFWlibraryNS
{
CGEventSourceRef eventSource;
id delegate;
id autoreleasePool;
id cursor;

View File

@ -794,15 +794,15 @@ static GLboolean initializeAppKit(void)
// There can only be one application delegate, but we allocate it the
// first time a window is created to keep all window code in this file
id delegate = [[GLFWApplicationDelegate alloc] init];
if (delegate == nil)
_glfw.ns.delegate = [[GLFWApplicationDelegate alloc] init];
if (_glfw.ns.delegate == nil)
{
_glfwInputError(GLFW_PLATFORM_ERROR,
"Cocoa: Failed to create application delegate");
return GL_FALSE;
}
[NSApp setDelegate:delegate];
[NSApp setDelegate:_glfw.ns.delegate];
[NSApp run];
return GL_TRUE;