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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user