X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/af57c51ab758ad9810ea5bbb3703341cd5f367b1..69659fd770f615210efac4b4fa741b3ad6223616:/src/common/gsocketiohandler.cpp diff --git a/src/common/gsocketiohandler.cpp b/src/common/gsocketiohandler.cpp index a5ae3e476d..ece535c02c 100644 --- a/src/common/gsocketiohandler.cpp +++ b/src/common/gsocketiohandler.cpp @@ -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);