wxSocketManagerMac was never created under OS X since wxSocket code
refactoring as wxGUIAppTraits::GetSocketManager() wasn't overridden.
Doing this required an extra nasty hack with a global variable in the base
library which is used just to pass the socket manager pointer from the net
library to the core one without creating a dependency between them but this
seems unfortunately unavoidable.
See #11030.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61676
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
//
// TODO: Should we use XtAddInput() for wxX11 too? Or, vice versa, if there is
// no advantage in doing this compared to the generic way currently used
-// by wxX11, should we continue to use GTK/Motif- specific stuff?
-#if defined(__WXGTK__) || defined(__WXMOTIF__)
+// by wxX11, should we continue to use GTK/Motif-specific stuff?
+#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__)
#define wxHAS_GUI_PROCESS_CALLBACKS
#define wxHAS_GUI_SOCKET_MANAGER
#endif
-#ifdef __DARWIN__
- #define wxHAS_GUI_PROCESS_CALLBACKS
-#endif
-
class WXDLLIMPEXP_CORE wxGUIAppTraits : public wxGUIAppTraitsBase
{
public:
CFSocketDisableCallBacks(socket->GetSocket(), GetCFCallback(socket, event));
}
-// set the wxBase variable to point to our wxSocketManager implementation
+// set the wxBase variable to point to CF wxSocketManager implementation so
+// that the GUI code in utilsexc_cf.cpp could return it from its traits method
//
-// see comments in wx/apptrait.h for the explanation of why do we do it
-// like this
-static struct ManagerSetter
+// this is very roundabout but necessary to allow us to have different
+// behaviours in console and GUI applications while avoiding dependencies of
+// GUI library on the network one
+extern WXDLLIMPEXP_BASE wxSocketManager *wxOSXSocketManagerCF;
+
+static struct OSXManagerSetter
{
- ManagerSetter()
+ OSXManagerSetter()
{
static wxSocketManagerMac s_manager;
- wxAppTraits::SetDefaultSocketManager(&s_manager);
+ wxOSXSocketManagerCF = &s_manager;
}
-} gs_managerSetter;
+} gs_OSXManagerSetter;
#endif // wxUSE_SOCKETS
// Default path style
#define kDefaultPathStyle kCFURLPOSIXPathStyle
+#if wxUSE_SOCKETS
+// global pointer which lives in the base library, set from the net one (see
+// sockosx.cpp) and used from the GUI code (see utilsexc_cf.cpp) -- ugly but
+// needed hack, see the above-mentioned files for more information
+class wxSocketManager;
+extern WXDLLIMPEXP_BASE wxSocketManager *wxOSXSocketManagerCF;
+wxSocketManager *wxOSXSocketManagerCF = NULL;
+#endif // wxUSE_SOCKETS
+
extern bool WXDLLEXPORT wxIsDebuggerRunning()
{
// TODO : try to find out ...
}
#endif
+#if wxUSE_SOCKETS
+
+// we need to implement this method in a file of the core library as it should
+// only be used for the GUI applications but we can't use socket stuff from it
+// directly as this would create unwanted dependencies of core on net library
+//
+// so we have this global pointer which is set from sockosx.cpp when it is
+// linked in and we simply return it from here
+extern WXDLLIMPEXP_BASE wxSocketManager *wxOSXSocketManagerCF;
+wxSocketManager *wxGUIAppTraits::GetSocketManager()
+{
+ return wxOSXSocketManagerCF ? wxOSXSocketManagerCF
+ : wxGUIAppTraitsBase::GetSocketManager();
+}
+
+#endif // wxUSE_SOCKETS