X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a5001e9361fe01a134b45fa5caf55477e8368d26..079f4130b861d094c79e0952966caad8b85dab67:/src/dfb/evtloop.cpp diff --git a/src/dfb/evtloop.cpp b/src/dfb/evtloop.cpp index 9581c327f1..7f7807ac72 100644 --- a/src/dfb/evtloop.cpp +++ b/src/dfb/evtloop.cpp @@ -27,7 +27,7 @@ #include "wx/thread.h" #include "wx/generic/private/timer.h" -#include "wx/private/selectdispatcher.h" +#include "wx/private/fdiodispatcher.h" #include "wx/dfb/private.h" #include "wx/nonownedwnd.h" @@ -83,18 +83,28 @@ bool wxGUIEventLoop::Pending() const bool wxGUIEventLoop::Dispatch() { - wxCHECK_MSG( ms_buffer, false, "invalid event buffer" ); - // 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 + // + // TODO: remove this hack, instead use CreateFileDescriptor() to properly + // multiplex GUI and socket input const int TIMEOUT = 100; + // treat time out (-1 return value) as normal successful return so that + // OnNextIteration() is called + return !!DispatchTimeout(TIMEOUT); +} + +int wxGUIEventLoop::DispatchTimeout(unsigned long timeout) +{ + wxCHECK_MSG( ms_buffer, 0, "invalid event buffer" ); + // release the GUI mutex so that other threads have a chance to post // events: wxMutexGuiLeave(); - bool rv = ms_buffer->WaitForEventWithTimeout(0, TIMEOUT); + bool rv = ms_buffer->WaitForEventWithTimeout(0, timeout); // and acquire it back before calling any event handlers: wxMutexGuiEnter(); @@ -112,9 +122,7 @@ bool wxGUIEventLoop::Dispatch() } case DFB_TIMEOUT: - // timed out, pretend we processed an event so that - // OnNextIteration is called - break; + return -1; default: // don't terminate the loop due to errors (they were reported @@ -123,7 +131,7 @@ bool wxGUIEventLoop::Dispatch() } } - return true; + return 1; } void wxGUIEventLoop::WakeUp() @@ -141,7 +149,7 @@ void wxGUIEventLoop::OnNextIteration() #if wxUSE_SOCKETS // handle any pending socket events: - wxSelectDispatcher::DispatchPending(); + wxFDIODispatcher::DispatchPending(); #endif }