23 #if SDL_VIDEO_DRIVER_X11
25 #define DEBUG_DYNAMIC_X11 0
33 #ifdef SDL_VIDEO_DRIVER_X11_DYNAMIC
44 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC
45 #define SDL_VIDEO_DRIVER_X11_DYNAMIC NULL
47 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT
48 #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT NULL
50 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR
51 #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR NULL
53 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA
54 #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA NULL
56 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2
57 #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 NULL
59 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR
60 #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR NULL
62 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS
63 #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS NULL
65 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE
66 #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE NULL
69 static x11dynlib x11libs[] = {
81 X11_GetSym(
const char *fnname,
int *pHasModule)
86 if (x11libs[i].lib !=
NULL) {
95 printf(
"X11: Found '%s' in %s (%p)\n", fnname, x11libs[i].libname, fn);
97 printf(
"X11: Symbol '%s' NOT FOUND!\n", fnname);
108 #define SDL_X11_MODULE(modname)
109 #define SDL_X11_SYM(rc,fn,params,args,ret) \
110 typedef rc (*SDL_DYNX11FN_##fn) params; \
111 static SDL_DYNX11FN_##fn p##fn = NULL; \
112 rc fn params { ret p##fn args ; }
114 #undef SDL_X11_MODULE
119 #ifdef X_HAVE_UTF8_STRING
120 typedef XIC(*SDL_DYNX11FN_XCreateIC) (XIM,...);
121 SDL_DYNX11FN_XCreateIC pXCreateIC =
NULL;
122 typedef char *(*SDL_DYNX11FN_XGetICValues) (XIC, ...);
123 SDL_DYNX11FN_XGetICValues pXGetICValues =
NULL;
127 #define SDL_X11_MODULE(modname) int SDL_X11_HAVE_##modname = 0;
128 #define SDL_X11_SYM(rc,fn,params,args,ret)
130 #undef SDL_X11_MODULE
134 static int x11_load_refcount = 0;
139 #ifdef SDL_VIDEO_DRIVER_X11_DYNAMIC
141 if (x11_load_refcount > 0) {
142 if (--x11_load_refcount == 0) {
146 #define SDL_X11_MODULE(modname) SDL_X11_HAVE_##modname = 0;
147 #define SDL_X11_SYM(rc,fn,params,args,ret) p##fn = NULL;
149 #undef SDL_X11_MODULE
152 #ifdef X_HAVE_UTF8_STRING
154 pXGetICValues =
NULL;
158 if (x11libs[i].lib !=
NULL) {
160 x11libs[
i].lib =
NULL;
174 #ifdef SDL_VIDEO_DRIVER_X11_DYNAMIC
176 if (x11_load_refcount++ == 0) {
180 if (x11libs[i].libname !=
NULL) {
185 #define SDL_X11_MODULE(modname) SDL_X11_HAVE_##modname = 1;
186 #define SDL_X11_SYM(a,fn,x,y,z)
188 #undef SDL_X11_MODULE
191 #define SDL_X11_MODULE(modname) thismod = &SDL_X11_HAVE_##modname;
192 #define SDL_X11_SYM(a,fn,x,y,z) p##fn = (SDL_DYNX11FN_##fn) X11_GetSym(#fn,thismod);
194 #undef SDL_X11_MODULE
197 #ifdef X_HAVE_UTF8_STRING
198 pXCreateIC = (SDL_DYNX11FN_XCreateIC)
200 pXGetICValues = (SDL_DYNX11FN_XGetICValues)
204 if (SDL_X11_HAVE_BASEXLIB) {
214 #define SDL_X11_MODULE(modname) SDL_X11_HAVE_##modname = 1;
215 #define SDL_X11_SYM(a,fn,x,y,z)
217 #undef SDL_X11_MODULE
220 #ifdef X_HAVE_UTF8_STRING
221 pXCreateIC = XCreateIC;
222 pXGetICValues = XGetICValues;
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA
#define SDL_X11_HAVE_UTF8
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS
DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile)
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR
int SDL_X11_LoadSymbols(void)
DECLSPEC void SDLCALL SDL_UnloadObject(void *handle)
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR
DECLSPEC void SDLCALL SDL_ClearError(void)
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2
#define SDL_TABLESIZE(table)
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT
void SDL_X11_UnloadSymbols(void)
DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle, const char *name)
#define SDL_VIDEO_DRIVER_X11_DYNAMIC
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE