X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b030203c5926bd6af8bc310469c911f2143f7e1..39fbbfda3c702e44d0c128a39440a321489b9b28:/src/cocoa/app.mm diff --git a/src/cocoa/app.mm b/src/cocoa/app.mm index a499a3a0e6..f44ff56c2d 100644 --- a/src/cocoa/app.mm +++ b/src/cocoa/app.mm @@ -13,8 +13,6 @@ #ifndef WX_PRECOMP #include "wx/defs.h" #include "wx/app.h" - #include "wx/frame.h" - #include "wx/dialog.h" #include "wx/dc.h" #include "wx/intl.h" #include "wx/log.h" @@ -25,6 +23,7 @@ #include "wx/cocoa/ObjcPose.h" #include "wx/cocoa/autorelease.h" #include "wx/cocoa/mbarman.h" +#include "wx/cocoa/NSApplication.h" #if wxUSE_WX_RESOURCES # include "wx/resource.h" @@ -32,8 +31,6 @@ #import <AppKit/NSApplication.h> #import <Foundation/NSRunLoop.h> -#import <Foundation/NSArray.h> -#import <Foundation/NSAutoreleasePool.h> #import <Foundation/NSThread.h> #import <AppKit/NSEvent.h> #import <Foundation/NSString.h> @@ -88,7 +85,7 @@ WX_IMPLEMENT_POSER(wxPoserNSApplication); && ([NSDefaultRunLoopMode isEqualToString:mode] || [NSModalPanelRunLoopMode isEqualToString:mode])) { sg_needIdle = false; - wxLogDebug(wxT("Processing idle events")); + wxLogTrace(wxTRACE_COCOA,wxT("Processing idle events")); while(wxTheApp->ProcessIdle()) { // Get the same events except don't block @@ -97,19 +94,19 @@ WX_IMPLEMENT_POSER(wxPoserNSApplication); if(event) return event; // we didn't get one, do some idle work - wxLogDebug(wxT("Looping idle events")); + wxLogTrace(wxTRACE_COCOA,wxT("Looping idle events")); } // No more idle work requested, block - wxLogDebug(wxT("Finished idle processing")); + wxLogTrace(wxTRACE_COCOA,wxT("Finished idle processing")); } else - wxLogDebug(wxT("Avoiding idle processing sg_needIdle=%d"),sg_needIdle); + wxLogTrace(wxTRACE_COCOA,wxT("Avoiding idle processing sg_needIdle=%d"),sg_needIdle); return [super nextEventMatchingMask:mask untilDate:expiration inMode:mode dequeue:flag]; } - (void)sendEvent: (NSEvent*)anEvent { - wxLogDebug(wxT("SendEvent")); + wxLogTrace(wxTRACE_COCOA,wxT("SendEvent")); sg_needIdle = true; [super sendEvent: anEvent]; } @@ -119,18 +116,6 @@ WX_IMPLEMENT_POSER(wxPoserNSApplication); // ======================================================================== // wxNSApplicationDelegate // ======================================================================== -@interface wxNSApplicationDelegate : NSObject -{ -} - -// Delegate methods -- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication; -- (void)applicationWillBecomeActive:(NSNotification *)notification; -- (void)applicationDidBecomeActive:(NSNotification *)notification; -- (void)applicationWillResignActive:(NSNotification *)notification; -- (void)applicationDidResignActive:(NSNotification *)notification; -@end // interface wxNSApplicationDelegate : NSObject - @implementation wxNSApplicationDelegate : NSObject // NOTE: Terminate means that the event loop does NOT return and thus @@ -191,11 +176,11 @@ bool wxApp::Initialize(int& argc, wxChar **argv) if ( argc > 1 ) { static const wxChar *ARG_PSN = _T("-psn_"); - if ( wxStrncmp(argv[1], ARG_PSN, strlen(ARG_PSN)) == 0 ) + if ( wxStrncmp(argv[1], ARG_PSN, wxStrlen(ARG_PSN)) == 0 ) { // remove this argument --argc; - memmove(argv + 1, argv + 2, argc * sizeof(char *)); + memmove(argv + 1, argv + 2, argc * sizeof(wxChar *)); } } @@ -321,12 +306,16 @@ bool wxApp::Yield(bool onlyIfNeeded) s_inYield = true; // Run the event loop until it is out of events - while(NSEvent *event = [GetNSApplication() + while(1) + { + wxAutoNSAutoreleasePool pool; + NSEvent *event = [GetNSApplication() nextEventMatchingMask:NSAnyEventMask - untilDate:[NSDate distantPast] + untilDate:nil /* ==[NSDate distantPast] */ inMode:NSDefaultRunLoopMode - dequeue: YES]) - { + dequeue: YES]; + if(!event) + break; [GetNSApplication() sendEvent: event]; }