]> git.saurik.com Git - wxWidgets.git/commitdiff
wxDFB: fix events processing to support sockets events
authorVáclav Slavík <vslavik@fastmail.fm>
Mon, 18 Dec 2006 17:24:06 +0000 (17:24 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Mon, 18 Dec 2006 17:24:06 +0000 (17:24 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43999 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/dfb/evtloop.h
src/dfb/app.cpp
src/dfb/evtloop.cpp

index cf77e26c1322cb2f4eb212c79032b1067195066d..9845acd2653fb6a67d6705f7322ae38b433c12b4 100644 (file)
@@ -31,6 +31,10 @@ public:
     // returns DirectFB event buffer used by wx
     static wxIDirectFBEventBufferPtr GetDirectFBEventBuffer();
 
+    // wxYield implementation: iterate the loop as long as there are any
+    // pending events
+    void Yield();
+
 protected:
     virtual void WakeUp();
     virtual void OnNextIteration();
index 5f7a8004eb02d147a8e1c66b31cd33a474655aac..e84aa6ae98be5450a4568ba7b075fa600f36e5f2 100644 (file)
@@ -138,10 +138,7 @@ bool wxApp::Yield(bool onlyIfNeeded)
     wxLog::Suspend();
 
     if ( wxEventLoop::GetActive() )
-    {
-        while (wxEventLoop::GetActive()->Pending())
-            wxEventLoop::GetActive()->Dispatch();
-    }
+        wxEventLoop::GetActive()->Yield();
 
     // it's necessary to call ProcessIdle() to update the frames sizes which
     // might have been changed (it also will update other things set from
index 30ed0b7259343d335ce0b0058d561f8884848cb5..2ecc94a9b4212a7fd3fd0792349df235cdc6e6d7 100644 (file)
@@ -86,9 +86,6 @@ bool wxEventLoop::Dispatch()
     // NB: we don't block indefinitely waiting for an event, but instead
     //     time out after a brief period in order to make sure that
     //     OnNextIteration() will be called frequently enough
-    //
-    //     FIXME: call NotifyTimers() and wxSocketEventDispatcher::RunLoop() from here
-    //            (and loop) instead?
     const int TIMEOUT = 100;
 
     if ( ms_buffer->WaitForEventWithTimeout(0, TIMEOUT) )
@@ -127,8 +124,6 @@ void wxEventLoop::WakeUp()
 
 void wxEventLoop::OnNextIteration()
 {
-    // see the comment in Dispatch
-
 #if wxUSE_TIMER
     wxTimer::NotifyTimers();
 #endif
@@ -139,6 +134,16 @@ void wxEventLoop::OnNextIteration()
 #endif
 }
 
+void wxEventLoop::Yield()
+{
+    // process all pending events:
+    while ( Pending() )
+        Dispatch();
+
+    // handle timers, sockets etc.
+    OnNextIteration();
+}
+
 
 //-----------------------------------------------------------------------------
 // DirectFB -> wxWidgets events translation