]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/appcmn.cpp
applying patch, fixes #10523
[wxWidgets.git] / src / common / appcmn.cpp
index a38f84583f1ce5dbcb9273c8e10b1cfd98da94fb..82fdabf78e515d524b6d2dff811f70ae84574831 100644 (file)
@@ -40,6 +40,7 @@
 #include "wx/msgout.h"
 #include "wx/thread.h"
 #include "wx/vidmode.h"
+#include "wx/evtloop.h"
 
 #ifdef __WXDEBUG__
     #if wxUSE_STACKWALKER
@@ -71,15 +72,13 @@ WXDLLIMPEXP_DATA_CORE(wxList) wxPendingDelete;
 
 wxAppBase::wxAppBase()
 {
-    m_topWindow = (wxWindow *)NULL;
+    m_topWindow = NULL;
 
     m_useBestVisual = false;
     m_forceTrueColour = false;
 
     m_isActive = true;
 
-    m_isInsideYield = false;
-
     // We don't want to exit the app if the user code shows a dialog from its
     // OnInit() -- but this is what would happen if we set m_exitOnFrameDelete
     // to Yes initially as this dialog would be the last top level window.
@@ -104,6 +103,10 @@ bool wxAppBase::Initialize(int& argcOrig, wxChar **argvOrig)
 
     wxBitmap::InitStandardHandlers();
 
+    // for compatibility call the old initialization function too
+    if ( !OnInitGui() )
+        return false;
+
     return true;
 }
 
@@ -325,6 +328,25 @@ void wxAppBase::SetActive(bool active, wxWindow * WXUNUSED(lastFocus))
     (void)ProcessEvent(event);
 }
 
+bool wxAppBase::SafeYield(wxWindow *win, bool onlyIfNeeded)
+{
+    wxWindowDisabler wd(win);
+
+    wxEventLoopBase * const loop = wxEventLoopBase::GetActive();
+
+    return loop && loop->Yield(onlyIfNeeded);
+}
+
+bool wxAppBase::SafeYieldFor(wxWindow *win, long eventsToProcess)
+{
+    wxWindowDisabler wd(win);
+
+    wxEventLoopBase * const loop = wxEventLoopBase::GetActive();
+
+    return loop && loop->YieldFor(eventsToProcess);
+}
+
+
 // ----------------------------------------------------------------------------
 // idle handling
 // ----------------------------------------------------------------------------
@@ -353,11 +375,11 @@ void wxAppBase::DeletePendingObjects()
 // Returns true if more time is needed.
 bool wxAppBase::ProcessIdle()
 {
-    // process pending wx events before sending idle events
-    ProcessPendingEvents();
-
+    // call the base class version first, it will process the pending events
+    // (which should be done before the idle events generation) and send the
+    // idle event to wxTheApp itself
+    bool needMore = wxAppConsoleBase::ProcessIdle();
     wxIdleEvent event;
-    bool needMore = false;
     wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetFirst();
     while (node)
     {
@@ -367,9 +389,6 @@ bool wxAppBase::ProcessIdle()
         node = node->GetNext();
     }
 
-    if (wxAppConsole::ProcessIdle())
-        needMore = true;
-
     // 'Garbage' collection of windows deleted with Close().
     DeletePendingObjects();