--- SDL-1.2.14.orig/src/video/x11/SDL_x11dyn.c 2009-10-13 01:07:15.000000000 +0200 +++ SDL-1.2.14/src/video/x11/SDL_x11dyn.c 2013-07-12 12:15:17.000000000 +0200 @@ -108,6 +108,20 @@ char *(*pXGetICValues)(XIC, ...) = NULL; #undef SDL_X11_MODULE #undef SDL_X11_SYM +static void *SDL_XGetRequest_workaround(Display* dpy, CARD8 type, size_t len) +{ + xReq *req; + WORD64ALIGN + if (dpy->bufptr + len > dpy->bufmax) + _XFlush(dpy); + dpy->last_req = dpy->bufptr; + req = (xReq*)dpy->bufptr; + req->reqType = type; + req->length = len / 4; + dpy->bufptr += len; + dpy->request++; + return req; +} static int x11_load_refcount = 0; @@ -168,6 +182,15 @@ int SDL_X11_LoadSymbols(void) X11_GetSym("XGetICValues",&SDL_X11_HAVE_UTF8,(void **)&pXGetICValues); #endif + /* + * In case we're built with newer Xlib headers, we need to make sure + * that _XGetRequest() is available, even on older systems. + * Otherwise, various Xlib macros we use will call a NULL pointer. + */ + if (!SDL_X11_HAVE_XGETREQUEST) { + p_XGetRequest = SDL_XGetRequest_workaround; + } + if (SDL_X11_HAVE_BASEXLIB) { /* all required symbols loaded. */ SDL_ClearError(); } else {