create the single global IO dispatcher in wxFDIODispatcher; don't use wxSelectDispatcher in wxGSocket as the global dispatcher may be of a different type (modified patch 1733626)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47471 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-07-14 20:18:38 +00:00
parent 7523de907d
commit 5e1eac149f
10 changed files with 121 additions and 107 deletions

View File

@@ -127,14 +127,21 @@ void GSocketGUIFunctionsTableConcrete::Install_Callback(GSocket *socket,
default: return;
}
wxSelectDispatcher * const dispatcher = wxSelectDispatcher::Get();
wxFDIODispatcher * const dispatcher = wxFDIODispatcher::Get();
if ( !dispatcher )
return;
wxGSocketIOHandler *
handler = (wxGSocketIOHandler*)dispatcher->FindHandler(fd);
if ( !handler )
wxGSocketIOHandler *& handler = socket->m_handler;
// we should register the new handlers but modify the existing ones in place
bool registerHandler;
if ( handler )
{
registerHandler = false;
}
else // no existing handler
{
registerHandler = true;
handler = new wxGSocketIOHandler(socket);
}
@@ -149,7 +156,10 @@ void GSocketGUIFunctionsTableConcrete::Install_Callback(GSocket *socket,
handler->AddFlag(wxFDIO_OUTPUT);
}
dispatcher->RegisterFD(fd, handler, handler->GetFlags());
if ( registerHandler )
dispatcher->RegisterFD(fd, handler, handler->GetFlags());
else
dispatcher->ModifyFD(fd, handler, handler->GetFlags());
}
void GSocketGUIFunctionsTableConcrete::Uninstall_Callback(GSocket *socket,
@@ -175,12 +185,11 @@ void GSocketGUIFunctionsTableConcrete::Uninstall_Callback(GSocket *socket,
const wxFDIODispatcherEntryFlags flag = c == 0 ? wxFDIO_INPUT : wxFDIO_OUTPUT;
wxSelectDispatcher * const dispatcher = wxSelectDispatcher::Get();
wxFDIODispatcher * const dispatcher = wxFDIODispatcher::Get();
if ( !dispatcher )
return;
wxGSocketIOHandler * const
handler = wx_static_cast(wxGSocketIOHandler *, dispatcher->FindHandler(fd));
wxGSocketIOHandler *& handler = socket->m_handler;
if ( handler )
{
handler->RemoveFlag(flag);