Dynamically load X11 libraries like we currently do for alsa, esd, etc.

This allows you to run an SDL program on a system without Xlib, since it'll
 just report the x11 target unavailable at runtime.

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401171
This commit is contained in:
Ryan C. Gordon 2005-11-05 19:53:37 +00:00
parent 2f61404a42
commit 0d4d13b23f
24 changed files with 942 additions and 514 deletions

View file

@ -609,11 +609,45 @@ CheckX11()
AC_PATH_X
AC_PATH_XTRA
if test x$have_x = xyes; then
CFLAGS="$CFLAGS $X_CFLAGS -DENABLE_X11 -DXTHREADS -I$srcdir/include -I$srcdir/src/video"
AC_ARG_ENABLE(x11-shared,
[ --enable-x11-shared dynamically load X11 support [default=yes]],
, enable_x11_shared=yes)
dnl !!! FIXME: make this work?
dnl x11_lib_spec=`echo $X11_LIBS | sed 's/.*-L\([[^ ]]*\).*/\1\/libX11.so.*/'`
dnl x11_lib=`ls $x11_lib_spec | sed 's/.*\/\(.*\)/\1/; q'`
dnl echo "-- $x11_lib_spec -> $x11_lib"
dnl x11ext_lib_spec=`echo $X11EXT_LIBS | sed 's/.*-L\([[^ ]]*\).*/\1\/libXext.so.*/'`
dnl x11ext_lib=`ls $x11ext_lib_spec | sed 's/.*\/\(.*\)/\1/; q'`
dnl echo "-- $x11ext_lib_spec -> $x11ext_lib"
x11_lib_spec='/usr/X11R6/lib/libX11.so.*'
x11_lib='libX11.so.6'
echo "-- $x11_lib_spec -> $x11_lib"
x11ext_lib_spec='/usr/X11R6/lib/libXext.so.*'
x11_lib='libXext.so.6'
echo "-- $x11ext_lib_spec -> $x11_lib"
if test x$use_dlopen != xyes && \
test x$enable_x11_shared = xyes; then
AC_MSG_ERROR([You must have dlopen() support and use the --enable-dlopen option])
fi
if test x$use_dlopen = xyes && \
test x$enable_x11_shared = xyes && test x$x11_lib != x; then
CFLAGS="$CFLAGS $X_CFLAGS -DENABLE_X11 -DXTHREADS -DX11_DYNAMIC=\$(x11_lib) -DX11EXT_DYNAMIC=\$(x11ext_lib) -I$srcdir/include -I$srcdir/src/video"
SYSTEM_LIBS="$SYSTEM_LIBS $X_LIBS"
AC_SUBST(x11_lib)
AC_SUBST(x11ext_lib)
else
CFLAGS="$CFLAGS $X_CFLAGS -DENABLE_X11 -DXTHREADS -I$srcdir/include -I$srcdir/src/video"
SYSTEM_LIBS="$SYSTEM_LIBS $X_LIBS -lX11 -lXext"
fi
if test x$ac_cv_func_shmat != xyes; then
CFLAGS="$CFLAGS -DNO_SHARED_MEMORY"
fi
SYSTEM_LIBS="$SYSTEM_LIBS $X_LIBS -lX11 -lXext"
VIDEO_SUBDIRS="$VIDEO_SUBDIRS x11"
VIDEO_DRIVERS="$VIDEO_DRIVERS x11/libvideo_x11.la"

View file

