]> git.saurik.com Git - wxWidgets.git/blobdiff - src/dfb/evtloop.cpp
Don't reuse the same event object for multiple events in wxGTK.
[wxWidgets.git] / src / dfb / evtloop.cpp
index d18b73a2515c2ec75ab20897e9f10b429f445f90..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"
@@ -202,8 +203,20 @@ 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:
     // TODO: implement event filtering using the eventsToProcess mask
 
     // process all pending events:
@@ -212,4 +225,17 @@ void wxGUIEventLoop::Yield()
 
     // handle timers, sockets etc.
     OnNextIteration();
 
     // 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;
 }
 }