#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"
#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"
#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>
if(event)
return event;
// No events, try doing some idle stuff
- if(sg_needIdle && !wxTheApp->IsInAssert() && ([NSDefaultRunLoopMode isEqualToString:mode] || [NSModalPanelRunLoopMode isEqualToString:mode]))
+ if(sg_needIdle
+#ifdef __WXDEBUG__
+ && !wxTheApp->IsInAssert()
+#endif
+ && ([NSDefaultRunLoopMode isEqualToString:mode] || [NSModalPanelRunLoopMode isEqualToString:mode]))
{
sg_needIdle = false;
- wxLogDebug("Processing idle events");
+ wxLogTrace(wxTRACE_COCOA,wxT("Processing idle events"));
while(wxTheApp->ProcessIdle())
{
// Get the same events except don't block
if(event)
return event;
// we didn't get one, do some idle work
- wxLogDebug("Looping idle events");
+ wxLogTrace(wxTRACE_COCOA,wxT("Looping idle events"));
}
// No more idle work requested, block
- wxLogDebug("Finished idle processing");
+ wxLogTrace(wxTRACE_COCOA,wxT("Finished idle processing"));
}
else
- wxLogDebug("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("SendEvent");
+ wxLogTrace(wxTRACE_COCOA,wxT("SendEvent"));
sg_needIdle = true;
[super sendEvent: anEvent];
}
// ========================================================================
// 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
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 *));
}
}
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];
}