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:
parent
2f61404a42
commit
0d4d13b23f
24 changed files with 942 additions and 514 deletions
38
configure.in
38
configure.in
|
@ -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"
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;\
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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; \
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
127
src/video/x11/SDL_x11dyn.c
Normal 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 ... */
|
||||
|
71
src/video/x11/SDL_x11dyn.h
Normal file
71
src/video/x11/SDL_x11dyn.h
Normal 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 */
|
||||
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
144
src/video/x11/SDL_x11sym.h
Normal 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 ... */
|
||||
|
|
@ -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, ¤t_win,
|
||||
if ( pXQueryPointer(SDL_Display, SDL_Window, &u1, ¤t_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 */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue