X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2ccfebab0925dd4bd5ad1671ad290ebc3141d782..a25b76f5f92c3cc116cb4ca53e8e5a6bcd3ff42f:/src/unix/evtloopunix.cpp diff --git a/src/unix/evtloopunix.cpp b/src/unix/evtloopunix.cpp index b26c7a5950..763b73ef73 100644 --- a/src/unix/evtloopunix.cpp +++ b/src/unix/evtloopunix.cpp @@ -36,6 +36,9 @@ #include "wx/unix/private/epolldispatcher.h" #include "wx/unix/private/wakeuppipe.h" #include "wx/private/selectdispatcher.h" +#include "wx/private/eventloopsourcesmanager.h" +#include "wx/private/fdioeventloopsourcehandler.h" +#include "wx/private/eventloopsourcesmanager.h" #if wxUSE_EVENTLOOP_SOURCE #include "wx/evtloopsrc.h" @@ -51,7 +54,7 @@ wxConsoleEventLoop::wxConsoleEventLoop() { - m_wakeupPipe = new wxWakeUpPipe; + m_wakeupPipe = new wxWakeUpPipeMT; const int pipeFD = m_wakeupPipe->GetReadFd(); if ( pipeFD == wxPipe::INVALID_FD ) { @@ -86,54 +89,37 @@ wxConsoleEventLoop::~wxConsoleEventLoop() #if wxUSE_EVENTLOOP_SOURCE -// This class is a temporary bridge between event loop sources and -// FDIODispatcher. It is going to be removed soon, when all subject interfaces -// are modified -class wxFDIOEventLoopSourceHandler : public wxFDIOHandler +class wxConsoleEventLoopSourcesManager : public wxEventLoopSourcesManagerBase { public: - wxFDIOEventLoopSourceHandler(wxEventLoopSourceHandler* handler) : - m_impl(handler) { } - - virtual void OnReadWaiting() - { - m_impl->OnReadWaiting(); - } - virtual void OnWriteWaiting() + wxEventLoopSource* AddSourceForFD( int fd, + wxEventLoopSourceHandler *handler, + int flags) { - m_impl->OnWriteWaiting(); - } + wxCHECK_MSG( fd != -1, NULL, "can't monitor invalid fd" ); - virtual void OnExceptionWaiting() - { - m_impl->OnExceptionWaiting(); - } + wxLogTrace(wxTRACE_EVT_SOURCE, + "Adding event loop source for fd=%d", fd); -protected: - wxEventLoopSourceHandler* m_impl; -}; + // we need a bridge to wxFDIODispatcher + // + // TODO: refactor the code so that only wxEventLoopSourceHandler is used + wxScopedPtr + fdioHandler(new wxFDIOEventLoopSourceHandler(handler)); -wxEventLoopSource * -wxConsoleEventLoop::AddSourceForFD(int fd, - wxEventLoopSourceHandler *handler, - int flags) -{ - wxCHECK_MSG( fd != -1, NULL, "can't monitor invalid fd" ); - - wxLogTrace(wxTRACE_EVT_SOURCE, - "Adding event loop source for fd=%d", fd); + if ( !wxFDIODispatcher::Get()->RegisterFD(fd, fdioHandler.get(), flags) ) + return NULL; - // we need a bridge to wxFDIODispatcher - // - // TODO: refactor the code so that only wxEventLoopSourceHandler is used - wxScopedPtr - fdioHandler(new wxFDIOEventLoopSourceHandler(handler)); + return new wxUnixEventLoopSource(wxFDIODispatcher::Get(), fdioHandler.release(), + fd, handler, flags); + } +}; - if ( !m_dispatcher->RegisterFD(fd, fdioHandler.get(), flags) ) - return NULL; +wxEventLoopSourcesManagerBase* wxAppTraits::GetEventLoopSourcesManager() +{ + static wxConsoleEventLoopSourcesManager s_eventLoopSourcesManager; - return new wxUnixEventLoopSource(m_dispatcher, fdioHandler.release(), - fd, handler, flags); + return &s_eventLoopSourcesManager; } wxUnixEventLoopSource::~wxUnixEventLoopSource()