Change wxWakeUpPipe to be a wxEventLoopSourceHandler.

No real changes but use wxEventLoopSource::AddSourceForFD() instead of
wxFDIODispatcher::RegisterFD() for this pipe because this is the preferred way
and because it will allow reusing this class for wxExecute() purposes later.

See #10258.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74346 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2013-07-03 00:30:39 +00:00
parent 64b4a35954
commit 39bc0168c3
4 changed files with 34 additions and 22 deletions

View File

@@ -54,30 +54,44 @@
wxConsoleEventLoop::wxConsoleEventLoop()
{
m_wakeupPipe = new wxWakeUpPipeMT;
const int pipeFD = m_wakeupPipe->GetReadFd();
// Be pessimistic initially and assume that we failed to initialize.
m_dispatcher = NULL;
m_wakeupPipe = NULL;
m_wakeupSource = NULL;
// Create the pipe.
wxScopedPtr<wxWakeUpPipeMT> wakeupPipe(new wxWakeUpPipeMT);
const int pipeFD = wakeupPipe->GetReadFd();
if ( pipeFD == wxPipe::INVALID_FD )
{
wxDELETE(m_wakeupPipe);
m_dispatcher = NULL;
return;
}
// And start monitoring it in our event loop.
m_wakeupSource = wxEventLoopBase::AddSourceForFD
(
pipeFD,
wakeupPipe.get(),
wxFDIO_INPUT
);
if ( !m_wakeupSource )
return;
// This is a bit ugly but we know that AddSourceForFD() used the currently
// active dispatcher to register this source, so use the same one for our
// other operations. Of course, currently the dispatcher returned by
// wxFDIODispatcher::Get() is always the same one anyhow so it doesn't
// really matter, but if we started returning different things later, it
// would.
m_dispatcher = wxFDIODispatcher::Get();
if ( !m_dispatcher )
return;
m_dispatcher->RegisterFD(pipeFD, m_wakeupPipe, wxFDIO_INPUT);
m_wakeupPipe = wakeupPipe.release();
}
wxConsoleEventLoop::~wxConsoleEventLoop()
{
if ( m_wakeupPipe )
{
if ( m_dispatcher )
{
m_dispatcher->UnregisterFD(m_wakeupPipe->GetReadFd());
}
delete m_wakeupSource;
delete m_wakeupPipe;
}