@ -35,6 +35,13 @@ Equipment Corporation.
#include "panoramiXproto.h" /* in ../include */
#include "Xinerama.h"
#include "../../x11/SDL_x11dyn.h"
/* Workaround code in headers... */
#define _XFlush p_XFlush
#define _XFlushGCCache p_XFlushGCCache
#define _XReply p_XReply
#define _XSend p_XSend
static XExtensionInfo _panoramiX_ext_info_data;
static XExtensionInfo *panoramiX_ext_info = &_panoramiX_ext_info_data;
@ -111,7 +118,7 @@ Status SDL_NAME(XPanoramiXQueryVersion)(
req->panoramiXReqType = X_PanoramiXQueryVersion;
req->clientMajor = PANORAMIX_MAJOR_VERSION;
req->clientMinor = PANORAMIX_MINOR_VERSION;
if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
if (!p_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
UnlockDisplay (dpy);
SyncHandle ();
return 0;
@ -145,7 +152,7 @@ Status SDL_NAME(XPanoramiXGetState) (
req->reqType = info->codes->major_opcode;
req->panoramiXReqType = X_PanoramiXGetState;
req->window = drawable;
if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
if (!p_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
UnlockDisplay (dpy);
SyncHandle ();
return 0;
@ -174,7 +181,7 @@ Status SDL_NAME(XPanoramiXGetScreenCount) (
req->reqType = info->codes->major_opcode;
req->panoramiXReqType = X_PanoramiXGetScreenCount;
req->window = drawable;
if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
if (!p_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
UnlockDisplay (dpy);
SyncHandle ();
return 0;
@ -205,7 +212,7 @@ Status SDL_NAME(XPanoramiXGetScreenSize) (
req->panoramiXReqType = X_PanoramiXGetScreenSize;
req->window = drawable;
req->screen = screen_num; /* need to define */
if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
if (!p_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
UnlockDisplay (dpy);
SyncHandle ();
return 0;
@ -285,7 +292,7 @@ SDL_NAME(XineramaQueryScreens)(
GetReq (XineramaQueryScreens, req);
req->reqType = info->codes->major_opcode;
req->panoramiXReqType = X_XineramaQueryScreens;
if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) {
if (!p_XReply (dpy, (xReply *) &rep, 0, xFalse)) {
UnlockDisplay (dpy);
SyncHandle ();
return NULL;
@ -297,7 +304,7 @@ SDL_NAME(XineramaQueryScreens)(
int i;
for(i = 0; i < rep.number; i++) {
_XRead(dpy, (char*)(&scratch), sz_XineramaScreenInfo);
p_XRead(dpy, (char*)(&scratch), sz_XineramaScreenInfo);
scrnInfo[i].screen_number = i;
scrnInfo[i].x_org = scratch.x_org;
scrnInfo[i].y_org = scratch.y_org;
@ -307,7 +314,7 @@ SDL_NAME(XineramaQueryScreens)(
*number = rep.number;
} else
_XEatData(dpy, rep.length << 2);
p_XEatData(dpy, rep.length << 2);
}
UnlockDisplay (dpy);

View file

@ -56,6 +56,14 @@ SOFTWARE.
#include <X11/extensions/XShm.h>
#include "extutil.h"
#include "../../x11/SDL_x11dyn.h"
/* Workaround code in headers... */
#define _XFlush p_XFlush
#define _XFlushGCCache p_XFlushGCCache
#define _XReply p_XReply
#define _XSend p_XSend
static XExtensionInfo _xv_info_data;
static XExtensionInfo *xv_info = &_xv_info_data;
static char *xv_extension_name = XvName;
@ -121,7 +129,7 @@ SDL_NAME(XvQueryExtension)(
XvGetReq(QueryExtension, req);
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return XvBadExtension;
@ -171,7 +179,7 @@ SDL_NAME(XvQueryAdaptors)(
/* READ THE REPLY */
if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {
if (p_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {
UnlockDisplay(dpy);
SyncHandle();
return(XvBadReply);
@ -183,7 +191,7 @@ SDL_NAME(XvQueryAdaptors)(
SyncHandle();
return(XvBadAlloc);
}
_XRead (dpy, buffer, size);
p_XRead (dpy, buffer, size);
u.buffer = buffer;
@ -331,7 +339,7 @@ SDL_NAME(XvQueryEncodings)(
/* READ THE REPLY */
if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {
if (p_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {
UnlockDisplay(dpy);
SyncHandle();
return(XvBadReply);
@ -343,7 +351,7 @@ SDL_NAME(XvQueryEncodings)(
SyncHandle();
return(XvBadAlloc);
}
_XRead (dpy, buffer, size);
p_XRead (dpy, buffer, size);
u.buffer = buffer;
@ -619,7 +627,7 @@ SDL_NAME(XvGrabPort)(
req->port = port;
req->time = time;
if (_XReply (dpy, (xReply *) &rep, 0, xTrue) == 0)
if (p_XReply (dpy, (xReply *) &rep, 0, xTrue) == 0)
rep.result = GrabSuccess;
result = rep.result;
@ -747,7 +755,7 @@ SDL_NAME(XvGetPortAttribute) (
/* READ THE REPLY */
if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {
if (p_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {
UnlockDisplay(dpy);
SyncHandle();
return(XvBadReply);
@ -792,7 +800,7 @@ SDL_NAME(XvQueryBestSize)(
/* READ THE REPLY */
if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {
if (p_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {
UnlockDisplay(dpy);
SyncHandle();
return(XvBadReply);
@ -827,7 +835,7 @@ SDL_NAME(XvQueryPortAttributes)(Display *dpy, XvPortID port, int *num)
/* READ THE REPLY */
if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {
if (p_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {
UnlockDisplay(dpy);
SyncHandle();
return ret;
@ -842,17 +850,17 @@ SDL_NAME(XvQueryPortAttributes)(Display *dpy, XvPortID port, int *num)
int i;
for(i = 0; i < rep.num_attributes; i++) {
_XRead(dpy, (char*)(&Info), sz_xvAttributeInfo);
p_XRead(dpy, (char*)(&Info), sz_xvAttributeInfo);
ret[i].flags = (int)Info.flags;
ret[i].min_value = Info.min;
ret[i].max_value = Info.max;
ret[i].name = marker;
_XRead(dpy, marker, Info.size);
p_XRead(dpy, marker, Info.size);
marker += Info.size;
(*num)++;
}
} else
_XEatData(dpy, rep.length << 2);
p_XEatData(dpy, rep.length << 2);
}
UnlockDisplay(dpy);
@ -882,7 +890,7 @@ SDL_NAME(XvImageFormatValues) * SDL_NAME(XvListImageFormats) (
/* READ THE REPLY */
if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {
if (p_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {
UnlockDisplay(dpy);
SyncHandle();
return NULL;
@ -896,7 +904,7 @@ SDL_NAME(XvImageFormatValues) * SDL_NAME(XvListImageFormats) (
int i;
for(i = 0; i < rep.num_formats; i++) {
_XRead(dpy, (char*)(&Info), sz_xvImageFormatInfo);
p_XRead(dpy, (char*)(&Info), sz_xvImageFormatInfo);
ret[i].id = Info.id;
ret[i].type = Info.type;
ret[i].byte_order = Info.byte_order;
@ -922,7 +930,7 @@ SDL_NAME(XvImageFormatValues) * SDL_NAME(XvListImageFormats) (
(*num)++;
}
} else
_XEatData(dpy, rep.length << 2);
p_XEatData(dpy, rep.length << 2);
}
UnlockDisplay(dpy);
@ -956,7 +964,7 @@ SDL_NAME(XvImage) * SDL_NAME(XvCreateImage) (
/* READ THE REPLY */
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return NULL;
@ -972,10 +980,10 @@ SDL_NAME(XvImage) * SDL_NAME(XvCreateImage) (
ret->offsets = ret->pitches + rep.num_planes;
ret->data = data;
ret->obdata = NULL;
_XRead(dpy, (char*)(ret->pitches), rep.num_planes << 2);
_XRead(dpy, (char*)(ret->offsets), rep.num_planes << 2);
p_XRead(dpy, (char*)(ret->pitches), rep.num_planes << 2);
p_XRead(dpy, (char*)(ret->offsets), rep.num_planes << 2);
} else
_XEatData(dpy, rep.length << 2);
p_XEatData(dpy, rep.length << 2);
UnlockDisplay(dpy);
SyncHandle();
@ -1124,7 +1132,7 @@ xv_wire_to_event(Display *dpy, XEvent *host, xEvent *wire)
case XvVideoNotify:
re->xvvideo.type = event->u.u.type & 0x7f;
re->xvvideo.serial =
_XSetLastRequestRead(dpy, (xGenericReply *)event);
p_XSetLastRequestRead(dpy, (xGenericReply *)event);
re->xvvideo.send_event = ((event->u.u.type & 0x80) != 0);
re->xvvideo.display = dpy;
re->xvvideo.time = event->u.videoNotify.time;
@ -1135,7 +1143,7 @@ xv_wire_to_event(Display *dpy, XEvent *host, xEvent *wire)
case XvPortNotify:
re->xvport.type = event->u.u.type & 0x7f;
re->xvport.serial =
_XSetLastRequestRead(dpy, (xGenericReply *)event);
p_XSetLastRequestRead(dpy, (xGenericReply *)event);
re->xvport.send_event = ((event->u.u.type & 0x80) != 0);
re->xvport.display = dpy;
re->xvport.time = event->u.portNotify.time;

View file

@ -51,7 +51,7 @@ SOFTWARE.
#define XvGetReq(name, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(xv##name##Req)) > dpy->bufmax)\
_XFlush(dpy);\
p_XFlush(dpy);\
req = (xv##name##Req *)(dpy->last_req = dpy->bufptr);\
req->reqType = info->codes->major_opcode;\
req->xvReqType = xv_##name; \
@ -63,7 +63,7 @@ SOFTWARE.
#define XvGetReq(name, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(xv/**/name/**/Req)) > dpy->bufmax)\
_XFlush(dpy);\
p_XFlush(dpy);\
req = (xv/**/name/**/Req *)(dpy->last_req = dpy->bufptr);\
req->reqType = info->codes->major_opcode;\
req->xvReqType = xv_/**/name;\

View file

@ -56,7 +56,6 @@ Copyright (c) 1995,1996 The XFree86 Project, Inc
#undef _SC_PAGESIZE
#endif
#define NEED_EVENTS
#define NEED_REPLIES
#include <X11/Xlibint.h>
@ -65,6 +64,14 @@ Copyright (c) 1995,1996 The XFree86 Project, Inc
#include <X11/extensions/Xext.h>
#include "extutil.h"
#include "../../x11/SDL_x11dyn.h"
/* Workaround code in headers... */
#define _XFlush p_XFlush
#define _XFlushGCCache p_XFlushGCCache
#define _XReply p_XReply
#define _XSend p_XSend
extern XExtDisplayInfo* SDL_NAME(xdga_find_display)(Display*);
extern char *SDL_NAME(xdga_extension_name);
@ -112,7 +119,7 @@ Bool SDL_NAME(XF86DGAGetVideoLL)(
req->reqType = info->codes->major_opcode;
req->dgaReqType = X_XF86DGAGetVideoLL;
req->screen = screen;
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return False;
@ -147,7 +154,7 @@ Bool SDL_NAME(XF86DGADirectVideoLL)(
req->enable = enable;
UnlockDisplay(dpy);
SyncHandle();
XSync(dpy,False);
pXSync(dpy,False);
return True;
}
@ -168,7 +175,7 @@ Bool SDL_NAME(XF86DGAGetViewPortSize)(
req->reqType = info->codes->major_opcode;
req->dgaReqType = X_XF86DGAGetViewPortSize;
req->screen = screen;
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return False;
@ -203,7 +210,7 @@ Bool SDL_NAME(XF86DGASetViewPort)(
req->y = y;
UnlockDisplay(dpy);
SyncHandle();
XSync(dpy,False);
pXSync(dpy,False);
return True;
}
@ -224,7 +231,7 @@ Bool SDL_NAME(XF86DGAGetVidPage)(
req->reqType = info->codes->major_opcode;
req->dgaReqType = X_XF86DGAGetVidPage;
req->screen = screen;
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return False;
@ -255,7 +262,7 @@ Bool SDL_NAME(XF86DGASetVidPage)(
req->vpage = vpage;
UnlockDisplay(dpy);
SyncHandle();
XSync(dpy,False);
pXSync(dpy,False);
return True;
}
@ -277,7 +284,7 @@ Bool SDL_NAME(XF86DGAInstallColormap)(
req->id = cmap;
UnlockDisplay(dpy);
SyncHandle();
XSync(dpy,False);
pXSync(dpy,False);
return True;
}
@ -297,7 +304,7 @@ Bool SDL_NAME(XF86DGAQueryDirectVideo)(
req->reqType = info->codes->major_opcode;
req->dgaReqType = X_XF86DGAQueryDirectVideo;
req->screen = screen;
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return False;
@ -325,7 +332,7 @@ Bool SDL_NAME(XF86DGAViewPortChanged)(
req->dgaReqType = X_XF86DGAViewPortChanged;
req->screen = screen;
req->n = n;
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return False;
@ -598,7 +605,7 @@ SDL_NAME(XF86DGAForkApp)(int screen)
for (i = 0; i < numScrs; i++) {
sp = scrList[i];
SDL_NAME(XF86DGADirectVideoLL)(sp->display, sp->screen, 0);
XSync(sp->display, False);
pXSync(sp->display, False);
}
if (WIFEXITED(status))
_exit(0);
@ -658,7 +665,7 @@ XF86cleanup(int sig)
for (i = 0; i < numScrs; i++) {
sp = scrList[i];
SDL_NAME(XF86DGADirectVideo)(sp->display, sp->screen, 0);
XSync(sp->display, False);
pXSync(sp->display, False);
}
_exit(3);
}

View file

@ -28,6 +28,14 @@ Copyright (c) 1995,1996 The XFree86 Project, Inc
#include <linux/fb.h>
#endif
#include "../../x11/SDL_x11dyn.h"
/* Workaround code in headers... */
#define _XFlush p_XFlush
#define _XFlushGCCache p_XFlushGCCache
#define _XReply p_XReply
#define _XSend p_XSend
/* If you change this, change the Bases[] array below as well */
#define MAX_HEADS 16
@ -104,7 +112,7 @@ xdga_wire_to_event(
case MotionNotify:
mevent = (SDL_NAME(XDGAMotionEvent)*)event;
mevent->type = wire->u.u.type & 0x7F;
mevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *)wire);
mevent->serial = p_XSetLastRequestRead(dpy, (xGenericReply *)wire);
mevent->display = dpy;
mevent->screen = wire->u.event.screen;
mevent->time = wire->u.event.time;
@ -116,7 +124,7 @@ xdga_wire_to_event(
case ButtonRelease:
bevent = (SDL_NAME(XDGAButtonEvent)*)event;
bevent->type = wire->u.u.type & 0x7F;
bevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *)wire);
bevent->serial = p_XSetLastRequestRead(dpy, (xGenericReply *)wire);
bevent->display = dpy;
bevent->screen = wire->u.event.screen;
bevent->time = wire->u.event.time;
@ -127,7 +135,7 @@ xdga_wire_to_event(
case KeyRelease:
kevent = (SDL_NAME(XDGAKeyEvent)*)event;
kevent->type = wire->u.u.type & 0x7F;
kevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *)wire);
kevent->serial = p_XSetLastRequestRead(dpy, (xGenericReply *)wire);
kevent->display = dpy;
kevent->screen = wire->u.event.screen;
kevent->time = wire->u.event.time;
@ -172,7 +180,7 @@ Bool SDL_NAME(XDGAQueryVersion)(
GetReq(XDGAQueryVersion, req);
req->reqType = info->codes->major_opcode;
req->dgaReqType = X_XDGAQueryVersion;
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return False;
@ -189,8 +197,8 @@ Bool SDL_NAME(XDGAQueryVersion)(
i < XF86DGANumberEvents;
i++, j++)
{
XESetWireToEvent (dpy, j, xdga_wire_to_event);
XESetEventToWire (dpy, j, xdga_event_to_wire);
pXESetWireToEvent(dpy, j, xdga_wire_to_event);
pXESetEventToWire(dpy, j, xdga_event_to_wire);
}
SDL_NAME(XDGASetClientVersion)(dpy);
}
@ -233,7 +241,7 @@ Bool SDL_NAME(XDGAOpenFramebuffer)(
req->reqType = info->codes->major_opcode;
req->dgaReqType = X_XDGAOpenFramebuffer;
req->screen = screen;
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return False;
@ -241,7 +249,7 @@ Bool SDL_NAME(XDGAOpenFramebuffer)(
if(rep.length) {
deviceName = Xmalloc(rep.length << 2);
_XRead(dpy, deviceName, rep.length << 2);
p_XRead(dpy, deviceName, rep.length << 2);
}
ret = SDL_NAME(XDGAMapFramebuffer)(screen, deviceName,
@ -298,7 +306,7 @@ SDL_NAME(XDGAMode)* SDL_NAME(XDGAQueryModes)(
req->dgaReqType = X_XDGAQueryModes;
req->screen = screen;
if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if(rep.length) {
xXDGAModeInfo info;
int i, size;
@ -312,7 +320,7 @@ SDL_NAME(XDGAMode)* SDL_NAME(XDGAQueryModes)(
if(modes) {
for(i = 0; i < rep.number; i++) {
_XRead(dpy, (char*)(&info), sz_xXDGAModeInfo);
p_XRead(dpy, (char*)(&info), sz_xXDGAModeInfo);
modes[i].num = info.num;
modes[i].verticalRefresh =
@ -340,13 +348,13 @@ SDL_NAME(XDGAMode)* SDL_NAME(XDGAQueryModes)(
modes[i].reserved1 = info.reserved1;
modes[i].reserved2 = info.reserved2;
_XRead(dpy, offset, info.name_size);
p_XRead(dpy, offset, info.name_size);
modes[i].name = offset;
offset += info.name_size;
}
*num = rep.number;
} else
_XEatData(dpy, rep.length << 2);
p_XEatData(dpy, rep.length << 2);
}
}
@ -379,7 +387,7 @@ SDL_NAME(XDGASetMode)(
req->mode = mode;
req->pid = pid = XAllocID(dpy);
if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if(rep.length) {
xXDGAModeInfo info;
int size;
@ -390,7 +398,7 @@ SDL_NAME(XDGASetMode)(
dev = (SDL_NAME(XDGADevice)*)Xmalloc(sizeof(SDL_NAME(XDGADevice)) + size);
if(dev) {
_XRead(dpy, (char*)(&info), sz_xXDGAModeInfo);
p_XRead(dpy, (char*)(&info), sz_xXDGAModeInfo);
dev->mode.num = info.num;
dev->mode.verticalRefresh =
@ -419,7 +427,7 @@ SDL_NAME(XDGASetMode)(
dev->mode.reserved2 = info.reserved2;
dev->mode.name = (char*)(&dev[1]);
_XRead(dpy, dev->mode.name, info.name_size);
p_XRead(dpy, dev->mode.name, info.name_size);
dev->pixmap = (rep.flags & XDGAPixmap) ? pid : 0;
dev->data = SDL_NAME(XDGAGetMappedMemory)(screen);
@ -610,7 +618,7 @@ int SDL_NAME(XDGAGetViewportStatus)(
req->reqType = info->codes->major_opcode;
req->dgaReqType = X_XDGAGetViewportStatus;
req->screen = screen;
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse))
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse))
status = rep.status;
UnlockDisplay(dpy);
SyncHandle();
@ -632,7 +640,7 @@ void SDL_NAME(XDGASync)(
req->reqType = info->codes->major_opcode;
req->dgaReqType = X_XDGASync;
req->screen = screen;
_XReply(dpy, (xReply *)&rep, 0, xFalse);
p_XReply(dpy, (xReply *)&rep, 0, xFalse);
UnlockDisplay(dpy);
SyncHandle();
}
@ -659,7 +667,7 @@ void SDL_NAME(XDGAChangePixmapMode)(
req->x = *x;
req->y = *y;
req->flags = mode;
_XReply(dpy, (xReply *)&rep, 0, xFalse);
p_XReply(dpy, (xReply *)&rep, 0, xFalse);
*x = rep.x;
*y = rep.y;
UnlockDisplay(dpy);

View file

@ -47,6 +47,14 @@ from Kaleb S. KEITHLEY.
#include "include/extensions/extutil.h"
#endif
#include "../../x11/SDL_x11dyn.h"
/* Workaround code in headers... */
#define _XFlush p_XFlush
#define _XFlushGCCache p_XFlushGCCache
#define _XReply p_XReply
#define _XSend p_XSend
#ifdef DEBUG
#include <stdio.h>
#endif
@ -129,7 +137,7 @@ SDL_NAME(XF86VidModeQueryVersion)(dpy, majorVersion, minorVersion)
GetReq(XF86VidModeQueryVersion, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeQueryVersion;
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return False;
@ -197,7 +205,7 @@ SDL_NAME(XF86VidModeGetGamma)(Display *dpy, int screen, SDL_NAME(XF86VidModeGamm
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeGetGamma;
req->screen = screen;
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return False;
@ -233,7 +241,7 @@ SDL_NAME(XF86VidModeGetModeLine)(dpy, screen, dotclock, modeline)
req->screen = screen;
if (majorVersion < 2) {
if (!_XReply(dpy, (xReply *)&oldrep,
if (!p_XReply(dpy, (xReply *)&oldrep,
(SIZEOF(xXF86OldVidModeGetModeLineReply) - SIZEOF(xReply)) >> 2, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
@ -252,7 +260,7 @@ SDL_NAME(XF86VidModeGetModeLine)(dpy, screen, dotclock, modeline)
modeline->flags = oldrep.flags;
modeline->privsize = oldrep.privsize;
} else {
if (!_XReply(dpy, (xReply *)&rep,
if (!p_XReply(dpy, (xReply *)&rep,
(SIZEOF(xXF86VidModeGetModeLineReply) - SIZEOF(xReply)) >> 2, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
@ -274,11 +282,11 @@ SDL_NAME(XF86VidModeGetModeLine)(dpy, screen, dotclock, modeline)
if (modeline->privsize > 0) {
if (!(modeline->private = Xcalloc(modeline->privsize, sizeof(INT32)))) {
_XEatData(dpy, (modeline->privsize) * sizeof(INT32));
p_XEatData(dpy, (modeline->privsize) * sizeof(INT32));
Xfree(modeline->private);
return False;
}
_XRead(dpy, (char*)modeline->private, modeline->privsize * sizeof(INT32));
p_XRead(dpy, (char*)modeline->private, modeline->privsize * sizeof(INT32));
} else {
modeline->private = NULL;
}
@ -327,7 +335,7 @@ SDL_NAME(XF86VidModeGetAllModeLines)(dpy, screen, modecount, modelinesPtr)
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeGetAllModeLines;
req->screen = screen;
if (!_XReply(dpy, (xReply *)&rep,
if (!p_XReply(dpy, (xReply *)&rep,
(SIZEOF(xXF86VidModeGetAllModeLinesReply) - SIZEOF(xReply)) >> 2, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
@ -340,9 +348,9 @@ SDL_NAME(XF86VidModeGetAllModeLines)(dpy, screen, modecount, modelinesPtr)
sizeof(SDL_NAME(XF86VidModeModeInfo) *)
+sizeof(SDL_NAME(XF86VidModeModeInfo))))) {
if (majorVersion < 2)
_XEatData(dpy, (rep.modecount) * sizeof(xXF86OldVidModeModeInfo));
p_XEatData(dpy, (rep.modecount) * sizeof(xXF86OldVidModeModeInfo));
else
_XEatData(dpy, (rep.modecount) * sizeof(xXF86VidModeModeInfo));
p_XEatData(dpy, (rep.modecount) * sizeof(xXF86VidModeModeInfo));
Xfree(modelines);
UnlockDisplay(dpy);
SyncHandle();
@ -356,7 +364,7 @@ SDL_NAME(XF86VidModeGetAllModeLines)(dpy, screen, modecount, modelinesPtr)
for (i = 0; i < rep.modecount; i++) {
modelines[i] = mdinfptr++;
if (majorVersion < 2) {
_XRead(dpy, (char*)&oldxmdline, sizeof(xXF86OldVidModeModeInfo));
p_XRead(dpy, (char*)&oldxmdline, sizeof(xXF86OldVidModeModeInfo));
modelines[i]->dotclock = oldxmdline.dotclock;
modelines[i]->hdisplay = oldxmdline.hdisplay;
modelines[i]->hsyncstart = oldxmdline.hsyncstart;
@ -376,10 +384,10 @@ SDL_NAME(XF86VidModeGetAllModeLines)(dpy, screen, modecount, modelinesPtr)
if (oldxmdline.privsize > 0) {
if (!(modelines[i]->private =
Xcalloc(oldxmdline.privsize, sizeof(INT32)))) {
_XEatData(dpy, (oldxmdline.privsize) * sizeof(INT32));
p_XEatData(dpy, (oldxmdline.privsize) * sizeof(INT32));
Xfree(modelines[i]->private);
} else {
_XRead(dpy, (char*)modelines[i]->private,
p_XRead(dpy, (char*)modelines[i]->private,
oldxmdline.privsize * sizeof(INT32));
}
} else {
@ -387,7 +395,7 @@ SDL_NAME(XF86VidModeGetAllModeLines)(dpy, screen, modecount, modelinesPtr)
}
}
} else {
_XRead(dpy, (char*)&xmdline, sizeof(xXF86VidModeModeInfo));
p_XRead(dpy, (char*)&xmdline, sizeof(xXF86VidModeModeInfo));
modelines[i]->dotclock = xmdline.dotclock;
modelines[i]->hdisplay = xmdline.hdisplay;
modelines[i]->hsyncstart = xmdline.hsyncstart;
@ -407,10 +415,10 @@ SDL_NAME(XF86VidModeGetAllModeLines)(dpy, screen, modecount, modelinesPtr)
if (xmdline.privsize > 0) {
if (!(modelines[i]->private =
Xcalloc(xmdline.privsize, sizeof(INT32)))) {
_XEatData(dpy, (xmdline.privsize) * sizeof(INT32));
p_XEatData(dpy, (xmdline.privsize) * sizeof(INT32));
Xfree(modelines[i]->private);
} else {
_XRead(dpy, (char*)modelines[i]->private,
p_XRead(dpy, (char*)modelines[i]->private,
xmdline.privsize * sizeof(INT32));
}
} else {
@ -432,7 +440,7 @@ SDL_NAME(XF86VidModeGetAllModeLines)(dpy, screen, modecount, modelinesPtr)
#define GetOldReq(name, oldname, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(x##oldname##Req)) > dpy->bufmax)\
_XFlush(dpy);\
p_XFlush(dpy);\
req = (x##oldname##Req *)(dpy->last_req = dpy->bufptr);\
req->reqType = X_##name;\
req->length = (SIZEOF(x##oldname##Req))>>2;\
@ -443,7 +451,7 @@ SDL_NAME(XF86VidModeGetAllModeLines)(dpy, screen, modecount, modelinesPtr)
#define GetOldReq(name, oldname, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(x/**/oldname/**/Req)) > dpy->bufmax)\
_XFlush(dpy);\
p_XFlush(dpy);\
req = (x/**/oldname/**/Req *)(dpy->last_req = dpy->bufptr);\
req->reqType = X_/**/name;\
req->length = (SIZEOF(x/**/oldname/**/Req))>>2;\
@ -751,7 +759,7 @@ SDL_NAME(XF86VidModeValidateModeLine) (dpy, screen, modeline)
modeline->privsize * sizeof(INT32));
}
}
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return MODE_BAD;
@ -913,7 +921,7 @@ SDL_NAME(XF86VidModeGetMonitor)(dpy, screen, monitor)
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeGetMonitor;
req->screen = screen;
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return False;
@ -925,7 +933,7 @@ SDL_NAME(XF86VidModeGetMonitor)(dpy, screen, monitor)
#endif
if (rep.vendorLength) {
if (!(monitor->vendor = (char *)Xcalloc(rep.vendorLength + 1, 1))) {
_XEatData(dpy, (rep.nhsync + rep.nvsync) * 4 +
p_XEatData(dpy, (rep.nhsync + rep.nvsync) * 4 +
((rep.vendorLength+3) & ~3) + ((rep.modelLength+3) & ~3));
UnlockDisplay(dpy);
SyncHandle();
@ -936,7 +944,7 @@ SDL_NAME(XF86VidModeGetMonitor)(dpy, screen, monitor)
}
if (rep.modelLength) {
if (!(monitor->model = Xcalloc(rep.modelLength + 1, 1))) {
_XEatData(dpy, (rep.nhsync + rep.nvsync) * 4 +
p_XEatData(dpy, (rep.nhsync + rep.nvsync) * 4 +
((rep.vendorLength+3) & ~3) + ((rep.modelLength+3) & ~3));
if (monitor->vendor)
Xfree(monitor->vendor);
@ -948,7 +956,7 @@ SDL_NAME(XF86VidModeGetMonitor)(dpy, screen, monitor)
monitor->model = NULL;
}
if (!(monitor->hsync = Xcalloc(rep.nhsync, sizeof(SDL_NAME(XF86VidModeSyncRange))))) {
_XEatData(dpy, (rep.nhsync + rep.nvsync) * 4 +
p_XEatData(dpy, (rep.nhsync + rep.nvsync) * 4 +
((rep.vendorLength+3) & ~3) + ((rep.modelLength+3) & ~3));
if (monitor->vendor)
@ -960,7 +968,7 @@ SDL_NAME(XF86VidModeGetMonitor)(dpy, screen, monitor)
return False;
}
if (!(monitor->vsync = Xcalloc(rep.nvsync, sizeof(SDL_NAME(XF86VidModeSyncRange))))) {
_XEatData(dpy, (rep.nhsync + rep.nvsync) * 4 +
p_XEatData(dpy, (rep.nhsync + rep.nvsync) * 4 +
((rep.vendorLength+3) & ~3) + ((rep.modelLength+3) & ~3));
if (monitor->vendor)
Xfree(monitor->vendor);
@ -972,21 +980,21 @@ SDL_NAME(XF86VidModeGetMonitor)(dpy, screen, monitor)
return False;
}
for (i = 0; i < rep.nhsync; i++) {
_XRead(dpy, (char *)&syncrange, 4);
p_XRead(dpy, (char *)&syncrange, 4);
monitor->hsync[i].lo = (float)(syncrange & 0xFFFF) / 100.0;
monitor->hsync[i].hi = (float)(syncrange >> 16) / 100.0;
}
for (i = 0; i < rep.nvsync; i++) {
_XRead(dpy, (char *)&syncrange, 4);
p_XRead(dpy, (char *)&syncrange, 4);
monitor->vsync[i].lo = (float)(syncrange & 0xFFFF) / 100.0;
monitor->vsync[i].hi = (float)(syncrange >> 16) / 100.0;
}
if (rep.vendorLength)
_XReadPad(dpy, monitor->vendor, rep.vendorLength);
p_XReadPad(dpy, monitor->vendor, rep.vendorLength);
else
monitor->vendor = "";
if (rep.modelLength)
_XReadPad(dpy, monitor->model, rep.modelLength);
p_XReadPad(dpy, monitor->model, rep.modelLength);
else
monitor->model = "";
@ -1034,7 +1042,7 @@ SDL_NAME(XF86VidModeGetViewPort)(dpy, screen, x, y)
*x = 0;
*y = 0;
} else {
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return False;
@ -1092,7 +1100,7 @@ SDL_NAME(XF86VidModeGetDotClocks)(dpy, screen,
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeGetDotClocks;
req->screen = screen;
if (!_XReply(dpy, (xReply *)&rep,
if (!p_XReply(dpy, (xReply *)&rep,
(SIZEOF(xXF86VidModeGetDotClocksReply) - SIZEOF(xReply)) >> 2, xFalse))
{
UnlockDisplay(dpy);
@ -1104,7 +1112,7 @@ SDL_NAME(XF86VidModeGetDotClocks)(dpy, screen,
*flagsPtr = rep.flags;
if (!(dotclocks = (int*) Xcalloc(rep.clocks, sizeof(int)))) {
_XEatData(dpy, (rep.clocks) * 4);
p_XEatData(dpy, (rep.clocks) * 4);
Xfree(dotclocks);
UnlockDisplay(dpy);
SyncHandle();
@ -1112,7 +1120,7 @@ SDL_NAME(XF86VidModeGetDotClocks)(dpy, screen,
}
for (i = 0; i < rep.clocks; i++) {
_XRead(dpy, (char*)&dotclk, 4);
p_XRead(dpy, (char*)&dotclk, 4);
dotclocks[i] = dotclk;
}
*clocksPtr = dotclocks;
@ -1143,9 +1151,9 @@ SDL_NAME(XF86VidModeSetGammaRamp) (
req->screen = screen;
req->length += (length >> 1) * 3;
req->size = size;
_XSend(dpy, (char*)red, size * 2);
_XSend(dpy, (char*)green, size * 2);
_XSend(dpy, (char*)blue, size * 2);
p_XSend(dpy, (char*)red, size * 2);
p_XSend(dpy, (char*)green, size * 2);
p_XSend(dpy, (char*)blue, size * 2);
UnlockDisplay(dpy);
SyncHandle();
return True;
@ -1174,15 +1182,15 @@ SDL_NAME(XF86VidModeGetGammaRamp) (
req->xf86vidmodeReqType = X_XF86VidModeGetGammaRamp;
req->screen = screen;
req->size = size;
if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) {
if (!p_XReply (dpy, (xReply *) &rep, 0, xFalse)) {
UnlockDisplay (dpy);
SyncHandle ();
return False;
}
if(rep.size) {
_XRead(dpy, (char*)red, rep.size << 1);
_XRead(dpy, (char*)green, rep.size << 1);
_XRead(dpy, (char*)blue, rep.size << 1);
p_XRead(dpy, (char*)red, rep.size << 1);
p_XRead(dpy, (char*)green, rep.size << 1);
p_XRead(dpy, (char*)blue, rep.size << 1);
}
UnlockDisplay(dpy);
@ -1209,7 +1217,7 @@ Bool SDL_NAME(XF86VidModeGetGammaRampSize)(
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeGetGammaRampSize;
req->screen = screen;
if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
if (!p_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
UnlockDisplay (dpy);
SyncHandle ();
return False;

View file

@ -173,9 +173,9 @@ extern XExtDisplayInfo *XextFindDisplay(
#define XextHasExtension(i) ((i) && ((i)->codes))
#define XextCheckExtension(dpy,i,name,val) \
if (!XextHasExtension(i)) { XMissingExtension (dpy, name); return val; }
if (!XextHasExtension(i)) { pXMissingExtension (dpy, name); return val; }
#define XextSimpleCheckExtension(dpy,i,name) \
if (!XextHasExtension(i)) { XMissingExtension (dpy, name); return; }
if (!XextHasExtension(i)) { pXMissingExtension (dpy, name); return; }
/*
@ -188,9 +188,9 @@ extern XExtDisplayInfo *XextFindDisplay(
XExtDisplayInfo *proc (Display *dpy) \
{ \
XExtDisplayInfo *dpyinfo; \
if (!extinfo) { if (!(extinfo = XextCreateExtension())) return NULL; } \
if (!(dpyinfo = XextFindDisplay (extinfo, dpy))) \
dpyinfo = XextAddDisplay (extinfo,dpy,extname,hooks,nev,data); \
if (!extinfo) { if (!(extinfo = pXextCreateExtension())) return NULL; } \
if (!(dpyinfo = pXextFindDisplay (extinfo, dpy))) \
dpyinfo = pXextAddDisplay (extinfo,dpy,extname,hooks,nev,data); \
return dpyinfo; \
}
@ -200,7 +200,7 @@ XExtDisplayInfo *proc (Display *dpy) \
#define XEXT_GENERATE_CLOSE_DISPLAY(proc,extinfo) \
int proc (Display *dpy, XExtCodes *codes) \
{ \
return XextRemoveDisplay (extinfo, dpy); \
return pXextRemoveDisplay (extinfo, dpy); \
}
#define XEXT_CLOSE_DISPLAY_PROTO(proc) \
@ -213,7 +213,7 @@ char *proc (Display *dpy, int code, XExtCodes *codes, char *buf, int n) \
if (code >= 0 && code < nerr) { \
char tmp[256]; \
sprintf (tmp, "%s.%d", extname, code); \
XGetErrorDatabaseText (dpy, "XProtoError", tmp, errl[code], buf, n); \
pXGetErrorDatabaseText (dpy, "XProtoError", tmp, errl[code], buf, n); \
return buf; \
} \
return (char *)0; \

View file

@ -47,7 +47,7 @@ static int DGA_DispatchEvent(_THIS)
int posted;
SDL_NAME(XDGAEvent) xevent;
XNextEvent(DGA_Display, (XEvent *)&xevent);
pXNextEvent(DGA_Display, (XEvent *)&xevent);
posted = 0;
xevent.type -= DGA_event_base;

View file

@ -48,6 +48,9 @@ static char rcsid =
#include "SDL_dgamouse_c.h"
#include "SDL_dgaevents_c.h"
/* get function pointers... */
#include "../x11/SDL_x11dyn.h"
/* Initialization/Query functions */
static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat);
static SDL_Rect **DGA_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags);
@ -72,91 +75,98 @@ static int DGA_FlipHWSurface(_THIS, SDL_Surface *surface);
static int DGA_Available(void)
{
const char *display;
Display *dpy;
int available;
const char *display = NULL;
Display *dpy = NULL;
int available = 0;
/* The driver is available is available if the display is local
and the DGA 2.0+ extension is available, and we can map mem.
*/
available = 0;
display = NULL;
if ( (strncmp(XDisplayName(display), ":", 1) == 0) ||
(strncmp(XDisplayName(display), "unix:", 5) == 0) ) {
dpy = XOpenDisplay(display);
if ( dpy ) {
int events, errors, major, minor;
if ( SDL_X11_LoadSymbols() ) {
if ( (strncmp(pXDisplayName(display), ":", 1) == 0) ||
(strncmp(pXDisplayName(display), "unix:", 5) == 0) ) {
dpy = pXOpenDisplay(display);
if ( dpy ) {
int events, errors, major, minor;
if ( SDL_NAME(XDGAQueryExtension)(dpy, &events, &errors) &&
SDL_NAME(XDGAQueryVersion)(dpy, &major, &minor) ) {
int screen;
if ( SDL_NAME(XDGAQueryExtension)(dpy, &events, &errors) &&
SDL_NAME(XDGAQueryVersion)(dpy, &major, &minor) ) {
int screen;
screen = DefaultScreen(dpy);
if ( (major >= 2) &&
SDL_NAME(XDGAOpenFramebuffer)(dpy, screen) ) {
available = 1;
SDL_NAME(XDGACloseFramebuffer)(dpy, screen);
screen = DefaultScreen(dpy);
if ( (major >= 2) &&
SDL_NAME(XDGAOpenFramebuffer)(dpy, screen) ) {
available = 1;
SDL_NAME(XDGACloseFramebuffer)(dpy, screen);
}
}
pXCloseDisplay(dpy);
}
XCloseDisplay(dpy);
}
SDL_X11_UnloadSymbols();
}
return(available);
}
static void DGA_DeleteDevice(SDL_VideoDevice *device)
{
free(device->hidden);
free(device);
if (device != NULL) {
free(device->hidden);
free(device);
SDL_X11_UnloadSymbols();
}
}
static SDL_VideoDevice *DGA_CreateDevice(int devindex)
{
SDL_VideoDevice *device;
SDL_VideoDevice *device = NULL;
/* Initialize all variables that we clean on shutdown */
device = (SDL_VideoDevice *)malloc(sizeof(SDL_VideoDevice));
if ( device ) {
memset(device, 0, (sizeof *device));
device->hidden = (struct SDL_PrivateVideoData *)
malloc((sizeof *device->hidden));
}
if ( (device == NULL) || (device->hidden == NULL) ) {
SDL_OutOfMemory();
if (SDL_X11_LoadSymbols()) {
device = (SDL_VideoDevice *)malloc(sizeof(SDL_VideoDevice));
if ( device ) {
free(device);
memset(device, 0, (sizeof *device));
device->hidden = (struct SDL_PrivateVideoData *)
malloc((sizeof *device->hidden));
}
return(0);
if ( (device == NULL) || (device->hidden == NULL) ) {
SDL_OutOfMemory();
if ( device ) {
free(device);
}
SDL_X11_UnloadSymbols();
return(0);
}
memset(device->hidden, 0, (sizeof *device->hidden));
/* Set the function pointers */
device->VideoInit = DGA_VideoInit;
device->ListModes = DGA_ListModes;
device->SetVideoMode = DGA_SetVideoMode;
device->SetColors = DGA_SetColors;
device->UpdateRects = NULL;
device->VideoQuit = DGA_VideoQuit;
device->AllocHWSurface = DGA_AllocHWSurface;
device->CheckHWBlit = DGA_CheckHWBlit;
device->FillHWRect = DGA_FillHWRect;
device->SetHWColorKey = NULL;
device->SetHWAlpha = NULL;
device->LockHWSurface = DGA_LockHWSurface;
device->UnlockHWSurface = DGA_UnlockHWSurface;
device->FlipHWSurface = DGA_FlipHWSurface;
device->FreeHWSurface = DGA_FreeHWSurface;
device->SetGammaRamp = DGA_SetGammaRamp;
device->GetGammaRamp = NULL;
device->SetCaption = NULL;
device->SetIcon = NULL;
device->IconifyWindow = NULL;
device->GrabInput = NULL;
device->GetWMInfo = NULL;
device->InitOSKeymap = DGA_InitOSKeymap;
device->PumpEvents = DGA_PumpEvents;
device->free = DGA_DeleteDevice;
}
memset(device->hidden, 0, (sizeof *device->hidden));
/* Set the function pointers */
device->VideoInit = DGA_VideoInit;
device->ListModes = DGA_ListModes;
device->SetVideoMode = DGA_SetVideoMode;
device->SetColors = DGA_SetColors;
device->UpdateRects = NULL;
device->VideoQuit = DGA_VideoQuit;
device->AllocHWSurface = DGA_AllocHWSurface;
device->CheckHWBlit = DGA_CheckHWBlit;
device->FillHWRect = DGA_FillHWRect;
device->SetHWColorKey = NULL;
device->SetHWAlpha = NULL;
device->LockHWSurface = DGA_LockHWSurface;
device->UnlockHWSurface = DGA_UnlockHWSurface;
device->FlipHWSurface = DGA_FlipHWSurface;
device->FreeHWSurface = DGA_FreeHWSurface;
device->SetGammaRamp = DGA_SetGammaRamp;
device->GetGammaRamp = NULL;
device->SetCaption = NULL;
device->SetIcon = NULL;
device->IconifyWindow = NULL;
device->GrabInput = NULL;
device->GetWMInfo = NULL;
device->InitOSKeymap = DGA_InitOSKeymap;
device->PumpEvents = DGA_PumpEvents;
device->free = DGA_DeleteDevice;
return device;
}
@ -329,7 +339,7 @@ static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat)
/* Open the X11 display */
display = NULL; /* Get it from DISPLAY environment variable */
DGA_Display = XOpenDisplay(display);
DGA_Display = pXOpenDisplay(display);
if ( DGA_Display == NULL ) {
SDL_SetError("Couldn't open X11 display");
return(-1);
@ -339,12 +349,12 @@ static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat)
if ( ! SDL_NAME(XDGAQueryExtension)(DGA_Display, &event_base, &error_base) ||
! SDL_NAME(XDGAQueryVersion)(DGA_Display, &major_version, &minor_version) ) {
SDL_SetError("DGA extension not available");
XCloseDisplay(DGA_Display);
pXCloseDisplay(DGA_Display);
return(-1);
}
if ( major_version < 2 ) {
SDL_SetError("DGA driver requires DGA 2.0 or newer");
XCloseDisplay(DGA_Display);
pXCloseDisplay(DGA_Display);
return(-1);
}
DGA_event_base = event_base;
@ -356,10 +366,10 @@ static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat)
int i, num_formats;
vformat->BitsPerPixel = DefaultDepth(DGA_Display, DGA_Screen);
pix_format = XListPixmapFormats(DGA_Display, &num_formats);
pix_format = pXListPixmapFormats(DGA_Display, &num_formats);
if ( pix_format == NULL ) {
SDL_SetError("Couldn't determine screen formats");
XCloseDisplay(DGA_Display);
pXCloseDisplay(DGA_Display);
return(-1);
}
for ( i=0; i<num_formats; ++i ) {
@ -368,7 +378,7 @@ static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat)
}
if ( i != num_formats )
vformat->BitsPerPixel = pix_format[i].bits_per_pixel;
XFree((char *)pix_format);
pXFree((char *)pix_format);
}
if ( vformat->BitsPerPixel > 8 ) {
vformat->Rmask = visual->red_mask;
@ -379,7 +389,7 @@ static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat)
/* Open access to the framebuffer */
if ( ! SDL_NAME(XDGAOpenFramebuffer)(DGA_Display, DGA_Screen) ) {
SDL_SetError("Unable to map the video memory");
XCloseDisplay(DGA_Display);
pXCloseDisplay(DGA_Display);
return(-1);
}
@ -399,7 +409,7 @@ static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat)
}
}
UpdateHWInfo(this, modes);
XFree(modes);
pXFree(modes);
/* Create the hardware surface lock mutex */
hw_lock = SDL_CreateMutex();
@ -438,7 +448,7 @@ SDL_Surface *DGA_SetVideoMode(_THIS, SDL_Surface *current,
/* Free any previous colormap */
if ( DGA_colormap ) {
XFreeColormap(DGA_Display, DGA_colormap);
pXFreeColormap(DGA_Display, DGA_colormap);
DGA_colormap = 0;
}
@ -469,7 +479,7 @@ SDL_Surface *DGA_SetVideoMode(_THIS, SDL_Surface *current,
/* Set the video mode */
mode = SDL_NAME(XDGASetMode)(DGA_Display, DGA_Screen, modes[i].num);
XFree(modes);
pXFree(modes);
if ( mode == NULL ) {
SDL_SetError("Unable to switch to requested mode");
return(NULL);
@ -817,7 +827,7 @@ static int DGA_FillHWRect(_THIS, SDL_Surface *dst, SDL_Rect *rect, Uint32 color)
#endif
SDL_NAME(XDGAFillRectangle)(DGA_Display, DGA_Screen, x, y, w, h, color);
if ( !(this->screen->flags & SDL_DOUBLEBUF) ) {
XFlush(DGA_Display);
pXFlush(DGA_Display);
}
DGA_AddBusySurface(dst);
UNLOCK_DISPLAY();
@ -859,7 +869,7 @@ static int HWAccelBlit(SDL_Surface *src, SDL_Rect *srcrect,
srcx, srcy, w, h, dstx, dsty);
}
if ( !(this->screen->flags & SDL_DOUBLEBUF) ) {
XFlush(DGA_Display);
pXFlush(DGA_Display);
}
DGA_AddBusySurface(src);
DGA_AddBusySurface(dst);
@ -939,7 +949,7 @@ static int DGA_FlipHWSurface(_THIS, SDL_Surface *surface)
DGA_WaitFlip(this);
SDL_NAME(XDGASetViewport)(DGA_Display, DGA_Screen,
0, flip_yoffset[flip_page], XDGAFlipRetrace);
XFlush(DGA_Display);
pXFlush(DGA_Display);
UNLOCK_DISPLAY();
was_flipped = 1;
flip_page = !flip_page;
@ -972,8 +982,8 @@ static int DGA_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors)
xcmap[i].flags = (DoRed|DoGreen|DoBlue);
}
LOCK_DISPLAY();
XStoreColors(DGA_Display, DGA_colormap, xcmap, ncolors);
XSync(DGA_Display, False);
pXStoreColors(DGA_Display, DGA_colormap, xcmap, ncolors);
pXSync(DGA_Display, False);
UNLOCK_DISPLAY();
/* That was easy. :) */
@ -1006,8 +1016,8 @@ int DGA_SetGammaRamp(_THIS, Uint16 *ramp)
xcmap[i].flags = (DoRed|DoGreen|DoBlue);
}
LOCK_DISPLAY();
XStoreColors(DGA_Display, DGA_colormap, xcmap, ncolors);
XSync(DGA_Display, False);
pXStoreColors(DGA_Display, DGA_colormap, xcmap, ncolors);
pXSync(DGA_Display, False);
UNLOCK_DISPLAY();
return(0);
}
@ -1019,7 +1029,7 @@ void DGA_VideoQuit(_THIS)
if ( DGA_Display ) {
/* Free colormap, if necessary */
if ( DGA_colormap ) {
XFreeColormap(DGA_Display, DGA_colormap);
pXFreeColormap(DGA_Display, DGA_colormap);
DGA_colormap = 0;
}
@ -1059,6 +1069,6 @@ void DGA_VideoQuit(_THIS)
DGA_FreeHWSurfaces(this);
/* Close up the display */
XCloseDisplay(DGA_Display);
pXCloseDisplay(DGA_Display);
}
}

View file

@ -4,6 +4,9 @@
noinst_LTLIBRARIES = libvideo_x11.la
libvideo_x11_la_SOURCES = $(X11_SRCS)
x11_lib = \"@x11_lib@\"
x11ext_lib = \"@x11ext_lib@\"
# The SDL X11 video driver sources
X11_SRCS = \
SDL_x11dga.c \
@ -25,4 +28,8 @@ X11_SRCS = \
SDL_x11wm.c \
SDL_x11wm_c.h \
SDL_x11yuv.c \
SDL_x11yuv_c.h
SDL_x11yuv_c.h \
SDL_x11dyn.c \
SDL_x11dyn.h \
SDL_x11sym.h

127
src/video/x11/SDL_x11dyn.c Normal file
View file

@ -0,0 +1,127 @@
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2004 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Sam Lantinga
slouken@libsdl.org
*/
/*#define DEBUG_DYNAMIC_X11 1*/
#include "SDL_x11dyn.h"
#ifdef DEBUG_DYNAMIC_X11
#include <stdio.h>
#endif
#ifdef X11_DYNAMIC
#include <dlfcn.h>
#include "SDL_name.h"
#include "SDL_loadso.h"
static const char *x11_library = X11_DYNAMIC;
static void *x11_handle = NULL;
static const char *x11ext_library = X11EXT_DYNAMIC;
static void *x11ext_handle = NULL;
static void *X11_GetSym(const char *fnname, int *rc)
{
void *fn = NULL;
if (*rc) { /* haven't already failed on a previous lookup? */
fn = SDL_LoadFunction(x11_handle, fnname);
#if DEBUG_DYNAMIC_X11
if (fn != NULL)
printf("X11: Found '%s' in libX11 (%p)\n", fnname, fn);
#endif
if (fn == NULL) { /* not found? Check libX11ext ... */
fn = SDL_LoadFunction(x11ext_handle, fnname);
#if DEBUG_DYNAMIC_X11
if (fn != NULL)
printf("X11: Found '%s' in libXext (%p)\n", fnname, fn);
else
printf("X11: Symbol '%s' NOT FOUND!\n", fnname);
#endif
}
*rc = (fn != NULL);
}
return fn;
}
#endif /* defined X11_DYNAMIC */
/* Define all the function pointers... */
#define SDL_X11_SYM(ret,fn,params) ret (*p##fn) params = NULL;
#include "SDL_x11sym.h"
#undef SDL_X11_SYM
static int x11_load_refcount = 0;
void SDL_X11_UnloadSymbols(void)
{
/* Don't actually unload if more than one module is using the libs... */
if (x11_load_refcount > 0) {
if (--x11_load_refcount == 0) {
/* set all the function pointers to NULL. */
#define SDL_X11_SYM(ret,fn,params) p##fn = NULL;
#include "SDL_x11sym.h"
#undef SDL_X11_SYM
#ifdef X11_DYNAMIC
if (x11_handle != NULL) {
SDL_UnloadObject(x11_handle);
x11_handle = NULL;
}
if (x11ext_handle != NULL) {
SDL_UnloadObject(x11ext_handle);
x11ext_handle = NULL;
}
#endif
}
}
}
/* returns non-zero if all needed symbols were loaded. */
int SDL_X11_LoadSymbols(void)
{
int rc = 1;
/* deal with multiple modules (dga, x11, etc) needing these symbols... */
if (x11_load_refcount++ == 0) {
#ifdef X11_DYNAMIC
x11_handle = SDL_LoadObject(x11_library);
x11ext_handle = SDL_LoadObject(x11ext_library);
if ((x11_handle != NULL) && (x11ext_handle != NULL)) {
#define SDL_X11_SYM(r,fn,arg) p##fn = X11_GetSym(#fn, &rc);
#include "SDL_x11sym.h"
#undef SDL_X11_SYM
}
if (!rc)
SDL_X11_UnloadSymbols(); /* in case one of these loaded... */
#else
#define SDL_X11_SYM(r,fn,arg) p##fn = fn;
#include "SDL_x11sym.h"
#undef SDL_X11_SYM
#endif
}
return rc;
}
/* end of SDL_x11dyn.c ... */

View file

@ -0,0 +1,71 @@
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2004 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Sam Lantinga
slouken@libsdl.org
*/
#ifndef _SDL_x11dyn_h
#define _SDL_x11dyn_h
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
#include <X11/Xproto.h>
#include <X11/Xlibint.h>
#include <X11/extensions/extutil.h>
#ifndef NO_SHARED_MEMORY
#include <sys/ipc.h>
#include <sys/shm.h>
#include <X11/extensions/XShm.h>
#endif
/*
* Never reference Xlib directly...we might load it dynamically at runtime.
* Even if we don't, for readability, we still use the function pointers
* (although the symbol resolution will be done by the loader in that case).
*
* We define SDL_X11_SYM and include SDL_x11sym.h to accomplish various
* goals, without having to duplicate those function signatures.
*/
#ifdef __cplusplus
extern "C" {
#endif
/* evil function signatures... */
typedef Bool (*SDL_X11_XESetWireToEventRetType)(Display*,XEvent*,xEvent*);
typedef int (*SDL_X11_XSynchronizeRetType)(Display*);
typedef Status (*SDL_X11_XESetEventToWireRetType)(Display*,XEvent*,xEvent*);
#define SDL_X11_SYM(ret,fn,params) extern ret (*p##fn) params;
#include "SDL_x11sym.h"
#undef SDL_X11_SYM
/* Macro in the xlib headers, not an actual symbol... */
#define pXDestroyImage XDestroyImage
int SDL_X11_LoadSymbols(void);
void SDL_X11_UnloadSymbols(void);
#ifdef __cplusplus
}
#endif
#endif /* !defined _SDL_x11dyn_h */

View file

@ -74,13 +74,13 @@ static int X11_KeyRepeat(Display *display, XEvent *event)
int repeated;
repeated = 0;
if ( XPending(display) ) {
XPeekEvent(display, &peekevent);
if ( pXPending(display) ) {
pXPeekEvent(display, &peekevent);
if ( (peekevent.type == KeyPress) &&
(peekevent.xkey.keycode == event->xkey.keycode) &&
((peekevent.xkey.time-event->xkey.time) < 2) ) {
repeated = 1;
XNextEvent(display, &peekevent);
pXNextEvent(display, &peekevent);
}
}
return(repeated);
@ -115,7 +115,7 @@ static __inline__ int X11_WarpedMotion(_THIS, XEvent *xevent)
(xevent->xmotion.y < MOUSE_FUDGE_FACTOR) ||
(xevent->xmotion.y > (h-MOUSE_FUDGE_FACTOR)) ) {
/* Get the events that have accumulated */
while ( XCheckTypedEvent(SDL_Display, MotionNotify, xevent) ) {
while ( pXCheckTypedEvent(SDL_Display, MotionNotify, xevent) ) {
deltax = xevent->xmotion.x - mouse_last.x;
deltay = xevent->xmotion.y - mouse_last.y;
#ifdef DEBUG_MOTION
@ -127,10 +127,10 @@ static __inline__ int X11_WarpedMotion(_THIS, XEvent *xevent)
}
mouse_last.x = w/2;
mouse_last.y = h/2;
XWarpPointer(SDL_Display, None, SDL_Window, 0, 0, 0, 0,
pXWarpPointer(SDL_Display, None, SDL_Window, 0, 0, 0, 0,
mouse_last.x, mouse_last.y);
for ( i=0; i<10; ++i ) {
XMaskEvent(SDL_Display, PointerMotionMask, xevent);
pXMaskEvent(SDL_Display, PointerMotionMask, xevent);
if ( (xevent->xmotion.x >
(mouse_last.x-MOUSE_FUDGE_FACTOR)) &&
(xevent->xmotion.x <
@ -160,7 +160,7 @@ static int X11_DispatchEvent(_THIS)
XEvent xevent;
memset(&xevent, '\0', sizeof (XEvent)); /* valgrind fix. --ryan. */
XNextEvent(SDL_Display, &xevent);
pXNextEvent(SDL_Display, &xevent);
posted = 0;
switch (xevent.type) {
@ -437,8 +437,8 @@ printf("Unhandled event %d\n", xevent.type);
int X11_Pending(Display *display)
{
/* Flush the display connection and look to see if events are queued */
XFlush(display);
if ( XEventsQueued(display, QueuedAlready) ) {
pXFlush(display);
if ( pXEventsQueued(display, QueuedAlready) ) {
return(1);
}
@ -452,7 +452,7 @@ int X11_Pending(Display *display)
FD_ZERO(&fdset);
FD_SET(x11_fd, &fdset);
if ( select(x11_fd+1, &fdset, NULL, NULL, &zero_time) == 1 ) {
return(XPending(display));
return(pXPending(display));
}
}
@ -619,7 +619,7 @@ SDL_keysym *X11_TranslateKey(Display *display, XKeyEvent *xkey, KeyCode kc,
/* Get the raw keyboard scancode */
keysym->scancode = kc;
xsym = XKeycodeToKeysym(display, kc, 0);
xsym = pXKeycodeToKeysym(display, kc, 0);
#ifdef DEBUG_KEYS
fprintf(stderr, "Translating key 0x%.4x (%d)\n", xsym, kc);
#endif
@ -711,7 +711,7 @@ SDL_keysym *X11_TranslateKey(Display *display, XKeyEvent *xkey, KeyCode kc,
}
#endif
/* Look up the translated value for the key event */
if ( XLookupString(xkey, (char *)keybuf, sizeof(keybuf),
if ( pXLookupString(xkey, (char *)keybuf, sizeof(keybuf),
NULL, &state) ) {
/*
* FIXME,: XLookupString() may yield more than one
@ -739,12 +739,12 @@ static void get_modifier_masks(Display *display)
if(got_masks)
return;
xmods = XGetModifierMapping(display);
xmods = pXGetModifierMapping(display);
n = xmods->max_keypermod;
for(i = 3; i < 8; i++) {
for(j = 0; j < n; j++) {
KeyCode kc = xmods->modifiermap[i * n + j];
KeySym ks = XKeycodeToKeysym(display, kc, 0);
KeySym ks = pXKeycodeToKeysym(display, kc, 0);
unsigned mask = 1 << i;
switch(ks) {
case XK_Num_Lock:
@ -762,7 +762,7 @@ static void get_modifier_masks(Display *display)
}
}
}
XFreeModifiermap(xmods);
pXFreeModifiermap(xmods);
got_masks = 1;
}
@ -804,7 +804,7 @@ Uint16 X11_KeyToUnicode(SDLKey keysym, SDLMod modifiers)
}
}
xkey.keycode = XKeysymToKeycode(xkey.display, xsym);
xkey.keycode = pXKeysymToKeycode(xkey.display, xsym);
get_modifier_masks(SDL_Display);
if(modifiers & KMOD_SHIFT)
@ -827,7 +827,7 @@ Uint16 X11_KeyToUnicode(SDLKey keysym, SDLMod modifiers)
xkey.state |= num_mask;
unicode = 0;
if ( XLookupString(&xkey, keybuf, sizeof(keybuf), NULL, NULL) )
if ( pXLookupString(&xkey, keybuf, sizeof(keybuf), NULL, NULL) )
unicode = (unsigned char)keybuf[0];
return(unicode);
}
@ -851,14 +851,14 @@ void X11_SetKeyboardState(Display *display, const char *key_vec)
/* The first time the window is mapped, we initialize key state */
if ( ! key_vec ) {
XQueryKeymap(display, keys_return);
pXQueryKeymap(display, keys_return);
key_vec = keys_return;
}
/* Get the keyboard modifier state */
modstate = 0;
get_modifier_masks(display);
if ( XQueryPointer(display, DefaultRootWindow(display),
if ( pXQueryPointer(display, DefaultRootWindow(display),
&junk_window, &junk_window, &x, &y, &x, &y, &mask) ) {
if ( mask & LockMask ) {
modstate |= KMOD_CAPS;

View file

@ -68,7 +68,7 @@ static int X11_SetGammaNoLock(_THIS, float red, float green, float blue)
}
if ( SDL_GetAppState() & SDL_APPACTIVE ) {
succeeded = SDL_NAME(XF86VidModeSetGamma)(SDL_Display, SDL_Screen, &gamma);
XSync(SDL_Display, False);
pXSync(SDL_Display, False);
} else {
gamma_saved[0] = gamma.red;
gamma_saved[1] = gamma.green;

View file

@ -69,10 +69,10 @@ XVisualInfo *X11_GL_GetVisual(_THIS)
XVisualInfo vi_in;
int out_count;
XGetWindowAttributes(SDL_Display, SDL_Window, &a);
pXGetWindowAttributes(SDL_Display, SDL_Window, &a);
vi_in.screen = SDL_Screen;
vi_in.visualid = XVisualIDFromVisual(a.visual);
glx_visualinfo = XGetVisualInfo(SDL_Display,
vi_in.visualid = pXVisualIDFromVisual(a.visual);
glx_visualinfo = pXGetVisualInfo(SDL_Display,
VisualScreenMask|VisualIDMask, &vi_in, &out_count);
return glx_visualinfo;
}
@ -188,7 +188,7 @@ int X11_GL_CreateWindow(_THIS, int w, int h)
attributes.colormap = SDL_XColorMap;
mask = CWBackPixel | CWBorderPixel | CWColormap;
SDL_Window = XCreateWindow(SDL_Display, WMwindow,
SDL_Window = pXCreateWindow(SDL_Display, WMwindow,
0, 0, w, h, 0, glx_visualinfo->depth,
InputOutput, glx_visualinfo->visual,
mask, &attributes);
@ -209,10 +209,10 @@ int X11_GL_CreateContext(_THIS)
int retval;
#ifdef HAVE_OPENGL
/* We do this to create a clean separation between X and GLX errors. */
XSync( SDL_Display, False );
pXSync( SDL_Display, False );
glx_context = this->gl_data->glXCreateContext(GFX_Display,
glx_visualinfo, NULL, True);
XSync( GFX_Display, False );
pXSync( GFX_Display, False );
if (glx_context == NULL) {
SDL_SetError("Could not create GL context");
@ -296,7 +296,7 @@ int X11_GL_MakeCurrent(_THIS)
SDL_SetError("Unable to make GL context current");
retval = -1;
}
XSync( GFX_Display, False );
pXSync( GFX_Display, False );
/*
* The context is now current, check for glXReleaseBuffersMESA()

View file

@ -35,9 +35,6 @@ static char rcsid =
#ifndef NO_SHARED_MEMORY
/* Shared memory information */
extern int XShmQueryExtension(Display *dpy); /* Not in X11 headers */
/* Shared memory error handler routine */
static int shm_error;
static int (*X_handler)(Display *, XErrorEvent *) = NULL;
@ -61,10 +58,10 @@ static void try_mitshm(_THIS, SDL_Surface *screen)
shminfo.readOnly = False;
if ( shminfo.shmaddr != (char *)-1 ) {
shm_error = False;
X_handler = XSetErrorHandler(shm_errhandler);
XShmAttach(SDL_Display, &shminfo);
XSync(SDL_Display, True);
XSetErrorHandler(X_handler);
X_handler = pXSetErrorHandler(shm_errhandler);
pXShmAttach(SDL_Display, &shminfo);
pXSync(SDL_Display, True);
pXSetErrorHandler(X_handler);
if ( shm_error )
shmdt(shminfo.shmaddr);
} else {
@ -90,13 +87,13 @@ int X11_SetupImage(_THIS, SDL_Surface *screen)
#ifndef NO_SHARED_MEMORY
try_mitshm(this, screen);
if(use_mitshm) {
SDL_Ximage = XShmCreateImage(SDL_Display, SDL_Visual,
SDL_Ximage = pXShmCreateImage(SDL_Display, SDL_Visual,
this->hidden->depth, ZPixmap,
shminfo.shmaddr, &shminfo,
screen->w, screen->h);
if(!SDL_Ximage) {
XShmDetach(SDL_Display, &shminfo);
XSync(SDL_Display, False);
pXShmDetach(SDL_Display, &shminfo);
pXSync(SDL_Display, False);
shmdt(shminfo.shmaddr);
screen->pixels = NULL;
goto error;
@ -113,7 +110,7 @@ int X11_SetupImage(_THIS, SDL_Surface *screen)
return -1;
}
bpp = screen->format->BytesPerPixel;
SDL_Ximage = XCreateImage(SDL_Display, SDL_Visual,
SDL_Ximage = pXCreateImage(SDL_Display, SDL_Visual,
this->hidden->depth, ZPixmap, 0,
(char *)screen->pixels,
screen->w, screen->h,
@ -136,11 +133,11 @@ error:
void X11_DestroyImage(_THIS, SDL_Surface *screen)
{
if ( SDL_Ximage ) {
XDestroyImage(SDL_Ximage);
pXDestroyImage(SDL_Ximage);
#ifndef NO_SHARED_MEMORY
if ( use_mitshm ) {
XShmDetach(SDL_Display, &shminfo);
XSync(SDL_Display, False);
pXShmDetach(SDL_Display, &shminfo);
pXSync(SDL_Display, False);
shmdt(shminfo.shmaddr);
}
#endif /* ! NO_SHARED_MEMORY */
@ -221,7 +218,7 @@ void X11_FreeHWSurface(_THIS, SDL_Surface *surface)
int X11_LockHWSurface(_THIS, SDL_Surface *surface)
{
if ( (surface == SDL_VideoSurface) && blit_queued ) {
XSync(GFX_Display, False);
pXSync(GFX_Display, False);
blit_queued = 0;
}
return(0);
@ -244,15 +241,15 @@ static void X11_NormalUpdate(_THIS, int numrects, SDL_Rect *rects)
if ( rects[i].w == 0 || rects[i].h == 0 ) { /* Clipped? */
continue;
}
XPutImage(GFX_Display, SDL_Window, SDL_GC, SDL_Ximage,
pXPutImage(GFX_Display, SDL_Window, SDL_GC, SDL_Ximage,
rects[i].x, rects[i].y,
rects[i].x, rects[i].y, rects[i].w, rects[i].h);
}
if ( SDL_VideoSurface->flags & SDL_ASYNCBLIT ) {
XFlush(GFX_Display);
pXFlush(GFX_Display);
blit_queued = 1;
} else {
XSync(GFX_Display, False);
pXSync(GFX_Display, False);
}
}
@ -265,16 +262,16 @@ static void X11_MITSHMUpdate(_THIS, int numrects, SDL_Rect *rects)
if ( rects[i].w == 0 || rects[i].h == 0 ) { /* Clipped? */
continue;
}
XShmPutImage(GFX_Display, SDL_Window, SDL_GC, SDL_Ximage,
pXShmPutImage(GFX_Display, SDL_Window, SDL_GC, SDL_Ximage,
rects[i].x, rects[i].y,
rects[i].x, rects[i].y, rects[i].w, rects[i].h,
False);
}
if ( SDL_VideoSurface->flags & SDL_ASYNCBLIT ) {
XFlush(GFX_Display);
pXFlush(GFX_Display);
blit_queued = 1;
} else {
XSync(GFX_Display, False);
pXSync(GFX_Display, False);
}
#endif /* ! NO_SHARED_MEMORY */
}
@ -308,14 +305,14 @@ void X11_RefreshDisplay(_THIS)
}
#ifndef NO_SHARED_MEMORY
if ( this->UpdateRects == X11_MITSHMUpdate ) {
XShmPutImage(SDL_Display, SDL_Window, SDL_GC, SDL_Ximage,
pXShmPutImage(SDL_Display, SDL_Window, SDL_GC, SDL_Ximage,
0, 0, 0, 0, this->screen->w, this->screen->h,
False);
} else
#endif /* ! NO_SHARED_MEMORY */
{
XPutImage(SDL_Display, SDL_Window, SDL_GC, SDL_Ximage,
pXPutImage(SDL_Display, SDL_Window, SDL_GC, SDL_Ximage,
0, 0, 0, 0, this->screen->w, this->screen->h);
}
XSync(SDL_Display, False);
pXSync(SDL_Display, False);
}

View file

@ -141,7 +141,7 @@ static void set_best_resolution(_THIS, int width, int height)
(modes[i]->vdisplay != mode.vdisplay) ) {
SDL_NAME(XF86VidModeSwitchToMode)(SDL_Display, SDL_Screen, modes[i]);
}
XFree(modes);
pXFree(modes);
}
}
#endif /* XFREE86_VM */
@ -180,7 +180,7 @@ static void set_best_resolution(_THIS, int width, int height)
SDL_modelist[i]->w,
SDL_modelist[i]->h,
0);
XSync(SDL_Display, False);
pXSync(SDL_Display, False);
}
}
}
@ -230,7 +230,7 @@ void X11_WaitMapped(_THIS, Window win)
{
XEvent event;
do {
XMaskEvent(SDL_Display, StructureNotifyMask, &event);
pXMaskEvent(SDL_Display, StructureNotifyMask, &event);
} while ( (event.type != MapNotify) || (event.xmap.event != win) );
}
@ -239,19 +239,19 @@ void X11_WaitUnmapped(_THIS, Window win)
{
XEvent event;
do {
XMaskEvent(SDL_Display, StructureNotifyMask, &event);
pXMaskEvent(SDL_Display, StructureNotifyMask, &event);
} while ( (event.type != UnmapNotify) || (event.xunmap.event != win) );
}
static void move_cursor_to(_THIS, int x, int y)
{
XWarpPointer(SDL_Display, None, SDL_Root, 0, 0, 0, 0, x, y);
pXWarpPointer(SDL_Display, None, SDL_Root, 0, 0, 0, 0, x, y);
}
static int add_visual(_THIS, int depth, int class)
{
XVisualInfo vi;
if(XMatchVisualInfo(SDL_Display, SDL_Screen, depth, class, &vi)) {
if(pXMatchVisualInfo(SDL_Display, SDL_Screen, depth, class, &vi)) {
int n = this->hidden->nvisuals;
this->hidden->visuals[n].depth = vi.depth;
this->hidden->visuals[n].visual = vi.visual;
@ -267,13 +267,13 @@ static int add_visual_byid(_THIS, const char *visual_id)
if ( visual_id ) {
memset(&template, 0, (sizeof template));
template.visualid = strtol(visual_id, NULL, 0);
vi = XGetVisualInfo(SDL_Display, VisualIDMask, &template, &nvis);
vi = pXGetVisualInfo(SDL_Display, VisualIDMask, &template, &nvis);
if ( vi ) {
int n = this->hidden->nvisuals;
this->hidden->visuals[n].depth = vi->depth;
this->hidden->visuals[n].visual = vi->visual;
this->hidden->nvisuals++;
XFree(vi);
pXFree(vi);
}
}
return(this->hidden->nvisuals);
@ -400,7 +400,7 @@ int X11_GetVideoModes(_THIS)
}
SDL_modelist[n] = NULL;
}
XFree(modes);
pXFree(modes);
use_vidmode = vm_major * 100 + vm_minor;
save_mode(this);
@ -474,7 +474,7 @@ int X11_GetVideoModes(_THIS)
use_xme = 0;
}
if ( modelist ) {
XFree(modelist);
pXFree(modelist);
}
#endif /* HAVE_XIGXME */
@ -509,7 +509,7 @@ int X11_GetVideoModes(_THIS)
}
/* look up the pixel quantum for each depth */
pf = XListPixmapFormats(SDL_Display, &np);
pf = pXListPixmapFormats(SDL_Display, &np);
for(i = 0; i < this->hidden->nvisuals; i++) {
int d = this->hidden->visuals[i].depth;
for(j = 0; j < np; j++)
@ -518,7 +518,7 @@ int X11_GetVideoModes(_THIS)
this->hidden->visuals[i].bpp = j < np ? pf[j].bits_per_pixel : d;
}
XFree(pf);
pXFree(pf);
}
if ( SDL_modelist == NULL ) {
@ -592,7 +592,7 @@ int X11_GetVideoModes(_THIS)
xinerama_y = xinerama[i].y_org;
}
}
XFree(xinerama);
pXFree(xinerama);
}
#endif /* HAVE_XINERAMA */
@ -658,15 +658,15 @@ int X11_ResizeFullScreen(_THIS)
if ( current_h > real_h ) {
real_h = MAX(real_h, screen_h);
}
XMoveResizeWindow(SDL_Display, FSwindow, x, y, real_w, real_h);
pXMoveResizeWindow(SDL_Display, FSwindow, x, y, real_w, real_h);
move_cursor_to(this, real_w/2, real_h/2);
/* Center and reparent the drawing window */
x = (real_w - current_w)/2;
y = (real_h - current_h)/2;
XReparentWindow(SDL_Display, SDL_Window, FSwindow, x, y);
pXReparentWindow(SDL_Display, SDL_Window, FSwindow, x, y);
/* FIXME: move the mouse to the old relative location */
XSync(SDL_Display, True); /* Flush spurious mode change events */
pXSync(SDL_Display, True); /* Flush spurious mode change events */
}
return(1);
}
@ -676,7 +676,7 @@ void X11_QueueEnterFullScreen(_THIS)
switch_waiting = 0x01 | SDL_FULLSCREEN;
switch_time = SDL_GetTicks() + 1500;
#if 0 /* This causes a BadMatch error if the window is iconified (not needed) */
XSetInputFocus(SDL_Display, WMwindow, RevertToNone, CurrentTime);
pXSetInputFocus(SDL_Display, WMwindow, RevertToNone, CurrentTime);
#endif
}
@ -709,14 +709,14 @@ int X11_EnterFullScreen(_THIS)
if ( current_h > real_h ) {
real_h = MAX(real_h, screen_h);
}
XMoveResizeWindow(SDL_Display, FSwindow,
pXMoveResizeWindow(SDL_Display, FSwindow,
xinerama_x, xinerama_y, real_w, real_h);
XMapRaised(SDL_Display, FSwindow);
pXMapRaised(SDL_Display, FSwindow);
X11_WaitMapped(this, FSwindow);
#if 0 /* This seems to break WindowMaker in focus-follows-mouse mode */
/* Make sure we got to the top of the window stack */
if ( XQueryTree(SDL_Display, SDL_Root, &tmpwin, &tmpwin,
if ( pXQueryTree(SDL_Display, SDL_Root, &tmpwin, &tmpwin,
&windows, &nwindows) && windows ) {
/* If not, try to put us there - if fail... oh well */
if ( windows[nwindows-1] != FSwindow ) {
@ -729,13 +729,13 @@ int X11_EnterFullScreen(_THIS)
}
}
windows[nwindows-1] = FSwindow;
XRestackWindows(SDL_Display, windows, nwindows);
XSync(SDL_Display, False);
pXRestackWindows(SDL_Display, windows, nwindows);
pXSync(SDL_Display, False);
}
XFree(windows);
pXFree(windows);
}
#else
XRaiseWindow(SDL_Display, FSwindow);
pXRaiseWindow(SDL_Display, FSwindow);
#endif
#ifdef XFREE86_VM
@ -753,7 +753,7 @@ int X11_EnterFullScreen(_THIS)
}
/* Set the colormap */
if ( SDL_XColorMap ) {
XInstallColormap(SDL_Display, SDL_XColorMap);
pXInstallColormap(SDL_Display, SDL_XColorMap);
}
if ( okay )
X11_GrabInputNoLock(this, this->input_grab | SDL_GRAB_FULLSCREEN);
@ -774,7 +774,7 @@ int X11_EnterFullScreen(_THIS)
int X11_LeaveFullScreen(_THIS)
{
if ( currently_fullscreen ) {
XReparentWindow(SDL_Display, SDL_Window, WMwindow, 0, 0);
pXReparentWindow(SDL_Display, SDL_Window, WMwindow, 0, 0);
#ifdef XFREE86_VM
if ( use_vidmode ) {
restore_mode(this);
@ -796,14 +796,14 @@ int X11_LeaveFullScreen(_THIS)
saved_res.width,
saved_res.height,
0);
XSync(SDL_Display, False);
pXSync(SDL_Display, False);
}
}
#endif
XUnmapWindow(SDL_Display, FSwindow);
pXUnmapWindow(SDL_Display, FSwindow);
X11_WaitUnmapped(this, FSwindow);
XSync(SDL_Display, True); /* Flush spurious mode change events */
pXSync(SDL_Display, True); /* Flush spurious mode change events */
currently_fullscreen = 0;
}
/* If we get popped out of fullscreen mode for some reason, input_grab

View file

@ -50,8 +50,8 @@ void X11_FreeWMCursor(_THIS, WMcursor *cursor)
{
if ( SDL_Display != NULL ) {
SDL_Lock_EventThread();
XFreeCursor(SDL_Display, cursor->x_cursor);
XSync(SDL_Display, False);
pXFreeCursor(SDL_Display, cursor->x_cursor);
pXSync(SDL_Display, False);
SDL_Unlock_EventThread();
}
free(cursor);
@ -105,48 +105,48 @@ WMcursor *X11_CreateWMCursor(_THIS,
SDL_Lock_EventThread();
/* Create the data image */
data_image = XCreateImage(SDL_Display,
data_image = pXCreateImage(SDL_Display,
DefaultVisual(SDL_Display, SDL_Screen),
1, XYBitmap, 0, x_data, w, h, 8, w/8);
data_image->byte_order = MSBFirst;
data_image->bitmap_bit_order = MSBFirst;
data_pixmap = XCreatePixmap(SDL_Display, SDL_Root, w, h, 1);
data_pixmap = pXCreatePixmap(SDL_Display, SDL_Root, w, h, 1);
/* Create the data mask */
mask_image = XCreateImage(SDL_Display,
mask_image = pXCreateImage(SDL_Display,
DefaultVisual(SDL_Display, SDL_Screen),
1, XYBitmap, 0, x_mask, w, h, 8, w/8);
mask_image->byte_order = MSBFirst;
mask_image->bitmap_bit_order = MSBFirst;
mask_pixmap = XCreatePixmap(SDL_Display, SDL_Root, w, h, 1);
mask_pixmap = pXCreatePixmap(SDL_Display, SDL_Root, w, h, 1);
/* Create the graphics context */
GCvalues.function = GXcopy;
GCvalues.foreground = ~0;
GCvalues.background = 0;
GCvalues.plane_mask = AllPlanes;
GCcursor = XCreateGC(SDL_Display, data_pixmap,
GCcursor = pXCreateGC(SDL_Display, data_pixmap,
(GCFunction|GCForeground|GCBackground|GCPlaneMask),
&GCvalues);
/* Blit the images to the pixmaps */
XPutImage(SDL_Display, data_pixmap, GCcursor, data_image,
pXPutImage(SDL_Display, data_pixmap, GCcursor, data_image,
0, 0, 0, 0, w, h);
XPutImage(SDL_Display, mask_pixmap, GCcursor, mask_image,
pXPutImage(SDL_Display, mask_pixmap, GCcursor, mask_image,
0, 0, 0, 0, w, h);
XFreeGC(SDL_Display, GCcursor);
pXFreeGC(SDL_Display, GCcursor);
/* These free the x_data and x_mask memory pointers */
XDestroyImage(data_image);
XDestroyImage(mask_image);
pXDestroyImage(data_image);
pXDestroyImage(mask_image);
/* Create the cursor */
cursor->x_cursor = XCreatePixmapCursor(SDL_Display, data_pixmap,
cursor->x_cursor = pXCreatePixmapCursor(SDL_Display, data_pixmap,
mask_pixmap, &black, &white, hot_x, hot_y);
XFreePixmap(SDL_Display, data_pixmap);
XFreePixmap(SDL_Display, mask_pixmap);
pXFreePixmap(SDL_Display, data_pixmap);
pXFreePixmap(SDL_Display, mask_pixmap);
/* Release the event thread */
XSync(SDL_Display, False);
pXSync(SDL_Display, False);
SDL_Unlock_EventThread();
return(cursor);
@ -164,13 +164,13 @@ int X11_ShowWMCursor(_THIS, WMcursor *cursor)
SDL_Lock_EventThread();
if ( cursor == NULL ) {
if ( SDL_BlankCursor != NULL ) {
XDefineCursor(SDL_Display, SDL_Window,
pXDefineCursor(SDL_Display, SDL_Window,
SDL_BlankCursor->x_cursor);
}
} else {
XDefineCursor(SDL_Display, SDL_Window, cursor->x_cursor);
pXDefineCursor(SDL_Display, SDL_Window, cursor->x_cursor);
}
XSync(SDL_Display, False);
pXSync(SDL_Display, False);
SDL_Unlock_EventThread();
}
return(1);
@ -187,8 +187,8 @@ void X11_WarpWMCursor(_THIS, Uint16 x, Uint16 y)
SDL_PrivateMouseMotion(0, 0, x, y);
} else {
SDL_Lock_EventThread();
XWarpPointer(SDL_Display, None, SDL_Window, 0, 0, 0, 0, x, y);
XSync(SDL_Display, False);
pXWarpPointer(SDL_Display, None, SDL_Window, 0, 0, 0, 0, x, y);
pXSync(SDL_Display, False);
SDL_Unlock_EventThread();
}
}
@ -224,7 +224,7 @@ static void SetMouseAccel(_THIS, const char *accel_param)
}
}
if ( mouse_param_buf ) {
XChangePointerControl(SDL_Display, True, True,
pXChangePointerControl(SDL_Display, True, True,
accel_value[0], accel_value[1], accel_value[2]);
free(mouse_param_buf);
}
@ -257,7 +257,7 @@ void X11_CheckMouseModeNoLock(_THIS)
SDL_GetMouseState(&mouse_last.x, &mouse_last.y);
/* Use as raw mouse mickeys as possible */
XGetPointerControl(SDL_Display,
pXGetPointerControl(SDL_Display,
&mouse_accel.numerator,
&mouse_accel.denominator,
&mouse_accel.threshold);
@ -273,7 +273,7 @@ void X11_CheckMouseModeNoLock(_THIS)
if ( using_dga & DGA_MOUSE ) {
X11_DisableDGAMouse(this);
} else {
XChangePointerControl(SDL_Display, True, True,
pXChangePointerControl(SDL_Display, True, True,
mouse_accel.numerator,
mouse_accel.denominator,
mouse_accel.threshold);

144
src/video/x11/SDL_x11sym.h Normal file
View file

@ -0,0 +1,144 @@
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2004 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Sam Lantinga
slouken@libsdl.org
*/
SDL_X11_SYM(XClassHint*,XAllocClassHint,(void))
SDL_X11_SYM(Status,XAllocColor,(Display*,Colormap,XColor*))
SDL_X11_SYM(XSizeHints*,XAllocSizeHints,(void))
SDL_X11_SYM(XWMHints*,XAllocWMHints,(void))
SDL_X11_SYM(int,XChangePointerControl,(Display*,Bool,Bool,int,int,int))
SDL_X11_SYM(int,XChangeProperty,(Display*,Window,Atom,Atom,int,int,_Xconst unsigned char*,int))
SDL_X11_SYM(int,XChangeWindowAttributes,(Display*,Window,unsigned long,XSetWindowAttributes*))
SDL_X11_SYM(Bool,XCheckTypedEvent,(Display*,int,XEvent*))
SDL_X11_SYM(int,XClearWindow,(Display*,Window))
SDL_X11_SYM(int,XCloseDisplay,(Display*))
SDL_X11_SYM(Colormap,XCreateColormap,(Display*,Window,Visual*,int))
SDL_X11_SYM(Cursor,XCreatePixmapCursor,(Display*,Pixmap,Pixmap,XColor*,XColor*,unsigned int,unsigned int))
SDL_X11_SYM(GC,XCreateGC,(Display*,Drawable,unsigned long,XGCValues*))
SDL_X11_SYM(XImage*,XCreateImage,(Display*,Visual*,unsigned int,int,int,char*,unsigned int,unsigned int,int,int))
SDL_X11_SYM(Pixmap,XCreatePixmap,(Display*,Drawable,unsigned int,unsigned int,unsigned int))
SDL_X11_SYM(Pixmap,XCreatePixmapFromBitmapData,(Display*,Drawable,char*,unsigned int,unsigned int,unsigned long,unsigned long,unsigned int))
SDL_X11_SYM(Window,XCreateSimpleWindow,(Display*,Window,int,int,unsigned int,unsigned int,unsigned int,unsigned long,unsigned long))
SDL_X11_SYM(Window,XCreateWindow,(Display*,Window,int,int,unsigned int,unsigned int,unsigned int,int,unsigned int,Visual*,unsigned long,XSetWindowAttributes*))
SDL_X11_SYM(int,XDefineCursor,(Display*,Window,Cursor))
SDL_X11_SYM(int,XDeleteProperty,(Display*,Window,Atom))
SDL_X11_SYM(int,XDestroyWindow,(Display*,Window))
SDL_X11_SYM(char*,XDisplayName,(_Xconst char*))
SDL_X11_SYM(int,XEventsQueued,(Display*,int))
SDL_X11_SYM(int,XFlush,(Display*))
SDL_X11_SYM(int,XFree,(void*))
SDL_X11_SYM(int,XFreeColormap,(Display*,Colormap))
SDL_X11_SYM(int,XFreeColors,(Display*,Colormap,unsigned long*,int,unsigned long))
SDL_X11_SYM(int,XFreeCursor,(Display*,Cursor))
SDL_X11_SYM(int,XFreeGC,(Display*,GC))
SDL_X11_SYM(int,XFreeModifiermap,(XModifierKeymap*))
SDL_X11_SYM(int,XFreePixmap,(Display*,Pixmap))
SDL_X11_SYM(int,XGetErrorDatabaseText,(Display*,_Xconst char*,_Xconst char*,_Xconst char*,char*,int))
SDL_X11_SYM(XModifierKeymap*,XGetModifierMapping,(Display*))
SDL_X11_SYM(int,XGetPointerControl,(Display*,int*,int*,int*))
SDL_X11_SYM(XVisualInfo*,XGetVisualInfo,(Display*,long,XVisualInfo*,int*))
SDL_X11_SYM(XWMHints*,XGetWMHints,(Display*,Window))
SDL_X11_SYM(Status,XGetWMIconName,(Display*,Window,XTextProperty*))
SDL_X11_SYM(Status,XGetWMName,(Display*,Window,XTextProperty*))
SDL_X11_SYM(Status,XGetWindowAttributes,(Display*,Window,XWindowAttributes*))
SDL_X11_SYM(int,XGrabKeyboard,(Display*,Window,Bool,int,int,Time))
SDL_X11_SYM(int,XGrabPointer,(Display*,Window,Bool,unsigned int,int,int,Window,Cursor,Time))
SDL_X11_SYM(Status,XIconifyWindow,(Display*,Window,int))
SDL_X11_SYM(int,XInstallColormap,(Display*,Colormap))
SDL_X11_SYM(KeyCode,XKeysymToKeycode,(Display*,KeySym))
SDL_X11_SYM(Atom,XInternAtom,(Display*,_Xconst char*,Bool))
SDL_X11_SYM(XPixmapFormatValues*,XListPixmapFormats,(Display*,int*))
SDL_X11_SYM(int,XLookupString,(XKeyEvent*,char*,int,KeySym*,XComposeStatus*))
SDL_X11_SYM(int,XMapRaised,(Display*,Window))
SDL_X11_SYM(int,XMapWindow,(Display*,Window))
SDL_X11_SYM(int,XMaskEvent,(Display*,long,XEvent*))
SDL_X11_SYM(Status,XMatchVisualInfo,(Display*,int,int,int,XVisualInfo*))
SDL_X11_SYM(int,XMissingExtension,(Display*,_Xconst char*))
SDL_X11_SYM(int,XMoveResizeWindow,(Display*,Window,int,int,unsigned int,unsigned int))
SDL_X11_SYM(int,XMoveWindow,(Display*,Window,int,int))
SDL_X11_SYM(int,XNextEvent,(Display*,XEvent*))
SDL_X11_SYM(Display*,XOpenDisplay,(_Xconst char*))
SDL_X11_SYM(int,XPeekEvent,(Display*,XEvent*))
SDL_X11_SYM(int,XPending,(Display*))
SDL_X11_SYM(int,XPutImage,(Display*,Drawable,GC,XImage*,int,int,int,int,unsigned int,unsigned int))
SDL_X11_SYM(int,XQueryColors,(Display*,Colormap,XColor*,int))
SDL_X11_SYM(int,XQueryKeymap,(Display*,char [32]))
SDL_X11_SYM(Bool,XQueryPointer,(Display*,Window,Window*,Window*,int*,int*,int*,int*,unsigned int*))
SDL_X11_SYM(int,XRaiseWindow,(Display*,Window))
SDL_X11_SYM(int,XReparentWindow,(Display*,Window,Window,int,int))
SDL_X11_SYM(int,XResizeWindow,(Display*,Window,unsigned int,unsigned int))
SDL_X11_SYM(int,XSelectInput,(Display*,Window,long))
SDL_X11_SYM(Status,XSendEvent,(Display*,Window,Bool,long,XEvent*))
SDL_X11_SYM(int,XSetClassHint,(Display*,Window,XClassHint*))
SDL_X11_SYM(XErrorHandler,XSetErrorHandler,(XErrorHandler))
SDL_X11_SYM(XIOErrorHandler,XSetIOErrorHandler,(XIOErrorHandler))
SDL_X11_SYM(int,XSetTransientForHint,(Display*,Window,Window))
SDL_X11_SYM(int,XSetWMHints,(Display*,Window,XWMHints*))
SDL_X11_SYM(void,XSetWMIconName,(Display*,Window,XTextProperty*))
SDL_X11_SYM(void,XSetWMName,(Display*,Window,XTextProperty*))
SDL_X11_SYM(void,XSetWMNormalHints,(Display*,Window,XSizeHints*))
SDL_X11_SYM(Status,XSetWMProtocols,(Display*,Window,Atom*,int))
SDL_X11_SYM(int,XSetWindowBackground,(Display*,Window,unsigned long))
SDL_X11_SYM(int,XSetWindowBackgroundPixmap,(Display*,Window,Pixmap))
SDL_X11_SYM(int,XSetWindowColormap,(Display*,Window,Colormap))
SDL_X11_SYM(int,XStoreColors,(Display*,Colormap,XColor*,int))
SDL_X11_SYM(Status,XStringListToTextProperty,(char**,int,XTextProperty*))
SDL_X11_SYM(int,XSync,(Display*,Bool))
SDL_X11_SYM(int,XUngrabKeyboard,(Display*,Time))
SDL_X11_SYM(int,XUngrabPointer,(Display*,Time))
SDL_X11_SYM(int,XUnmapWindow,(Display*,Window))
SDL_X11_SYM(int,XWarpPointer,(Display*,Window,Window,int,int,unsigned int,unsigned int,int,int))
SDL_X11_SYM(VisualID,XVisualIDFromVisual,(Visual*))
SDL_X11_SYM(XExtDisplayInfo*,XextAddDisplay,(XExtensionInfo*,Display*,char*,XExtensionHooks*,int,XPointer))
SDL_X11_SYM(XExtensionInfo*,XextCreateExtension,(void))
SDL_X11_SYM(void,XextDestroyExtension,(XExtensionInfo*))
SDL_X11_SYM(XExtDisplayInfo*,XextFindDisplay,(XExtensionInfo*,Display*))
SDL_X11_SYM(int,XextRemoveDisplay,(XExtensionInfo*,Display*))
SDL_X11_SYM(int,Xutf8TextListToTextProperty,(Display*,char**,int,XICCEncodingStyle,XTextProperty*))
SDL_X11_SYM(void,_XEatData,(Display*,unsigned long))
SDL_X11_SYM(void,_XFlush,(Display*))
SDL_X11_SYM(void,_XFlushGCCache,(Display*,GC))
SDL_X11_SYM(int,_XRead,(Display*,char*,long))
SDL_X11_SYM(void,_XReadPad,(Display*,char*,long))
SDL_X11_SYM(void,_XSend,(Display*,_Xconst char*,long))
SDL_X11_SYM(Status,_XReply,(Display*,xReply*,int,Bool))
SDL_X11_SYM(unsigned long,_XSetLastRequestRead,(Display*,xGenericReply*))
#if NeedWidePrototypes
SDL_X11_SYM(KeySym,XKeycodeToKeysym,(Display*,unsigned int,int))
#else
SDL_X11_SYM(KeySym,XKeycodeToKeysym,(Display*,KeyCode,int))
#endif
#ifndef NO_SHARED_MEMORY
SDL_X11_SYM(Status,XShmAttach,(Display*,XShmSegmentInfo*))
SDL_X11_SYM(Status,XShmDetach,(Display*,XShmSegmentInfo*))
SDL_X11_SYM(Status,XShmPutImage,(Display*,Drawable,GC,XImage*,int,int,int,int,unsigned int,unsigned int,Bool))
SDL_X11_SYM(XImage*,XShmCreateImage,(Display*,Visual*,unsigned int,int,char*,XShmSegmentInfo*,unsigned int,unsigned int))
SDL_X11_SYM(Bool,XShmQueryExtension,(Display*))
#endif
SDL_X11_SYM(SDL_X11_XSynchronizeRetType,XSynchronize,(Display*,Bool))
SDL_X11_SYM(SDL_X11_XESetWireToEventRetType,XESetWireToEvent,(Display*,int,SDL_X11_XESetWireToEventRetType))
SDL_X11_SYM(SDL_X11_XESetEventToWireRetType,XESetEventToWire,(Display*,int,SDL_X11_XESetEventToWireRetType))
/* end of SDL_x11sym.h ... */

View file

@ -85,15 +85,18 @@ static int X11_SetColors(_THIS, int firstcolor, int ncolors,
static int X11_SetGammaRamp(_THIS, Uint16 *ramp);
static void X11_VideoQuit(_THIS);
/* X11 driver bootstrap functions */
static int X11_Available(void)
{
Display *display;
display = XOpenDisplay(NULL);
if ( display != NULL ) {
XCloseDisplay(display);
Display *display = NULL;
if ( SDL_X11_LoadSymbols() ) {
display = pXOpenDisplay(NULL);
if ( display != NULL ) {
pXCloseDisplay(display);
}
SDL_X11_UnloadSymbols();
}
return(display != NULL);
}
@ -108,80 +111,83 @@ static void X11_DeleteDevice(SDL_VideoDevice *device)
free(device->gl_data);
}
free(device);
SDL_X11_UnloadSymbols();
}
}
static SDL_VideoDevice *X11_CreateDevice(int devindex)
{
SDL_VideoDevice *device;
SDL_VideoDevice *device = NULL;
/* Initialize all variables that we clean on shutdown */
device = (SDL_VideoDevice *)malloc(sizeof(SDL_VideoDevice));
if ( device ) {
memset(device, 0, (sizeof *device));
device->hidden = (struct SDL_PrivateVideoData *)
malloc((sizeof *device->hidden));
device->gl_data = (struct SDL_PrivateGLData *)
malloc((sizeof *device->gl_data));
}
if ( (device == NULL) || (device->hidden == NULL) ||
(device->gl_data == NULL) ) {
SDL_OutOfMemory();
X11_DeleteDevice(device);
return(0);
}
memset(device->hidden, 0, (sizeof *device->hidden));
memset(device->gl_data, 0, (sizeof *device->gl_data));
if ( SDL_X11_LoadSymbols() ) {
/* Initialize all variables that we clean on shutdown */
device = (SDL_VideoDevice *)malloc(sizeof(SDL_VideoDevice));
if ( device ) {
memset(device, 0, (sizeof *device));
device->hidden = (struct SDL_PrivateVideoData *)
malloc((sizeof *device->hidden));
device->gl_data = (struct SDL_PrivateGLData *)
malloc((sizeof *device->gl_data));
}
if ( (device == NULL) || (device->hidden == NULL) ||
(device->gl_data == NULL) ) {
SDL_OutOfMemory();
X11_DeleteDevice(device); /* calls SDL_X11_UnloadSymbols(). */
return(0);
}
memset(device->hidden, 0, (sizeof *device->hidden));
memset(device->gl_data, 0, (sizeof *device->gl_data));
/* Set the driver flags */
device->handles_any_size = 1;
/* Set the driver flags */
device->handles_any_size = 1;
/* Set the function pointers */
device->VideoInit = X11_VideoInit;
device->ListModes = X11_ListModes;
device->SetVideoMode = X11_SetVideoMode;
device->ToggleFullScreen = X11_ToggleFullScreen;
device->UpdateMouse = X11_UpdateMouse;
/* Set the function pointers */
device->VideoInit = X11_VideoInit;
device->ListModes = X11_ListModes;
device->SetVideoMode = X11_SetVideoMode;
device->ToggleFullScreen = X11_ToggleFullScreen;
device->UpdateMouse = X11_UpdateMouse;
#ifdef XFREE86_XV
device->CreateYUVOverlay = X11_CreateYUVOverlay;
device->CreateYUVOverlay = X11_CreateYUVOverlay;
#endif
device->SetColors = X11_SetColors;
device->UpdateRects = NULL;
device->VideoQuit = X11_VideoQuit;
device->AllocHWSurface = X11_AllocHWSurface;
device->CheckHWBlit = NULL;
device->FillHWRect = NULL;
device->SetHWColorKey = NULL;
device->SetHWAlpha = NULL;
device->LockHWSurface = X11_LockHWSurface;
device->UnlockHWSurface = X11_UnlockHWSurface;
device->FlipHWSurface = X11_FlipHWSurface;
device->FreeHWSurface = X11_FreeHWSurface;
device->SetGamma = X11_SetVidModeGamma;
device->GetGamma = X11_GetVidModeGamma;
device->SetGammaRamp = X11_SetGammaRamp;
device->GetGammaRamp = NULL;
device->SetColors = X11_SetColors;
device->UpdateRects = NULL;
device->VideoQuit = X11_VideoQuit;
device->AllocHWSurface = X11_AllocHWSurface;
device->CheckHWBlit = NULL;
device->FillHWRect = NULL;
device->SetHWColorKey = NULL;
device->SetHWAlpha = NULL;
device->LockHWSurface = X11_LockHWSurface;
device->UnlockHWSurface = X11_UnlockHWSurface;
device->FlipHWSurface = X11_FlipHWSurface;
device->FreeHWSurface = X11_FreeHWSurface;
device->SetGamma = X11_SetVidModeGamma;
device->GetGamma = X11_GetVidModeGamma;
device->SetGammaRamp = X11_SetGammaRamp;
device->GetGammaRamp = NULL;
#ifdef HAVE_OPENGL
device->GL_LoadLibrary = X11_GL_LoadLibrary;
device->GL_GetProcAddress = X11_GL_GetProcAddress;
device->GL_GetAttribute = X11_GL_GetAttribute;
device->GL_MakeCurrent = X11_GL_MakeCurrent;
device->GL_SwapBuffers = X11_GL_SwapBuffers;
device->GL_LoadLibrary = X11_GL_LoadLibrary;
device->GL_GetProcAddress = X11_GL_GetProcAddress;
device->GL_GetAttribute = X11_GL_GetAttribute;
device->GL_MakeCurrent = X11_GL_MakeCurrent;
device->GL_SwapBuffers = X11_GL_SwapBuffers;
#endif
device->SetCaption = X11_SetCaption;
device->SetIcon = X11_SetIcon;
device->IconifyWindow = X11_IconifyWindow;
device->GrabInput = X11_GrabInput;
device->GetWMInfo = X11_GetWMInfo;
device->FreeWMCursor = X11_FreeWMCursor;
device->CreateWMCursor = X11_CreateWMCursor;
device->ShowWMCursor = X11_ShowWMCursor;
device->WarpWMCursor = X11_WarpWMCursor;
device->CheckMouseMode = X11_CheckMouseMode;
device->InitOSKeymap = X11_InitOSKeymap;
device->PumpEvents = X11_PumpEvents;
device->SetCaption = X11_SetCaption;
device->SetIcon = X11_SetIcon;
device->IconifyWindow = X11_IconifyWindow;
device->GrabInput = X11_GrabInput;
device->GetWMInfo = X11_GetWMInfo;
device->FreeWMCursor = X11_FreeWMCursor;
device->CreateWMCursor = X11_CreateWMCursor;
device->ShowWMCursor = X11_ShowWMCursor;
device->WarpWMCursor = X11_WarpWMCursor;
device->CheckMouseMode = X11_CheckMouseMode;
device->InitOSKeymap = X11_InitOSKeymap;
device->PumpEvents = X11_PumpEvents;
device->free = X11_DeleteDevice;
device->free = X11_DeleteDevice;
}
return device;
}
@ -191,9 +197,6 @@ VideoBootStrap X11_bootstrap = {
X11_Available, X11_CreateDevice
};
/* Shared memory information */
extern int XShmQueryExtension(Display *dpy); /* Not in X11 headers */
/* Normal X11 error handler routine */
static int (*X_handler)(Display *, XErrorEvent *) = NULL;
static int x_errhandler(Display *d, XErrorEvent *e)
@ -275,21 +278,21 @@ static void create_aux_windows(_THIS)
}
if(FSwindow)
XDestroyWindow(SDL_Display, FSwindow);
pXDestroyWindow(SDL_Display, FSwindow);
xattr.override_redirect = True;
xattr.background_pixel = def_vis ? BlackPixel(SDL_Display, SDL_Screen) : 0;
xattr.border_pixel = 0;
xattr.colormap = SDL_XColorMap;
FSwindow = XCreateWindow(SDL_Display, SDL_Root,
FSwindow = pXCreateWindow(SDL_Display, SDL_Root,
xinerama_x, xinerama_y, 32, 32, 0,
this->hidden->depth, InputOutput, SDL_Visual,
CWOverrideRedirect | CWBackPixel | CWBorderPixel
| CWColormap,
&xattr);
XSelectInput(SDL_Display, FSwindow, StructureNotifyMask);
pXSelectInput(SDL_Display, FSwindow, StructureNotifyMask);
/* Tell KDE to keep the fullscreen window on top */
{
@ -299,57 +302,57 @@ static void create_aux_windows(_THIS)
memset(&ev, 0, sizeof(ev));
ev.xclient.type = ClientMessage;
ev.xclient.window = SDL_Root;
ev.xclient.message_type = XInternAtom(SDL_Display,
ev.xclient.message_type = pXInternAtom(SDL_Display,
"KWM_KEEP_ON_TOP", False);
ev.xclient.format = 32;
ev.xclient.data.l[0] = FSwindow;
ev.xclient.data.l[1] = CurrentTime;
mask = SubstructureRedirectMask;
XSendEvent(SDL_Display, SDL_Root, False, mask, &ev);
pXSendEvent(SDL_Display, SDL_Root, False, mask, &ev);
}
hints = NULL;
titleprop.value = iconprop.value = NULL;
if(WMwindow) {
/* All window attributes must survive the recreation */
hints = XGetWMHints(SDL_Display, WMwindow);
XGetWMName(SDL_Display, WMwindow, &titleprop);
XGetWMIconName(SDL_Display, WMwindow, &iconprop);
XDestroyWindow(SDL_Display, WMwindow);
hints = pXGetWMHints(SDL_Display, WMwindow);
pXGetWMName(SDL_Display, WMwindow, &titleprop);
pXGetWMIconName(SDL_Display, WMwindow, &iconprop);
pXDestroyWindow(SDL_Display, WMwindow);
}
/* Create the window for windowed management */
/* (reusing the xattr structure above) */
WMwindow = XCreateWindow(SDL_Display, SDL_Root, 0, 0, 32, 32, 0,
WMwindow = pXCreateWindow(SDL_Display, SDL_Root, 0, 0, 32, 32, 0,
this->hidden->depth, InputOutput, SDL_Visual,
CWBackPixel | CWBorderPixel | CWColormap,
&xattr);
/* Set the input hints so we get keyboard input */
if(!hints) {
hints = XAllocWMHints();
hints = pXAllocWMHints();
hints->input = True;
hints->flags = InputHint;
}
XSetWMHints(SDL_Display, WMwindow, hints);
XFree(hints);
pXSetWMHints(SDL_Display, WMwindow, hints);
pXFree(hints);
if(titleprop.value) {
XSetWMName(SDL_Display, WMwindow, &titleprop);
XFree(titleprop.value);
pXSetWMName(SDL_Display, WMwindow, &titleprop);
pXFree(titleprop.value);
}
if(iconprop.value) {
XSetWMIconName(SDL_Display, WMwindow, &iconprop);
XFree(iconprop.value);
pXSetWMIconName(SDL_Display, WMwindow, &iconprop);
pXFree(iconprop.value);
}
XSelectInput(SDL_Display, WMwindow,
pXSelectInput(SDL_Display, WMwindow,
FocusChangeMask | KeyPressMask | KeyReleaseMask
| PropertyChangeMask | StructureNotifyMask | KeymapStateMask);
/* Set the class hints so we can get an icon (AfterStep) */
{
XClassHint *classhints;
classhints = XAllocClassHint();
classhints = pXAllocClassHint();
if(classhints != NULL) {
char *classname = getenv("SDL_VIDEO_X11_WMCLASS");
if ( ! classname ) {
@ -357,14 +360,14 @@ static void create_aux_windows(_THIS)
}
classhints->res_name = classname;
classhints->res_class = classname;
XSetClassHint(SDL_Display, WMwindow, classhints);
XFree(classhints);
pXSetClassHint(SDL_Display, WMwindow, classhints);
pXFree(classhints);
}
}
/* Allow the window to be deleted by the window manager */
WM_DELETE_WINDOW = XInternAtom(SDL_Display, "WM_DELETE_WINDOW", False);
XSetWMProtocols(SDL_Display, WMwindow, &WM_DELETE_WINDOW, 1);
WM_DELETE_WINDOW = pXInternAtom(SDL_Display, "WM_DELETE_WINDOW", False);
pXSetWMProtocols(SDL_Display, WMwindow, &WM_DELETE_WINDOW, 1);
}
static int X11_VideoInit(_THIS, SDL_PixelFormat *vformat)
@ -375,36 +378,36 @@ static int X11_VideoInit(_THIS, SDL_PixelFormat *vformat)
/* Open the X11 display */
display = NULL; /* Get it from DISPLAY environment variable */
if ( (strncmp(XDisplayName(display), ":", 1) == 0) ||
(strncmp(XDisplayName(display), "unix:", 5) == 0) ) {
if ( (strncmp(pXDisplayName(display), ":", 1) == 0) ||
(strncmp(pXDisplayName(display), "unix:", 5) == 0) ) {
local_X11 = 1;
} else {
local_X11 = 0;
}
SDL_Display = XOpenDisplay(display);
SDL_Display = pXOpenDisplay(display);
if ( SDL_Display == NULL ) {
SDL_SetError("Couldn't open X11 display");
return(-1);
}
#ifdef X11_DEBUG
XSynchronize(SDL_Display, True);
pXSynchronize(SDL_Display, True);
#endif
/* Create an alternate X display for graphics updates -- allows us
to do graphics updates in a separate thread from event handling.
Thread-safe X11 doesn't seem to exist.
*/
GFX_Display = XOpenDisplay(display);
GFX_Display = pXOpenDisplay(display);
if ( GFX_Display == NULL ) {
SDL_SetError("Couldn't open X11 display");
return(-1);
}
/* Set the normal X error handler */
X_handler = XSetErrorHandler(x_errhandler);
X_handler = pXSetErrorHandler(x_errhandler);
/* Set the error handler if we lose the X display */
XIO_handler = XSetIOErrorHandler(xio_errhandler);
XIO_handler = pXSetIOErrorHandler(xio_errhandler);
/* use default screen (from $DISPLAY) */
SDL_Screen = DefaultScreen(SDL_Display);
@ -413,7 +416,7 @@ static int X11_VideoInit(_THIS, SDL_PixelFormat *vformat)
/* Check for MIT shared memory extension */
use_mitshm = 0;
if ( local_X11 ) {
use_mitshm = XShmQueryExtension(SDL_Display);
use_mitshm = pXShmQueryExtension(SDL_Display);
}
#endif /* NO_SHARED_MEMORY */
@ -436,7 +439,7 @@ static int X11_VideoInit(_THIS, SDL_PixelFormat *vformat)
if ( SDL_Visual == DefaultVisual(SDL_Display, SDL_Screen) ) {
SDL_XColorMap = SDL_DisplayColormap;
} else {
SDL_XColorMap = XCreateColormap(SDL_Display, SDL_Root,
SDL_XColorMap = pXCreateColormap(SDL_Display, SDL_Root,
SDL_Visual, AllocNone);
}
this->hidden->depth = this->hidden->visuals[i].depth;
@ -463,7 +466,7 @@ static int X11_VideoInit(_THIS, SDL_PixelFormat *vformat)
this->info.wm_available = 1;
/* We're done! */
XFlush(SDL_Display);
pXFlush(SDL_Display);
return(0);
}
@ -478,7 +481,7 @@ static void X11_DestroyWindow(_THIS, SDL_Surface *screen)
if ( ! SDL_windowid ) {
/* Hide the managed window */
if ( WMwindow ) {
XUnmapWindow(SDL_Display, WMwindow);
pXUnmapWindow(SDL_Display, WMwindow);
}
if ( screen && (screen->flags & SDL_FULLSCREEN) ) {
screen->flags &= ~SDL_FULLSCREEN;
@ -487,7 +490,7 @@ static void X11_DestroyWindow(_THIS, SDL_Surface *screen)
/* Destroy the output window */
if ( SDL_Window ) {
XDestroyWindow(SDL_Display, SDL_Window);
pXDestroyWindow(SDL_Display, SDL_Window);
}
/* Free the colormap entries */
@ -497,7 +500,7 @@ static void X11_DestroyWindow(_THIS, SDL_Surface *screen)
numcolors = SDL_Visual->map_entries;
for ( pixel=0; pixel<numcolors; ++pixel ) {
while ( SDL_XPixels[pixel] > 0 ) {
XFreeColors(GFX_Display,
pXFreeColors(GFX_Display,
SDL_DisplayColormap,&pixel,1,0);
--SDL_XPixels[pixel];
}
@ -508,7 +511,7 @@ static void X11_DestroyWindow(_THIS, SDL_Surface *screen)
/* Free the graphics context */
if ( SDL_GC ) {
XFreeGC(SDL_Display, SDL_GC);
pXFreeGC(SDL_Display, SDL_GC);
SDL_GC = 0;
}
}
@ -538,7 +541,7 @@ static void X11_SetSizeHints(_THIS, int w, int h, Uint32 flags)
{
XSizeHints *hints;
hints = XAllocSizeHints();
hints = pXAllocSizeHints();
if ( hints ) {
if ( flags & SDL_RESIZABLE ) {
hints->min_width = 32;
@ -558,13 +561,13 @@ static void X11_SetSizeHints(_THIS, int w, int h, Uint32 flags)
/* Center it, if desired */
if ( X11_WindowPosition(this, &hints->x, &hints->y, w, h) ) {
hints->flags |= USPosition;
XMoveWindow(SDL_Display, WMwindow, hints->x, hints->y);
pXMoveWindow(SDL_Display, WMwindow, hints->x, hints->y);
/* Flush the resize event so we don't catch it later */
XSync(SDL_Display, True);
pXSync(SDL_Display, True);
}
XSetWMNormalHints(SDL_Display, WMwindow, hints);
XFree(hints);
pXSetWMNormalHints(SDL_Display, WMwindow, hints);
pXFree(hints);
}
/* Respect the window caption style */
@ -576,7 +579,7 @@ static void X11_SetSizeHints(_THIS, int w, int h, Uint32 flags)
set = SDL_FALSE;
/* First try to set MWM hints */
WM_HINTS = XInternAtom(SDL_Display, "_MOTIF_WM_HINTS", True);
WM_HINTS = pXInternAtom(SDL_Display, "_MOTIF_WM_HINTS", True);
if ( WM_HINTS != None ) {
/* Hints used by Motif compliant window managers */
struct {
@ -587,7 +590,7 @@ static void X11_SetSizeHints(_THIS, int w, int h, Uint32 flags)
unsigned long status;
} MWMHints = { (1L << 1), 0, 0, 0, 0 };
XChangeProperty(SDL_Display, WMwindow,
pXChangeProperty(SDL_Display, WMwindow,
WM_HINTS, WM_HINTS, 32,
PropModeReplace,
(unsigned char *)&MWMHints,
@ -595,11 +598,11 @@ static void X11_SetSizeHints(_THIS, int w, int h, Uint32 flags)
set = SDL_TRUE;
}
/* Now try to set KWM hints */
WM_HINTS = XInternAtom(SDL_Display, "KWM_WIN_DECORATION", True);
WM_HINTS = pXInternAtom(SDL_Display, "KWM_WIN_DECORATION", True);
if ( WM_HINTS != None ) {
long KWMHints = 0;
XChangeProperty(SDL_Display, WMwindow,
pXChangeProperty(SDL_Display, WMwindow,
WM_HINTS, WM_HINTS, 32,
PropModeReplace,
(unsigned char *)&KWMHints,
@ -607,11 +610,11 @@ static void X11_SetSizeHints(_THIS, int w, int h, Uint32 flags)
set = SDL_TRUE;
}
/* Now try to set GNOME hints */
WM_HINTS = XInternAtom(SDL_Display, "_WIN_HINTS", True);
WM_HINTS = pXInternAtom(SDL_Display, "_WIN_HINTS", True);
if ( WM_HINTS != None ) {
long GNOMEHints = 0;
XChangeProperty(SDL_Display, WMwindow,
pXChangeProperty(SDL_Display, WMwindow,
WM_HINTS, WM_HINTS, 32,
PropModeReplace,
(unsigned char *)&GNOMEHints,
@ -620,7 +623,7 @@ static void X11_SetSizeHints(_THIS, int w, int h, Uint32 flags)
}
/* Finally set the transient hints if necessary */
if ( ! set ) {
XSetTransientForHint(SDL_Display, WMwindow, SDL_Root);
pXSetTransientForHint(SDL_Display, WMwindow, SDL_Root);
}
} else {
SDL_bool set;
@ -630,27 +633,27 @@ static void X11_SetSizeHints(_THIS, int w, int h, Uint32 flags)
set = SDL_FALSE;
/* First try to unset MWM hints */
WM_HINTS = XInternAtom(SDL_Display, "_MOTIF_WM_HINTS", True);
WM_HINTS = pXInternAtom(SDL_Display, "_MOTIF_WM_HINTS", True);
if ( WM_HINTS != None ) {
XDeleteProperty(SDL_Display, WMwindow, WM_HINTS);
pXDeleteProperty(SDL_Display, WMwindow, WM_HINTS);
set = SDL_TRUE;
}
/* Now try to unset KWM hints */
WM_HINTS = XInternAtom(SDL_Display, "KWM_WIN_DECORATION", True);
WM_HINTS = pXInternAtom(SDL_Display, "KWM_WIN_DECORATION", True);
if ( WM_HINTS != None ) {
XDeleteProperty(SDL_Display, WMwindow, WM_HINTS);
pXDeleteProperty(SDL_Display, WMwindow, WM_HINTS);
set = SDL_TRUE;
}
/* Now try to unset GNOME hints */
WM_HINTS = XInternAtom(SDL_Display, "_WIN_HINTS", True);
WM_HINTS = pXInternAtom(SDL_Display, "_WIN_HINTS", True);
if ( WM_HINTS != None ) {
XDeleteProperty(SDL_Display, WMwindow, WM_HINTS);
pXDeleteProperty(SDL_Display, WMwindow, WM_HINTS);
set = SDL_TRUE;
}
/* Finally unset the transient hints if necessary */
if ( ! set ) {
/* NOTE: Does this work? */
XSetTransientForHint(SDL_Display, WMwindow, None);
pXSetTransientForHint(SDL_Display, WMwindow, None);
}
}
}
@ -688,7 +691,7 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
} else if ( SDL_windowid ) {
XWindowAttributes a;
XGetWindowAttributes(SDL_Display, SDL_Window, &a);
pXGetWindowAttributes(SDL_Display, SDL_Window, &a);
vis = a.visual;
depth = a.depth;
} else {
@ -717,7 +720,7 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
/* Create the appropriate colormap */
if ( SDL_XColorMap != SDL_DisplayColormap ) {
XFreeColormap(SDL_Display, SDL_XColorMap);
pXFreeColormap(SDL_Display, SDL_XColorMap);
}
if ( SDL_Visual->class == PseudoColor ) {
int ncolors;
@ -737,7 +740,7 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
}
if ( flags & SDL_HWPALETTE ) {
screen->flags |= SDL_HWPALETTE;
SDL_XColorMap = XCreateColormap(SDL_Display, SDL_Root,
SDL_XColorMap = pXCreateColormap(SDL_Display, SDL_Root,
SDL_Visual, AllocAll);
} else {
SDL_XColorMap = SDL_DisplayColormap;
@ -745,9 +748,9 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
} else if ( SDL_Visual->class == DirectColor ) {
/* Create a colormap which we can manipulate for gamma */
SDL_XColorMap = XCreateColormap(SDL_Display, SDL_Root,
SDL_XColorMap = pXCreateColormap(SDL_Display, SDL_Root,
SDL_Visual, AllocAll);
XSync(SDL_Display, False);
pXSync(SDL_Display, False);
/* Initialize the colormap to the identity mapping */
SDL_GetGammaRamp(0, 0, 0);
@ -756,7 +759,7 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
this->screen = NULL;
} else {
/* Create a read-only colormap for our window */
SDL_XColorMap = XCreateColormap(SDL_Display, SDL_Root,
SDL_XColorMap = pXCreateColormap(SDL_Display, SDL_Root,
SDL_Visual, AllocNone);
}
@ -769,8 +772,8 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
colour (0 is white on some displays), we should reset the
background to 0 here since that is what the user expects
with a private colormap */
XSetWindowBackground(SDL_Display, FSwindow, 0);
XClearWindow(SDL_Display, FSwindow);
pXSetWindowBackground(SDL_Display, FSwindow, 0);
pXClearWindow(SDL_Display, FSwindow);
}
/* resize the (possibly new) window manager window */
@ -778,7 +781,7 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
X11_SetSizeHints(this, w, h, flags);
current_w = w;
current_h = h;
XResizeWindow(SDL_Display, WMwindow, w, h);
pXResizeWindow(SDL_Display, WMwindow, w, h);
}
/* Create (or use) the X11 display window */
@ -793,14 +796,14 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
swa.background_pixel = 0;
swa.border_pixel = 0;
swa.colormap = SDL_XColorMap;
SDL_Window = XCreateWindow(SDL_Display, WMwindow,
SDL_Window = pXCreateWindow(SDL_Display, WMwindow,
0, 0, w, h, 0, depth,
InputOutput, SDL_Visual,
CWBackPixel | CWBorderPixel
| CWColormap, &swa);
}
/* Only manage our input if we own the window */
XSelectInput(SDL_Display, SDL_Window,
pXSelectInput(SDL_Display, SDL_Window,
( EnterWindowMask | LeaveWindowMask
| ButtonPressMask | ButtonReleaseMask
| PointerMotionMask | ExposureMask ));
@ -817,7 +820,7 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
XGCValues gcv;
gcv.graphics_exposures = False;
SDL_GC = XCreateGC(SDL_Display, SDL_Window,
SDL_GC = pXCreateGC(SDL_Display, SDL_Window,
GCGraphicsExposures, &gcv);
if ( ! SDL_GC ) {
SDL_SetError("Couldn't create graphics context");
@ -827,10 +830,10 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
/* Set our colormaps when not setting a GL mode */
if ( ! (flags & SDL_OPENGL) ) {
XSetWindowColormap(SDL_Display, SDL_Window, SDL_XColorMap);
pXSetWindowColormap(SDL_Display, SDL_Window, SDL_XColorMap);
if( !SDL_windowid ) {
XSetWindowColormap(SDL_Display, FSwindow, SDL_XColorMap);
XSetWindowColormap(SDL_Display, WMwindow, SDL_XColorMap);
pXSetWindowColormap(SDL_Display, FSwindow, SDL_XColorMap);
pXSetWindowColormap(SDL_Display, WMwindow, SDL_XColorMap);
}
}
@ -845,7 +848,7 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
xscreen = ScreenOfDisplay(SDL_Display, SDL_Screen);
a.backing_store = DoesBackingStore(xscreen);
if ( a.backing_store != NotUseful ) {
XChangeWindowAttributes(SDL_Display, SDL_Window,
pXChangeWindowAttributes(SDL_Display, SDL_Window,
CWBackingStore, &a);
}
}
@ -879,8 +882,8 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
/* Map them both and go fullscreen, if requested */
if ( ! SDL_windowid ) {
XMapWindow(SDL_Display, SDL_Window);
XMapWindow(SDL_Display, WMwindow);
pXMapWindow(SDL_Display, SDL_Window);
pXMapWindow(SDL_Display, WMwindow);
X11_WaitMapped(this, WMwindow);
if ( flags & SDL_FULLSCREEN ) {
screen->flags |= SDL_FULLSCREEN;
@ -900,7 +903,7 @@ static int X11_ResizeWindow(_THIS,
X11_SetSizeHints(this, w, h, flags);
current_w = w;
current_h = h;
XResizeWindow(SDL_Display, WMwindow, w, h);
pXResizeWindow(SDL_Display, WMwindow, w, h);
/* Resize the fullscreen and display windows */
if ( flags & SDL_FULLSCREEN ) {
@ -916,7 +919,7 @@ static int X11_ResizeWindow(_THIS,
X11_LeaveFullScreen(this);
}
}
XResizeWindow(SDL_Display, SDL_Window, w, h);
pXResizeWindow(SDL_Display, SDL_Window, w, h);
}
return(0);
}
@ -938,7 +941,7 @@ SDL_Surface *X11_SetVideoMode(_THIS, SDL_Surface *current,
}
/* Flush any delayed updates */
XSync(GFX_Display, False);
pXSync(GFX_Display, False);
/* Set up the X11 window */
saved_flags = current->flags;
@ -968,7 +971,7 @@ SDL_Surface *X11_SetVideoMode(_THIS, SDL_Surface *current,
done:
/* Release the event thread */
XSync(SDL_Display, False);
pXSync(SDL_Display, False);
SDL_Unlock_EventThread();
/* We're done! */
@ -1017,7 +1020,7 @@ static void X11_UpdateMouse(_THIS)
/* Lock the event thread, in multi-threading environments */
SDL_Lock_EventThread();
if ( XQueryPointer(SDL_Display, SDL_Window, &u1, &current_win,
if ( pXQueryPointer(SDL_Display, SDL_Window, &u1, &current_win,
&u2, &u2, &x, &y, &mask) ) {
if ( (x >= 0) && (x < SDL_VideoSurface->w) &&
(y >= 0) && (y < SDL_VideoSurface->h) ) {
@ -1054,7 +1057,7 @@ static void allocate_nearest(_THIS, SDL_Color *colors,
* XQueryColors sets the flags in the XColor struct, so we use
* that to keep track of which colours are available
*/
XQueryColors(GFX_Display, SDL_XColorMap, all, 256);
pXQueryColors(GFX_Display, SDL_XColorMap, all, 256);
for(i = 0; i < nwant; i++) {
XColor *c;
@ -1080,7 +1083,7 @@ static void allocate_nearest(_THIS, SDL_Color *colors,
if(SDL_XPixels[best])
continue; /* already allocated, waste no more time */
c = all + best;
if(XAllocColor(GFX_Display, SDL_XColorMap, c)) {
if(pXAllocColor(GFX_Display, SDL_XColorMap, c)) {
/* got it */
colors[c->pixel].r = c->red >> 8;
colors[c->pixel].g = c->green >> 8;
@ -1122,8 +1125,8 @@ int X11_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors)
xcmap[i].blue = (colors[i].b<<8)|colors[i].b;
xcmap[i].flags = (DoRed|DoGreen|DoBlue);
}
XStoreColors(GFX_Display, SDL_XColorMap, xcmap, ncolors);
XSync(GFX_Display, False);
pXStoreColors(GFX_Display, SDL_XColorMap, xcmap, ncolors);
pXSync(GFX_Display, False);
FREEA(xcmap);
} else {
/*
@ -1151,7 +1154,7 @@ int X11_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors)
--SDL_XPixels[pixel];
}
}
XFreeColors(GFX_Display, SDL_XColorMap, freelist, nfree, 0);
pXFreeColors(GFX_Display, SDL_XColorMap, freelist, nfree, 0);
FREEA(freelist);
want = ALLOCA(ncolors * sizeof(SDL_Color));
@ -1168,7 +1171,7 @@ int X11_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors)
col.green = want[i].g << 8;
col.blue = want[i].b << 8;
col.flags = DoRed | DoGreen | DoBlue;
if(XAllocColor(GFX_Display, SDL_XColorMap, &col)) {
if(pXAllocColor(GFX_Display, SDL_XColorMap, &col)) {
/* We got the colour, or at least the nearest
the hardware could get. */
colors[col.pixel].r = col.red >> 8;
@ -1212,8 +1215,8 @@ int X11_SetGammaRamp(_THIS, Uint16 *ramp)
xcmap[i].blue = ramp[2*256+c];
xcmap[i].flags = (DoRed|DoGreen|DoBlue);
}
XStoreColors(GFX_Display, SDL_XColorMap, xcmap, ncolors);
XSync(GFX_Display, False);
pXStoreColors(GFX_Display, SDL_XColorMap, xcmap, ncolors);
pXSync(GFX_Display, False);
return(0);
}
@ -1226,14 +1229,14 @@ void X11_VideoQuit(_THIS)
/* The event thread should be done, so we can touch SDL_Display */
if ( SDL_Display != NULL ) {
/* Flush any delayed updates */
XSync(GFX_Display, False);
pXSync(GFX_Display, False);
/* Start shutting down the windows */
X11_DestroyImage(this, this->screen);
X11_DestroyWindow(this, this->screen);
X11_FreeVideoModes(this);
if ( SDL_XColorMap != SDL_DisplayColormap ) {
XFreeColormap(SDL_Display, SDL_XColorMap);
pXFreeColormap(SDL_Display, SDL_XColorMap);
}
if ( SDL_iconcolors ) {
unsigned long pixel;
@ -1241,7 +1244,7 @@ void X11_VideoQuit(_THIS)
SDL_Screen);
for(pixel = 0; pixel < 256; ++pixel) {
while(SDL_iconcolors[pixel] > 0) {
XFreeColors(GFX_Display,
pXFreeColors(GFX_Display,
dcmap, &pixel, 1, 0);
--SDL_iconcolors[pixel];
}
@ -1262,20 +1265,20 @@ void X11_VideoQuit(_THIS)
/* Close the X11 graphics connection */
if ( GFX_Display != NULL ) {
XCloseDisplay(GFX_Display);
pXCloseDisplay(GFX_Display);
GFX_Display = NULL;
}
/* Close the X11 display connection */
XCloseDisplay(SDL_Display);
pXCloseDisplay(SDL_Display);
SDL_Display = NULL;
/* Reset the X11 error handlers */
if ( XIO_handler ) {
XSetIOErrorHandler(XIO_handler);
pXSetIOErrorHandler(XIO_handler);
}
if ( X_handler ) {
XSetErrorHandler(X_handler);
pXSetErrorHandler(X_handler);
}
/* Unload GL library after X11 shuts down */

View file

@ -31,11 +31,7 @@ static char rcsid =
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
#ifndef NO_SHARED_MEMORY
#include <sys/ipc.h>
#include <sys/shm.h>
#include <X11/extensions/XShm.h>
#endif
#ifdef XFREE86_DGAMOUSE
#include <XFree86/extensions/xf86dga.h>
#endif
@ -50,6 +46,7 @@ static char rcsid =
#include "SDL_mouse.h"
#include "SDL_sysvideo.h"
#include "SDL_x11dyn.h"
/* Hidden "this" pointer for the video functions */
#define _THIS SDL_VideoDevice *this

View file

@ -123,7 +123,7 @@ void X11_SetIcon(_THIS, SDL_Surface *icon, Uint8 *mask)
SDL_iconcolors[i]--;
}
}
XFreeColors(GFX_Display, dcmap, freelist, nfree, 0);
pXFreeColors(GFX_Display, dcmap, freelist, nfree, 0);
}
if(!SDL_iconcolors)
SDL_iconcolors = malloc(256 * sizeof *SDL_iconcolors);
@ -138,7 +138,7 @@ void X11_SetIcon(_THIS, SDL_Surface *icon, Uint8 *mask)
c.green = want[i].g << 8;
c.blue = want[i].b << 8;
c.flags = DoRed | DoGreen | DoBlue;
if(XAllocColor(GFX_Display, dcmap, &c)) {
if(pXAllocColor(GFX_Display, dcmap, &c)) {
/* got the colour */
SDL_iconcolors[c.pixel]++;
got[c.pixel] = want[i];
@ -152,13 +152,13 @@ void X11_SetIcon(_THIS, SDL_Surface *icon, Uint8 *mask)
XColor cols[256];
for(i = 0; i < 256; i++)
cols[i].pixel = i;
XQueryColors(GFX_Display, dcmap, cols, 256);
pXQueryColors(GFX_Display, dcmap, cols, 256);
for(i = 0; i < 256; i++) {
got[i].r = cols[i].red >> 8;
got[i].g = cols[i].green >> 8;
got[i].b = cols[i].blue >> 8;
if(!SDL_iconcolors[i]) {
if(XAllocColor(GFX_Display, dcmap,
if(pXAllocColor(GFX_Display, dcmap,
cols + i)) {
SDL_iconcolors[i] = 1;
} else {
@ -191,13 +191,13 @@ void X11_SetIcon(_THIS, SDL_Surface *icon, Uint8 *mask)
memset(LSBmask, 0, masksize);
for(i = 0; i < masksize; i++)
LSBmask[i] = reverse_byte(mask[i]);
mask_pixmap = XCreatePixmapFromBitmapData(SDL_Display, WMwindow,
mask_pixmap = pXCreatePixmapFromBitmapData(SDL_Display, WMwindow,
(char *)LSBmask,
sicon->w, sicon->h,
1L, 0L, 1);
/* Transfer the image to an X11 pixmap */
icon_image = XCreateImage(SDL_Display,
icon_image = pXCreateImage(SDL_Display,
DefaultVisual(SDL_Display, SDL_Screen),
DefaultDepth(SDL_Display, SDL_Screen),
ZPixmap, 0, sicon->pixels,
@ -205,13 +205,13 @@ void X11_SetIcon(_THIS, SDL_Surface *icon, Uint8 *mask)
32, 0);
icon_image->byte_order = (SDL_BYTEORDER == SDL_BIG_ENDIAN)
? MSBFirst : LSBFirst;
icon_pixmap = XCreatePixmap(SDL_Display, SDL_Root, sicon->w, sicon->h,
icon_pixmap = pXCreatePixmap(SDL_Display, SDL_Root, sicon->w, sicon->h,
DefaultDepth(SDL_Display, SDL_Screen));
gc = XCreateGC(SDL_Display, icon_pixmap, 0, &GCvalues);
XPutImage(SDL_Display, icon_pixmap, gc, icon_image,
gc = pXCreateGC(SDL_Display, icon_pixmap, 0, &GCvalues);
pXPutImage(SDL_Display, icon_pixmap, gc, icon_image,
0, 0, 0, 0, sicon->w, sicon->h);
XFreeGC(SDL_Display, gc);
XDestroyImage(icon_image);
pXFreeGC(SDL_Display, gc);
pXDestroyImage(icon_image);
free(LSBmask);
sicon->pixels = NULL;
@ -220,17 +220,17 @@ void X11_SetIcon(_THIS, SDL_Surface *icon, Uint8 *mask)
it screws up others. The default is only to use a pixmap. */
p = getenv("SDL_VIDEO_X11_ICONWIN");
if(p && *p) {
icon_window = XCreateSimpleWindow(SDL_Display, SDL_Root,
icon_window = pXCreateSimpleWindow(SDL_Display, SDL_Root,
0, 0, sicon->w, sicon->h, 0,
CopyFromParent,
CopyFromParent);
XSetWindowBackgroundPixmap(SDL_Display, icon_window,
pXSetWindowBackgroundPixmap(SDL_Display, icon_window,
icon_pixmap);
XClearWindow(SDL_Display, icon_window);
pXClearWindow(SDL_Display, icon_window);
}
/* Set the window icon to the icon pixmap (and icon window) */
wmhints = XAllocWMHints();
wmhints = pXAllocWMHints();
wmhints->flags = (IconPixmapHint | IconMaskHint);
wmhints->icon_pixmap = icon_pixmap;
wmhints->icon_mask = mask_pixmap;
@ -238,9 +238,9 @@ void X11_SetIcon(_THIS, SDL_Surface *icon, Uint8 *mask)
wmhints->flags |= IconWindowHint;
wmhints->icon_window = icon_window;
}
XSetWMHints(SDL_Display, WMwindow, wmhints);
XFree(wmhints);
XSync(SDL_Display, False);
pXSetWMHints(SDL_Display, WMwindow, wmhints);
pXFree(wmhints);
pXSync(SDL_Display, False);
done:
SDL_Unlock_EventThread();
@ -257,30 +257,30 @@ void X11_SetCaption(_THIS, const char *title, const char *icon)
if ( title != NULL ) {
int error = XLocaleNotSupported;
#ifdef X_HAVE_UTF8_STRING
error = Xutf8TextListToTextProperty(SDL_Display,
error = pXutf8TextListToTextProperty(SDL_Display,
(char **)&title, 1, XUTF8StringStyle,
&titleprop);
#endif
if ( error != Success ) {
XStringListToTextProperty((char **)&title, 1,
pXStringListToTextProperty((char **)&title, 1,
&titleprop);
}
XSetWMName(SDL_Display, WMwindow, &titleprop);
XFree(titleprop.value);
pXSetWMName(SDL_Display, WMwindow, &titleprop);
pXFree(titleprop.value);
}
if ( icon != NULL ) {
int error = XLocaleNotSupported;
#ifdef X_HAVE_UTF8_STRING
error = Xutf8TextListToTextProperty(SDL_Display,
error = pXutf8TextListToTextProperty(SDL_Display,
(char **)&icon, 1, XUTF8StringStyle, &iconprop);
#endif
if ( error != Success ) {
XStringListToTextProperty((char **)&icon, 1, &iconprop);
pXStringListToTextProperty((char **)&icon, 1, &iconprop);
}
XSetWMIconName(SDL_Display, WMwindow, &iconprop);
XFree(iconprop.value);
pXSetWMIconName(SDL_Display, WMwindow, &iconprop);
pXFree(iconprop.value);
}
XSync(SDL_Display, False);
pXSync(SDL_Display, False);
SDL_Unlock_EventThread();
}
@ -291,8 +291,8 @@ int X11_IconifyWindow(_THIS)
int result;
SDL_Lock_EventThread();
result = XIconifyWindow(SDL_Display, WMwindow, SDL_Screen);
XSync(SDL_Display, False);
result = pXIconifyWindow(SDL_Display, WMwindow, SDL_Screen);
pXSync(SDL_Display, False);
SDL_Unlock_EventThread();
return(result);
}
@ -308,12 +308,12 @@ SDL_GrabMode X11_GrabInputNoLock(_THIS, SDL_GrabMode mode)
return(mode); /* Will be set later on mode switch */
}
if ( mode == SDL_GRAB_OFF ) {
XUngrabPointer(SDL_Display, CurrentTime);
XUngrabKeyboard(SDL_Display, CurrentTime);
pXUngrabPointer(SDL_Display, CurrentTime);
pXUngrabKeyboard(SDL_Display, CurrentTime);
} else {
if ( this->screen->flags & SDL_FULLSCREEN ) {
/* Unbind the mouse from the fullscreen window */
XUngrabPointer(SDL_Display, CurrentTime);
pXUngrabPointer(SDL_Display, CurrentTime);
}
/* Try to grab the mouse */
#if 0 /* We'll wait here until we actually grab, otherwise behavior undefined */
@ -321,7 +321,7 @@ SDL_GrabMode X11_GrabInputNoLock(_THIS, SDL_GrabMode mode)
#else
while ( 1 ) {
#endif
result = XGrabPointer(SDL_Display, SDL_Window, True, 0,
result = pXGrabPointer(SDL_Display, SDL_Window, True, 0,
GrabModeAsync, GrabModeAsync,
SDL_Window, None, CurrentTime);
if ( result == GrabSuccess ) {
@ -333,17 +333,17 @@ SDL_GrabMode X11_GrabInputNoLock(_THIS, SDL_GrabMode mode)
/* Uh, oh, what do we do here? */ ;
}
/* Now grab the keyboard */
XGrabKeyboard(SDL_Display, WMwindow, True,
pXGrabKeyboard(SDL_Display, WMwindow, True,
GrabModeAsync, GrabModeAsync, CurrentTime);
/* Raise the window if we grab the mouse */
if ( !(this->screen->flags & SDL_FULLSCREEN) )
XRaiseWindow(SDL_Display, WMwindow);
pXRaiseWindow(SDL_Display, WMwindow);
/* Make sure we register input focus */
SDL_PrivateAppActive(1, SDL_APPINPUTFOCUS);
}
XSync(SDL_Display, False);
pXSync(SDL_Display, False);
return(mode);
}
@ -368,7 +368,7 @@ static void unlock_display(void)
{
/* Make sure any X11 transactions are completed */
SDL_VideoDevice *this = current_video;
XSync(SDL_Display, False);
pXSync(SDL_Display, False);
SDL_Unlock_EventThread();
}
int X11_GetWMInfo(_THIS, SDL_SysWMinfo *info)

View file

@ -159,7 +159,7 @@ SDL_Overlay *X11_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, S
}
}
if ( formats ) {
XFree(formats);
pXFree(formats);
}
}
}
@ -208,21 +208,21 @@ SDL_Overlay *X11_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, S
unsigned int i;
SDL_NAME(XvSelectPortNotify)(GFX_Display, xv_port, True);
X_handler = XSetErrorHandler(xv_errhandler);
X_handler = pXSetErrorHandler(xv_errhandler);
for ( i=0; i < sizeof(attr)/(sizeof attr[0]); ++i ) {
Atom a;
xv_error = False;
a = XInternAtom(GFX_Display, attr[i], True);
a = pXInternAtom(GFX_Display, attr[i], True);
if ( a != None ) {
SDL_NAME(XvSetPortAttribute)(GFX_Display, xv_port, a, 1);
XSync(GFX_Display, True);
pXSync(GFX_Display, True);
if ( ! xv_error ) {
break;
}
}
}
XSetErrorHandler(X_handler);
pXSetErrorHandler(X_handler);
SDL_NAME(XvSelectPortNotify)(GFX_Display, xv_port, False);
}
@ -262,7 +262,7 @@ SDL_Overlay *X11_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, S
#ifdef PITCH_WORKAROUND
if ( hwdata->image != NULL && hwdata->image->pitches[0] != (width*bpp) ) {
/* Ajust overlay width according to pitch */
XFree(hwdata->image);
pXFree(hwdata->image);
width = hwdata->image->pitches[0] / bpp;
hwdata->image = SDL_NAME(XvShmCreateImage)(GFX_Display, xv_port, format,
0, width, height, yuvshm);
@ -277,10 +277,10 @@ SDL_Overlay *X11_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, S
yuvshm->readOnly = False;
if ( yuvshm->shmaddr != (char *)-1 ) {
shm_error = False;
X_handler = XSetErrorHandler(shm_errhandler);
XShmAttach(GFX_Display, yuvshm);
XSync(GFX_Display, True);
XSetErrorHandler(X_handler);
X_handler = pXSetErrorHandler(shm_errhandler);
pXShmAttach(GFX_Display, yuvshm);
pXSync(GFX_Display, True);
pXSetErrorHandler(X_handler);
if ( shm_error )
shmdt(yuvshm->shmaddr);
} else {
@ -291,7 +291,7 @@ SDL_Overlay *X11_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, S
shm_error = True;
}
if ( shm_error ) {
XFree(hwdata->image);
pXFree(hwdata->image);
hwdata->yuv_use_mitshm = 0;
} else {
hwdata->image->data = yuvshm->shmaddr;
@ -306,7 +306,7 @@ SDL_Overlay *X11_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, S
#ifdef PITCH_WORKAROUND
if ( hwdata->image != NULL && hwdata->image->pitches[0] != (width*bpp) ) {
/* Ajust overlay width according to pitch */
XFree(hwdata->image);
pXFree(hwdata->image);
width = hwdata->image->pitches[0] / bpp;
hwdata->image = SDL_NAME(XvCreateImage)(GFX_Display, xv_port, format,
0, width, height);
@ -380,7 +380,7 @@ int X11_DisplayYUVOverlay(_THIS, SDL_Overlay *overlay, SDL_Rect *dstrect)
hwdata->image, 0, 0, overlay->w, overlay->h,
dstrect->x, dstrect->y, dstrect->w, dstrect->h);
}
XSync(GFX_Display, False);
pXSync(GFX_Display, False);
return(0);
}
@ -393,12 +393,12 @@ void X11_FreeYUVOverlay(_THIS, SDL_Overlay *overlay)
SDL_NAME(XvUngrabPort)(GFX_Display, hwdata->port, CurrentTime);
#ifndef NO_SHARED_MEMORY
if ( hwdata->yuv_use_mitshm ) {
XShmDetach(GFX_Display, &hwdata->yuvshm);
pXShmDetach(GFX_Display, &hwdata->yuvshm);
shmdt(hwdata->yuvshm.shmaddr);
}
#endif
if ( hwdata->image ) {
XFree(hwdata->image);
pXFree(hwdata->image);
}
free(hwdata);
}