]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/gsocketiohandler.cpp
Rework the wxCusor ctor taking wx stock number to provide as many cursors as
[wxWidgets.git] / src / common / gsocketiohandler.cpp
index a5ae3e476d1364338e03f7606eee65e4917b4f1e..ece535c02cf910f62727c2b758b5d3a955afaad4 100644 (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);