// Author: Stefan Csomor
// Modified by:
// Created: 1998-01-01
-// RCS-ID: $Id$
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
@implementation wxNSAppController
-- (void)applicationWillFinishLaunching:(NSNotification *)application {
+- (void)applicationWillFinishLaunching:(NSNotification *)application
+{
wxUnusedVar(application);
// we must install our handlers later than setting the app delegate, because otherwise our handlers
[appleEventManager setEventHandler:self andSelector:@selector(handleOpenAppEvent:withReplyEvent:)
forEventClass:kCoreEventClass andEventID:kAEOpenApplication];
+ wxTheApp->OSXOnWillFinishLaunching();
+}
+
+- (void)applicationDidFinishLaunching:(NSNotification *)notification
+{
+ wxTheApp->OSXOnDidFinishLaunching();
}
- (void)application:(NSApplication *)sender openFiles:(NSArray *)fileNames
const size_t count = [fileNames count];
for (i = 0; i < count; i++)
{
- fileList.Add( wxCFStringRef::AsString([fileNames objectAtIndex:i]) );
+ fileList.Add( wxCFStringRef::AsStringWithNormalizationFormC([fileNames objectAtIndex:i]) );
}
wxTheApp->MacOpenFiles(fileList);
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
wxUnusedVar(sender);
- wxCloseEvent event;
- wxTheApp->OnQueryEndSession(event);
- if ( event.GetVeto() )
+ if ( !wxTheApp->OSXOnShouldTerminate() )
return NSTerminateCancel;
return NSTerminateNow;
- (void)applicationWillTerminate:(NSNotification *)application {
wxUnusedVar(application);
- wxCloseEvent event;
- event.SetCanVeto(false);
- wxTheApp->OnEndSession(event);
+ wxTheApp->OSXOnWillTerminate();
}
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
// here we subclass NSApplication, for the purpose of being able to override sendEvent.
@interface wxNSApplication : NSApplication
{
+ BOOL firstPass;
}
+- (id)init;
+
- (void)sendEvent:(NSEvent *)anEvent;
@end
@implementation wxNSApplication
+- (id)init
+{
+ self = [super init];
+ firstPass = YES;
+ return self;
+}
+
/* This is needed because otherwise we don't receive any key-up events for command-key
combinations (an AppKit bug, apparently) */
- (void)sendEvent:(NSEvent *)anEvent
{
if ([anEvent type] == NSKeyUp && ([anEvent modifierFlags] & NSCommandKeyMask))
[[self keyWindow] sendEvent:anEvent];
- else [super sendEvent:anEvent];
+ else
+ [super sendEvent:anEvent];
+
+ if ( firstPass )
+ {
+ [NSApp stop:nil];
+ firstPass = NO;
+ return;
+ }
}
@end
-wxNSAppController* appcontroller = nil;
+WX_NSObject appcontroller = nil;
NSLayoutManager* gNSLayoutManager = nil;
+WX_NSObject wxApp::OSXCreateAppController()
+{
+ return [[wxNSAppController alloc] init];
+}
bool wxApp::DoInitGui()
{
{
[wxNSApplication sharedApplication];
- appcontroller = [[wxNSAppController alloc] init];
+ appcontroller = OSXCreateAppController();
[NSApp setDelegate:appcontroller];
+ [NSColor setIgnoresAlpha:NO];
// calling finishLaunching so early before running the loop seems to trigger some 'MenuManager compatibility' which leads
// to the duplication of menus under 10.5 and a warning under 10.6
return true;
}
+bool wxApp::CallOnInit()
+{
+ wxMacAutoreleasePool autoreleasepool;
+ // this will only run one cycle to make sure the OS is ready
+ [NSApp run];
+ return OnInit();
+}
+
void wxApp::DoCleanUp()
{
if ( appcontroller != nil )