]> git.saurik.com Git - wxWidgets.git/blobdiff - src/dfb/evtloop.cpp
Avoid calling gtk_window_get_position() from "configure-event" handler, if possible.
[wxWidgets.git] / src / dfb / evtloop.cpp
index 89d0f753880406f67ee9b26e92e8d17c3b954d1e..9dc00616dbd38303aef21cb0488263dadd277e60 100644 (file)
@@ -3,7 +3,6 @@
 // Purpose:     wxEventLoop implementation
 // Author:      Vaclav Slavik
 // Created:     2006-08-16
 // Purpose:     wxEventLoop implementation
 // Author:      Vaclav Slavik
 // Created:     2006-08-16
-// RCS-ID:      $Id$
 // Copyright:   (c) 2006 REA Elektronik GmbH
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 // Copyright:   (c) 2006 REA Elektronik GmbH
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -23,6 +22,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,12 +202,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;
 }
 }