]> git.saurik.com Git - wxWidgets.git/commitdiff
No real changes, just refactor wxEventLoop/wxApp::ProcessIdle().
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 17 Jul 2009 16:52:43 +0000 (16:52 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 17 Jul 2009 16:52:43 +0000 (16:52 +0000)
Old code called wxApp::ProcessIdle() from wxEventLoopManualRun::Run() which called wxEventLoop::ProcessIdle() which called wxApp methods from it. In the new version wxEventLoopManualRun::Run() calls wxEventLoopManualRun::ProcessIdle() which calls wxApp::ProcessIdle() which calls other wxApp methods which seems to make more sense and also allows overriding ProcessIdle() in either wxEventLoopManual or wxApp-derived classes.

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

include/wx/app.h
include/wx/evtloop.h
src/common/appbase.cpp
src/common/evtloopcmn.cpp

index f754a7b117f5b524c47362e8e01f836c11dfef11..a4478b6977027e836f26acbd2fb16437540836aa 100644 (file)
@@ -320,6 +320,8 @@ public:
     // wxEventLoop redirections
     // ------------------------
 
+    // all these functions are forwarded to the corresponding methods of the
+    // currently active event loop -- and do nothing if there is none
     virtual bool Pending();
     virtual bool Dispatch();
 
@@ -329,6 +331,13 @@ public:
     bool Yield(bool onlyIfNeeded = false);
 
     virtual void WakeUpIdle();
+
+    // this method is called by the active event loop when there are no events
+    // to process
+    //
+    // by default it generates the idle events and if you override it in your
+    // derived class you should call the base class version to ensure that idle
+    // events are still sent out
     virtual bool ProcessIdle();
 
 
index 8bea93090a5bb8bf4e00063858f4bf5de9fa6306..6b2e7c7c951efd5bc8848dceec4b933c4ab11fdf 100644 (file)
@@ -99,12 +99,13 @@ public:
     // idle handling
     // -------------
 
-    // make sure that idle events are sent again
+        // make sure that idle events are sent again
     virtual void WakeUpIdle();
 
         // this virtual function is called  when the application
-        // becomes idle and normally just sends wxIdleEvent to all interested
-        // parties
+        // becomes idle and by default it forwards to wxApp::ProcessIdle() and
+        // while it can be overridden in a custom event loop, you must call the
+        // base class version to ensure that idle events are still generated
         //
         // it should return true if more idle events are needed, false if not
     virtual bool ProcessIdle();
index 14a4cf64da15b6a0bc64a18b8175e16360a9d906..936d8d21b52d22dac845d99328eea1311a509e98 100644 (file)
@@ -333,9 +333,15 @@ void wxAppConsoleBase::WakeUpIdle()
 
 bool wxAppConsoleBase::ProcessIdle()
 {
-    wxEventLoopBase * const loop = wxEventLoopBase::GetActive();
+    // process pending wx events before sending idle events
+    ProcessPendingEvents();
+
+    // synthesize an idle event and check if more of them are needed
+    wxIdleEvent event;
+    event.SetEventObject(this);
+    ProcessEvent(event);
 
-    return loop && loop->ProcessIdle();
+    return event.MoreRequested();
 }
 
 // ----------------------------------------------------------------------------
index 15813725a8843c9374f707529074942df0cc27a9..f4adbbed10bcd5218273b592f51770b0a72ddde6 100644 (file)
@@ -63,18 +63,7 @@ void wxEventLoopBase::WakeUpIdle()
 
 bool wxEventLoopBase::ProcessIdle()
 {
-    if (!wxTheApp)
-        return false;
-
-    // process pending wx events before sending idle events
-    wxTheApp->ProcessPendingEvents();
-
-    // synthetize an idle event and send it to wxApp
-    wxIdleEvent event;
-    event.SetEventObject(wxTheApp);
-    wxTheApp->ProcessEvent(event);
-
-    return event.MoreRequested();
+    return wxTheApp && wxTheApp->ProcessIdle();
 }
 
 bool wxEventLoopBase::Yield(bool onlyIfNeeded)
@@ -135,7 +124,7 @@ int wxEventLoopManual::Run()
 
                 // generate and process idle events for as long as we don't
                 // have anything else to do
-                while ( !Pending() && (wxTheApp && wxTheApp->ProcessIdle()) )
+                while ( !Pending() && ProcessIdle() )
                     ;
 
                 // if the "should exit" flag is set, the loop should terminate