]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/app.cpp
correct GetBestSize() to return correct best size, i.e. the same size as AutoSize...
[wxWidgets.git] / src / gtk / app.cpp
index a75f0f47b73a1745a6d85d28eb4cb85d6d2ed138..e68e9654d6e07a13627cefececabd69214588ded 100644 (file)
@@ -135,7 +135,7 @@ bool wxApp::Yield(bool onlyIfNeeded)
 
     // We need to remove idle callbacks or the loop will
     // never finish.
-    RemoveIdleSource();
+    SuspendIdleCallback();
 
 #if wxUSE_LOG
     // disable log flushing from here because a call to wxYield() shouldn't
@@ -208,31 +208,32 @@ static inline void wxAddEmissionHook()
 
 static gint wxapp_idle_callback( gpointer WXUNUSED(data) )
 {
+    // this does not look possible, but just in case...
     if (!wxTheApp)
         return false;
 
+    bool moreIdles = false;
+
 #ifdef __WXDEBUG__
     // don't generate the idle events while the assert modal dialog is shown,
-    // this completely confuses the apps which don't expect to be reentered
-    // from some safely-looking functions
-    if ( wxTheApp->IsInAssert() )
-        return false;
+    // this matches the behavior of wxMSW
+    if (!wxTheApp->IsInAssert())
 #endif // __WXDEBUG__
-
-    // When getting called from GDK's time-out handler
-    // we are no longer within GDK's grab on the GUI
-    // thread so we must lock it here ourselves.
-    gdk_threads_enter();
-
-    bool moreIdles;
-
-    // Send idle event to all who request them as long as
-    // no events have popped up in the event queue.
-    while ( (moreIdles = wxTheApp->ProcessIdle()) && gtk_events_pending() == 0)
-        ;
-
-    // Release lock again
-    gdk_threads_leave();
+    {
+        // When getting called from GDK's time-out handler
+        // we are no longer within GDK's grab on the GUI
+        // thread so we must lock it here ourselves.
+        gdk_threads_enter();
+
+        // Send idle event to all who request them as long as
+        // no events have popped up in the event queue.
+        do {
+            moreIdles = wxTheApp->ProcessIdle();
+        } while (moreIdles && gtk_events_pending() == 0);
+
+        // Release lock again
+        gdk_threads_leave();
+    }
 
     if (!moreIdles)
     {
@@ -616,19 +617,18 @@ void wxApp::OnAssertFailure(const wxChar *file,
                             const wxChar* cond,
                             const wxChar *msg)
 {
-    // This doesn't seem to be required anymore. Indeed,
-    // it breaks any code from working after a suppressed
-    // assert.
-    // m_isInAssert = true;
+
+    // block wx idle events while assert dialog is showing
+    m_isInAssert = true;
 
     wxAppBase::OnAssertFailure(file, line, func, cond, msg);
 
-    // m_isInAssert = false;
+    m_isInAssert = false;
 }
 
 #endif // __WXDEBUG__
 
-void wxApp::RemoveIdleSource()
+void wxApp::SuspendIdleCallback()
 {
 #if wxUSE_THREADS
     wxMutexLocker lock(gs_idleTagsMutex);