#include "wx/module.h"
#include "wx/cocoa/ObjcPose.h"
+#include "wx/cocoa/autorelease.h"
#if wxUSE_WX_RESOURCES
# include "wx/resource.h"
@end // wxPoserNSApplication
WX_IMPLEMENT_POSER(wxPoserNSApplication);
-class wxAutoNSAutoreleasePool
-{
-public:
- wxAutoNSAutoreleasePool()
- {
- m_pool = [[NSAutoreleasePool alloc] init];
- }
- ~wxAutoNSAutoreleasePool()
- {
- [m_pool release];
- }
-protected:
- NSAutoreleasePool *m_pool;
-};
-
// ============================================================================
// functions
// ============================================================================
#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxApp, wxEvtHandler)
BEGIN_EVENT_TABLE(wxApp, wxEvtHandler)
- EVT_IDLE(wxApp::OnIdle)
+ EVT_IDLE(wxAppBase::OnIdle)
// EVT_END_SESSION(wxApp::OnEndSession)
// EVT_QUERY_END_SESSION(wxApp::OnQueryEndSession)
END_EVENT_TABLE()
void wxApp::CocoaInstallIdleHandler()
{
+ // If we're supposed to be stopping, don't add more idle events
+ if(![m_cocoaApp isRunning])
+ return;
wxLogDebug("wxApp::CocoaInstallIdleHandler");
m_isIdle = false;
// Call doIdle for EVERYTHING dammit
bool wxApp::CallOnInit()
{
- wxAutoNSAutoreleasePool pool;
+// wxAutoNSAutoreleasePool pool;
return OnInit();
}
if(!m_isIdle)
[[ NSRunLoop currentRunLoop ] cancelPerformSelector:@selector(doIdle:) target:m_cocoaApp argument:NULL];
#endif
- [m_cocoaApp terminate: m_cocoaApp];
+ [m_cocoaApp stop: m_cocoaApp];
}
// Is a message/event pending?
{
}
-void wxApp::OnIdle(wxIdleEvent& event)
-{
- wxLogDebug("wxApp::OnIdle");
- static bool s_inOnIdle = FALSE;
-
- // Avoid recursion (via ProcessEvent default case)
- if ( s_inOnIdle )
- return;
- s_inOnIdle = TRUE;
-
-
- DeletePendingObjects();
-
- // flush the logged messages if any
- wxLog *pLog = wxLog::GetActiveTarget();
- if ( pLog != NULL && pLog->HasPendingMessages() )
- pLog->Flush();
-
- // Send OnIdle events to all windows
- bool needMore = SendIdleEvents();
-
- if (needMore)
- event.RequestMore(TRUE);
-
- s_inOnIdle = FALSE;
-}
-
// Yield to other processes
bool wxApp::Yield(bool onlyIfNeeded)