]> git.saurik.com Git - wxWidgets.git/blobdiff - src/dfb/evtloop.cpp
Merge in from trunk r64802 - r68625
[wxWidgets.git] / src / dfb / evtloop.cpp
index fd3f6b58187419ea1fdf6350225049b60dfd961b..726ea53b511de8d0dccdcdb4e0cabb783ada73c5 100644 (file)
@@ -23,6 +23,7 @@
 
 #ifndef WX_PRECOMP
     #include "wx/app.h"
 
 #ifndef WX_PRECOMP
     #include "wx/app.h"
+    #include "wx/log.h"
 #endif
 
 #include "wx/thread.h"
 #endif
 
 #include "wx/thread.h"
@@ -31,6 +32,8 @@
 #include "wx/nonownedwnd.h"
 #include "wx/buffer.h"
 
 #include "wx/nonownedwnd.h"
 #include "wx/buffer.h"
 
+#include <errno.h>
+
 #define TRACE_EVENTS "events"
 
 // ===========================================================================
 #define TRACE_EVENTS "events"
 
 // ===========================================================================
@@ -200,12 +203,39 @@ wxIDirectFBEventBufferPtr wxGUIEventLoop::GetDirectFBEventBuffer()
 // events dispatch and loop handling
 //-----------------------------------------------------------------------------
 
 // events dispatch and loop handling
 //-----------------------------------------------------------------------------
 
-void wxGUIEventLoop::Yield()
+bool wxGUIEventLoop::YieldFor(long eventsToProcess)
 {
 {
+#if wxUSE_THREADS
+    if ( !wxThread::IsMain() )
+        return true; // can't process events from other threads
+#endif // wxUSE_THREADS
+
+    m_isInsideYield = true;
+    m_eventsToProcessInsideYield = eventsToProcess;
+
+#if wxUSE_LOG
+    wxLog::Suspend();
+#endif // wxUSE_LOG
+
+    // TODO: implement event filtering using the eventsToProcess mask
+
     // process all pending events:
     while ( Pending() )
         Dispatch();
 
     // handle timers, sockets etc.
     OnNextIteration();
     // process all pending events:
     while ( Pending() )
         Dispatch();
 
     // handle timers, sockets etc.
     OnNextIteration();
+
+    // it's necessary to call ProcessIdle() to update the frames sizes which
+    // might have been changed (it also will update other things set from
+    // OnUpdateUI() which is a nice (and desired) side effect)
+    while ( ProcessIdle() ) {}
+
+#if wxUSE_LOG
+    wxLog::Resume();
+#endif // wxUSE_LOG
+
+    m_isInsideYield = false;
+
+    return true;
 }
 }