]> git.saurik.com Git - wxWidgets.git/commitdiff
Allow using socket from both wxBase and wxCore (adopting to changes from r50831)
authorStefan Neis <Stefan.Neis@t-online.de>
Sun, 6 Jan 2008 22:47:01 +0000 (22:47 +0000)
committerStefan Neis <Stefan.Neis@t-online.de>
Sun, 6 Jan 2008 22:47:01 +0000 (22:47 +0000)
Use Unix' gsocketiohandler files for wxBase.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51055 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

build/bakefiles/files.bkl
include/wx/os2/apptbase.h
include/wx/os2/apptrait.h
src/os2/gsockpm.cpp

index 98e8bf0153ea55fb60c626fd1bf0d9d567bd3a8b..01b133293c6e1b15937dcccde5c327d15c743ed1 100644 (file)
@@ -269,6 +269,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
 <set var="BASE_OS2_SRC" hints="files">
     src/common/fdiodispatcher.cpp
     src/common/selectdispatcher.cpp
+    src/common/gsocketiohandler.cpp
     src/unix/appunix.cpp
     src/unix/evtloopunix.cpp
     src/unix/timerunx.cpp
@@ -284,6 +285,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
 <set var="BASE_OS2_HDR" hints="files">
     wx/private/fdiodispatcher.h
     wx/private/selectdispatcher.h
+    wx/private/gsocketiohandler.h
     wx/unix/app.h
     wx/os2/apptbase.h
     wx/os2/apptrait.h
index 934ef281e5c52c5005d84381290ae2b05d73c899..4694aff2dd584409960f338627a0612fee0593d6 100644 (file)
@@ -27,6 +27,12 @@ public:
 
     // Clean up message queue.
     virtual void TerminateGui(unsigned long ulHab);
+#if wxUSE_SOCKETS
+    // returns the select()-based socket manager for console applications which
+    // is also used by some ports (wxX11, wxDFB) in the GUI build (hence it is
+    // here and not in wxConsoleAppTraits)
+    virtual GSocketManager *GetSocketManager();
+#endif
 };
 
 #endif // _WX_OS2_APPTBASE_H_
index c77a07486a22c30070d7d135b4b953ff9aac19b0..34b5e30233e0a166991907764d6f579807edefcf 100644 (file)
@@ -47,6 +47,9 @@ public:
 #ifdef __WXGTK__
     virtual wxString GetDesktopEnvironment() const;
 #endif
+#if wxUSE_SOCKETS
+    virtual GSocketManager *GetSocketManager();
+#endif
 };
 
 #endif // wxUSE_GUI
index d51227e8433ac0b5f9d6f7f377edb1c60a7223e4..ef80cd130e3c13e1c3fd8980168f9291b00a76af 100644 (file)
@@ -31,67 +31,32 @@ static void _GSocket_PM_Output(void *data)
     socket->Detected_Write();
 }
 
-void GSocketGUIFunctionsTableConcrete::Install_Callback(GSocket *socket, GSocketEvent event)
+class PMSocketManager : public GSocketInputBasedManager
 {
-    int *m_id = (int *)(socket->m_gui_dependent);
-    int c;
-
-    if (socket->m_fd == -1)
-        return;
-
-    switch (event)
+public:
+    virtual int AddInput(GSocket *socket, SocketDir d)
     {
-        case GSOCK_LOST:       /* fall-through */
-        case GSOCK_INPUT:      c = 0; break;
-        case GSOCK_OUTPUT:     c = 1; break;
-        case GSOCK_CONNECTION: c = ((socket->m_server) ? 0 : 1); break;
-        default: return;
-    }
-
-    if (m_id[c] != -1)
-        wxTheApp->RemoveSocketHandler(m_id[c]);
 
-    if (c == 0)
-    {
-        m_id[0] = wxTheApp->AddSocketHandler(socket->m_fd, wxSockReadMask,
-                                             _GSocket_PM_Input, (void *)socket);
-    }
-    else
-    {
-        m_id[1] = wxTheApp->AddSocketHandler(socket->m_fd, wxSockWriteMask,
-                                             _GSocket_PM_Output, (void *)socket);
+      if (d == FD_OUTPUT)
+          return wxTheApp->AddSocketHandler(socket->m_fd, wxSockWriteMask,
+                                           _GSocket_PM_Output, (void *)socket);
+      else
+          return wxTheApp->AddSocketHandler(socket->m_fd, wxSockReadMask,
+                                         _GSocket_PM_Input, (void *)socket);
     }
-}
 
-void GSocketGUIFunctionsTableConcrete::Uninstall_Callback(GSocket *socket, GSocketEvent event)
-{
-    int *m_id = (int *)(socket->m_gui_dependent);
-    int c;
-    switch (event)
+    virtual void RemoveInput(int fd)
     {
-        case GSOCK_LOST:       /* fall-through */
-        case GSOCK_INPUT:      c = 0; break;
-        case GSOCK_OUTPUT:     c = 1; break;
-        case GSOCK_CONNECTION: c = ((socket->m_server) ? 0 : 1); break;
-        default: return;
+        wxTheApp->RemoveSocketHandler(fd);
     }
-    if (m_id[c] != -1)
-        wxTheApp->RemoveSocketHandler(m_id[c]);
-
-    m_id[c] = -1;
-}
+};
 
-void GSocketGUIFunctionsTableConcrete::Enable_Events(GSocket *socket)
+GSocketManager *wxGUIAppTraits::GetSocketManager()
 {
-    Install_Callback(socket, GSOCK_INPUT);
-    Install_Callback(socket, GSOCK_OUTPUT);
+    static GTKSocketManager s_manager;
+    return &s_manager;
 }
 
-void GSocketGUIFunctionsTableConcrete::Disable_Events(GSocket *socket)
-{
-    Uninstall_Callback(socket, GSOCK_INPUT);
-    Uninstall_Callback(socket, GSOCK_OUTPUT);
-}
 
 #else /* !wxUSE_SOCKETS */