]> git.saurik.com Git - wxWidgets.git/commitdiff
Put OnIdle() back. Without deleting pending objects, frames that have
authorDavid Elliott <dfe@tgwbd.org>
Mon, 14 Jul 2003 03:48:20 +0000 (03:48 +0000)
committerDavid Elliott <dfe@tgwbd.org>
Mon, 14 Jul 2003 03:48:20 +0000 (03:48 +0000)
been Destroy()ed (e.g. by the default close implementation) never actually
get deleted and thus the program never terminates because the
wxTopLevelWindowBase destructor is never called to do ExitMainLoop()
FIXME: Why isn't this OnIdle stuff simply in wxAppBase?

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21947 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/cocoa/app.h
src/cocoa/app.mm

index ac4078563f0f38c93894aa58f0387cdb0932433c..02bf4fa5b0776f07667f2e3164ba1ac3cd2286b3 100644 (file)
@@ -53,6 +53,9 @@ public:
     virtual bool Yield(bool onlyIfNeeded = FALSE);
     virtual void WakeUpIdle() { CocoaRequestIdle(); }
     
+    /* Idle Processing */
+    void OnIdle(wxIdleEvent& event);
+
     virtual bool Initialize(int& argc, wxChar **argv);
     virtual void CleanUp();
     virtual bool CallOnInit();
index baf11a863688c99dd9eb2470216a8b5627b2202e..71704b5e2823b693c4d412568aa145adc7a6341d 100644 (file)
@@ -134,6 +134,7 @@ void wxApp::Exit()
 #if !USE_SHARED_LIBRARY
 IMPLEMENT_DYNAMIC_CLASS(wxApp, wxEvtHandler)
 BEGIN_EVENT_TABLE(wxApp, wxEvtHandler)
+    EVT_IDLE(wxApp::OnIdle)
 //    EVT_END_SESSION(wxApp::OnEndSession)
 //    EVT_QUERY_END_SESSION(wxApp::OnQueryEndSession)
 END_EVENT_TABLE()
@@ -277,6 +278,37 @@ void wxApp::Dispatch()
 {
 }
 
+void wxApp::OnIdle(wxIdleEvent& event)
+{
+    wxLogDebug("wxApp::OnIdle");
+#if 0
+   static bool s_inOnIdle = FALSE;
+
+    // Avoid recursion (via ProcessEvent default case)
+    if ( s_inOnIdle )
+        return;
+    s_inOnIdle = TRUE;
+#endif
+
+
+    DeletePendingObjects();
+
+    // flush the logged messages if any
+    wxLog *pLog = wxLog::GetActiveTarget();
+    if ( pLog != NULL && pLog->HasPendingMessages() )
+        pLog->Flush();
+
+#if 0
+    // Send OnIdle events to all windows
+    bool needMore = SendIdleEvents();
+
+    if (needMore)
+      event.RequestMore(TRUE);
+
+    s_inOnIdle = FALSE;
+#endif
+}
+
 // Yield to other processes
 
 bool wxApp::Yield(bool onlyIfNeeded)