aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/Xfixes
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/lib/Xfixes')
-rw-r--r--nx-X11/lib/Xfixes/.cvsignore25
-rw-r--r--nx-X11/lib/Xfixes/AUTHORS1
-rw-r--r--nx-X11/lib/Xfixes/COPYING22
-rw-r--r--nx-X11/lib/Xfixes/ChangeLog102
-rw-r--r--nx-X11/lib/Xfixes/Cursor.c220
-rw-r--r--nx-X11/lib/Xfixes/INSTALL8
-rw-r--r--nx-X11/lib/Xfixes/Imakefile75
-rw-r--r--nx-X11/lib/Xfixes/Makefile.am56
-rw-r--r--nx-X11/lib/Xfixes/NEWS0
-rw-r--r--nx-X11/lib/Xfixes/README10
-rw-r--r--nx-X11/lib/Xfixes/Region.c441
-rw-r--r--nx-X11/lib/Xfixes/SaveSet.c48
-rw-r--r--nx-X11/lib/Xfixes/Selection.c50
-rw-r--r--nx-X11/lib/Xfixes/Xfixes-def.cpp10
-rw-r--r--nx-X11/lib/Xfixes/Xfixes.c333
-rw-r--r--nx-X11/lib/Xfixes/Xfixes.h220
-rw-r--r--nx-X11/lib/Xfixes/Xfixes.man76
-rw-r--r--nx-X11/lib/Xfixes/Xfixesint.h68
-rwxr-xr-xnx-X11/lib/Xfixes/autogen.sh3
-rw-r--r--nx-X11/lib/Xfixes/configure.ac99
-rw-r--r--nx-X11/lib/Xfixes/xfixes.pc.in10
21 files changed, 1877 insertions, 0 deletions
diff --git a/nx-X11/lib/Xfixes/.cvsignore b/nx-X11/lib/Xfixes/.cvsignore
new file mode 100644
index 000000000..e69298c9d
--- /dev/null
+++ b/nx-X11/lib/Xfixes/.cvsignore
@@ -0,0 +1,25 @@
+.deps
+.libs
+*.lo
+*.la
+Makefile
+Makefile.in
+aclocal.m4
+autogen.sh
+autom4te.cache
+config.guess
+config.h
+config.h.in
+config.log
+config.status
+config.sub
+configure
+depcomp
+install-sh
+libXfixes.la
+libtool
+ltmain.sh
+missing
+mkinstalldirs
+stamp-h1
+xfixes.pc
diff --git a/nx-X11/lib/Xfixes/AUTHORS b/nx-X11/lib/Xfixes/AUTHORS
new file mode 100644
index 000000000..ab0e01b06
--- /dev/null
+++ b/nx-X11/lib/Xfixes/AUTHORS
@@ -0,0 +1 @@
+Keith Packard, HP and XFree86.
diff --git a/nx-X11/lib/Xfixes/COPYING b/nx-X11/lib/Xfixes/COPYING
new file mode 100644
index 000000000..e85d981e7
--- /dev/null
+++ b/nx-X11/lib/Xfixes/COPYING
@@ -0,0 +1,22 @@
+$Id: COPYING,v 1.1 2004/07/31 05:50:39 anholt Exp $
+
+Copyright © 2001,2003 Keith Packard
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name of Keith Packard not be used in
+advertising or publicity pertaining to distribution of the software without
+specific, written prior permission. Keith Packard makes no
+representations about the suitability of this software for any purpose. It
+is provided "as is" without express or implied warranty.
+
+KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
diff --git a/nx-X11/lib/Xfixes/ChangeLog b/nx-X11/lib/Xfixes/ChangeLog
new file mode 100644
index 000000000..cf2da5a94
--- /dev/null
+++ b/nx-X11/lib/Xfixes/ChangeLog
@@ -0,0 +1,102 @@
+Tue May 17 13:00:21 2005 Søren Sandmann <sandmann@redhat.com>
+
+ * *.c: Conditionally include <config.h>
+
+2004-07-26 Keith Packard <keithp@keithp.com>
+
+ * Makefile.am:
+ * Region.c: (XFixesFetchRegion), (XFixesFetchRegionAndBounds),
+ (XFixesExpandRegion):
+ * Xfixes.c: (XFixesVersion):
+ * Xfixes.h:
+ * configure.ac:
+ Add XFixesExpandRegion and XFixesFetchRegionAndBounds
+
+2004-04-13 Daniel Stone <daniel@freedesktop.org>
+
+ * Bump version to 2.0.2 for xlibs 1.0.1; no other changes.
+
+2004-04-01 Keith Packard <keithp@keithp.com>
+
+ reviewed by: Bill Haneman
+
+ * Region.c: (XFixesFetchRegion):
+ Forgot to store the region operand in the protocol request.
+ Made this function completely broken.
+
+2004-03-08 Keith Packard <keithp@keithp.com>
+
+ * Cursor.c: (XFixesGetCursorImage), (XFixesSetCursorName),
+ (XFixesChangeCursorByName):
+ * Xfixes.h:
+ Use 'const' in API to make C++ happy
+
+2004-02-03 Jim Gettys <jg@freedesktop.org.org>
+
+ * AUTHORS: Get a author file with contents.
+
+2004-01-15 Daniel Stone <daniel@fooishbar.org>
+ * Tag release 2.0.1 for first freedesktop.org clientside lib release.
+
+2004-01-15 Harold L Hunt II <huntharo@msu.edu>
+ * Makefile.am: Pass -no-undefined to libtool via LDFLAGS.
+
+2003-11-21 Keith Packard <keithp@keithp.com>
+
+ * Region.c: (XFixesCopyRegion), (XFixesUnionRegion),
+ (XFixesIntersectRegion), (XFixesSubtractRegion),
+ (XFixesInvertRegion), (XFixesTranslateRegion):
+ * Xfixes.h:
+ Eliminate offset arguments in combining operators,
+ create separate XFixesCopyRegion and XFixesTranslateRegion functions.
+
+2003-11-02 Keith Packard <keithp@keithp.com>
+
+ * Cursor.c: (XFixesSelectCursorInput), (XFixesGetCursorImage),
+ (XFixesSetCursorName), (XFixesGetCursorName), (XFixesChangeCursor),
+ (XFixesChangeCursorByName):
+ * Makefile.am:
+ * Region.c: (XFixesCreateRegion), (XFixesCreateRegionFromBitmap),
+ (XFixesCreateRegionFromWindow), (XFixesCreateRegionFromGC),
+ (XFixesCreateRegionFromPicture), (XFixesDestroyRegion),
+ (XFixesSetRegion), (XFixesUnionRegion), (XFixesIntersectRegion),
+ (XFixesSubtractRegion), (XFixesInvertRegion),
+ (XFixesRegionExtents), (XFixesFetchRegion),
+ (XFixesSetGCClipRegion), (XFixesSetWindowShapeRegion),
+ (XFixesSetPictureClipRegion):
+ * SaveSet.c: (XFixesChangeSaveSet):
+ * Selection.c: (XFixesSelectSelectionInput):
+ * Xfixes.c: (XFixesExtAddDisplay), (XFixesExtRemoveDisplay),
+ (XFixesExtFindDisplay), (XFixesFindDisplay), (XFixesCloseDisplay),
+ (XFixesWireToEvent), (XFixesEventToWire), (XFixesQueryExtension),
+ (XFixesQueryVersion):
+ * Xfixes.h:
+ * Xfixesint.h:
+ * configure.ac:
+ * xfixes.pc.in:
+ Merge in xfixes_2_branch
+
+2003-10-19 Keith Packard <keithp@keithp.com>
+
+ * Cursor.c
+ * Region.c
+ * Makefile.am
+ * SaveSet.c
+ * Selection.c
+ * Xfixes.c
+ * Xfixes.h
+ * Xfixesint.h
+ * configure.ac
+ * xfixes.pc.in
+ Eliminate dependency on libXext by in-lining trivial code.
+ Switch to Xfixes 2.0, adding region and cursor name functions
+
+2003-09-16 Anders Carlsson <andersca@gnome.org>
+
+ * configure.ac:
+ * randr-uninstalled.pc.in:
+ Add uninstalled pc file.
+
+2003-04-21 Keith Packard <keithp@keithp.com>
+
+ + Added ChangeLog
diff --git a/nx-X11/lib/Xfixes/Cursor.c b/nx-X11/lib/Xfixes/Cursor.c
new file mode 100644
index 000000000..ada8a681a
--- /dev/null
+++ b/nx-X11/lib/Xfixes/Cursor.c
@@ -0,0 +1,220 @@
+/*
+ * $XFree86: xc/lib/Xfixes/Cursor.c,v 1.1 2002/11/30 06:21:44 keithp Exp $
+ *
+ * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include "Xfixesint.h"
+
+void
+XFixesSelectCursorInput (Display *dpy,
+ Window win,
+ unsigned long eventMask)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesSelectCursorInputReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+
+ LockDisplay (dpy);
+ GetReq (XFixesSelectCursorInput, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesSelectCursorInput;
+ req->window = win;
+ req->eventMask = eventMask;
+ UnlockDisplay (dpy);
+ SyncHandle ();
+}
+
+XFixesCursorImage *
+XFixesGetCursorImage (Display *dpy)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesGetCursorImageAndNameReq *req;
+ xXFixesGetCursorImageAndNameReply rep;
+ int npixels;
+ int nbytes_name;
+ int nbytes, nread, rlength;
+ XFixesCursorImage *image;
+ char *name;
+
+ XFixesCheckExtension (dpy, info, 0);
+ LockDisplay (dpy);
+ GetReq (XFixesGetCursorImageAndName, req);
+ req->reqType = info->codes->major_opcode;
+ if (info->major_version >= 2)
+ req->xfixesReqType = X_XFixesGetCursorImageAndName;
+ else
+ req->xfixesReqType = X_XFixesGetCursorImage;
+ if (!_XReply (dpy, (xReply *) &rep, 0, xFalse))
+ {
+ UnlockDisplay (dpy);
+ SyncHandle ();
+ return 0;
+ }
+ if (info->major_version < 2)
+ {
+ rep.cursorName = None;
+ rep.nbytes = 0;
+ }
+ npixels = rep.width * rep.height;
+ nbytes_name = rep.nbytes;
+ /* reply data length */
+ nbytes = (long) rep.length << 2;
+ /* bytes of actual data in the reply */
+ nread = (npixels << 2) + nbytes_name;
+ /* size of data returned to application */
+ rlength = (sizeof (XFixesCursorImage) +
+ npixels * sizeof (unsigned long) +
+ nbytes_name + 1);
+
+ image = (XFixesCursorImage *) Xmalloc (rlength);
+ if (!image)
+ {
+ _XEatData (dpy, nbytes);
+ UnlockDisplay (dpy);
+ SyncHandle ();
+ return 0;
+ }
+ image->x = rep.x;
+ image->y = rep.y;
+ image->width = rep.width;
+ image->height = rep.height;
+ image->xhot = rep.xhot;
+ image->yhot = rep.yhot;
+ image->cursor_serial = rep.cursorSerial;
+ image->pixels = (unsigned long *) (image + 1);
+ image->atom = rep.cursorName;
+ name = (char *) (image->pixels + npixels);
+ image->name = name;
+ _XRead32 (dpy, image->pixels, npixels << 2);
+ _XRead (dpy, name, nbytes_name);
+ name[nbytes_name] = '\0'; /* null-terminate */
+ /* skip any padding */
+ if(nbytes > nread)
+ {
+ _XEatData (dpy, (unsigned long) (nbytes - nread));
+ }
+ UnlockDisplay (dpy);
+ SyncHandle ();
+ return image;
+}
+
+void
+XFixesSetCursorName (Display *dpy, Cursor cursor, const char *name)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesSetCursorNameReq *req;
+ int nbytes = strlen (name);
+
+ XFixesSimpleCheckExtension (dpy, info);
+ if (info->major_version < 2)
+ return;
+ LockDisplay (dpy);
+ GetReq (XFixesSetCursorName, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesSetCursorName;
+ req->cursor = cursor;
+ req->nbytes = nbytes;
+ req->length += (nbytes + 3) >> 2;
+ Data (dpy, name, nbytes);
+ UnlockDisplay (dpy);
+ SyncHandle ();
+}
+
+const char *
+XFixesGetCursorName (Display *dpy, Cursor cursor, Atom *atom)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesGetCursorNameReq *req;
+ xXFixesGetCursorNameReply rep;
+ char *name;
+
+ XFixesCheckExtension (dpy, info, 0);
+ if (info->major_version < 2)
+ return 0;
+ LockDisplay (dpy);
+ GetReq (XFixesGetCursorName, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesGetCursorName;
+ req->cursor = cursor;
+ if (!_XReply (dpy, (xReply *) &rep, 0, xFalse))
+ {
+ UnlockDisplay (dpy);
+ SyncHandle ();
+ return 0;
+ }
+ *atom = rep.atom;
+ if ((name = (char *) Xmalloc(rep.nbytes+1))) {
+ _XReadPad(dpy, name, (long)rep.nbytes);
+ name[rep.nbytes] = '\0';
+ } else {
+ _XEatData(dpy, (unsigned long) (rep.nbytes + 3) & ~3);
+ name = (char *) NULL;
+ }
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return(name);
+}
+
+void
+XFixesChangeCursor (Display *dpy, Cursor source, Cursor destination)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesChangeCursorReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ if (info->major_version < 2)
+ return;
+ LockDisplay (dpy);
+ GetReq (XFixesChangeCursor, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesChangeCursor;
+ req->source = source;
+ req->destination = destination;
+ UnlockDisplay(dpy);
+ SyncHandle();
+}
+
+void
+XFixesChangeCursorByName (Display *dpy, Cursor source, const char *name)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesChangeCursorByNameReq *req;
+ int nbytes = strlen (name);
+
+ XFixesSimpleCheckExtension (dpy, info);
+ if (info->major_version < 2)
+ return;
+ LockDisplay (dpy);
+ GetReq (XFixesChangeCursorByName, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesChangeCursorByName;
+ req->source = source;
+ req->nbytes = nbytes;
+ req->length += (nbytes + 3) >> 2;
+ Data (dpy, name, nbytes);
+ UnlockDisplay(dpy);
+ SyncHandle();
+}
diff --git a/nx-X11/lib/Xfixes/INSTALL b/nx-X11/lib/Xfixes/INSTALL
new file mode 100644
index 000000000..557b5e871
--- /dev/null
+++ b/nx-X11/lib/Xfixes/INSTALL
@@ -0,0 +1,8 @@
+Xfixes is built with the traditional configure script:
+
+ $ ./configure --prefix=/usr/X11R6
+
+This should generate valid Makefiles, then:
+
+ $ make
+ $ make install
diff --git a/nx-X11/lib/Xfixes/Imakefile b/nx-X11/lib/Xfixes/Imakefile
new file mode 100644
index 000000000..c053aa2b5
--- /dev/null
+++ b/nx-X11/lib/Xfixes/Imakefile
@@ -0,0 +1,75 @@
+XCOMM $XdotOrg: xc/lib/Xfixes/Imakefile,v 1.1 2004/07/31 05:50:39 anholt Exp $
+
+#ifndef NormalLibXfixes
+#define NormalLibXfixes YES
+SOXFIXESREV=3.0.0
+#endif
+
+#ifndef SharedLibXfixes
+#define SharedLibXfixes YES
+#endif
+
+#define DoNormalLib NormalLibXfixes
+#define DoSharedLib SharedLibXfixes
+#define DoDebugLib DebugLibXfixes
+#define DoProfileLib ProfileLibXfixes
+
+#define LibName Xfixes
+#define SoRev SOXFIXESREV
+#define IncSubdir X11
+#define IncSubSubdir extensions
+
+#include <Threads.tmpl>
+
+#ifdef SharedXfixesReqs
+REQUIREDLIBS = SharedXfixesReqs
+#endif
+
+XFIXES_VERSION=3.0.0
+
+X_LIBS=-L$(SHLIBDIR) $(XONLYLIB)
+X_CFLAGS=-I$(INCROOT) $(THREADS_DEFINES)
+
+RPATH_CFLAG = HardCodeLibdirFlag
+
+SRCS = Cursor.c \
+ Region.c \
+ SaveSet.c \
+ Selection.c \
+ Xfixes.c
+
+OBJS = Cursor.o \
+ Region.o \
+ SaveSet.o \
+ Selection.o \
+ Xfixes.o
+
+HEADERS = Xfixes.h
+
+SUBSTVARS=prefix="$(PROJECTROOT)" \
+ exec_prefix="$(BINDIR)" \
+ libdir="$(USRLIBDIR)" \
+ hardcode_libdir_flag_spec="$(RPATH_CFLAG)" \
+ includedir="$(INCROOT)" \
+ X_LIBS="$(X_LIBS)" \
+ X_CFLAGS="$(X_CFLAGS)" \
+ VERSION="$(XFIXES_VERSION)"
+
+#include <Library.tmpl>
+
+MANSUFFIX=$(LIBMANSUFFIX)
+InstallManPage(Xfixes,$(LIBMANDIR))
+
+DependTarget()
+
+all:: xfixes.pc
+
+xfixes.pc: xfixes.pc.in
+ RemoveFile($@)
+ sh ../Xcursor/config-subst $(SUBSTVARS) < xfixes.pc.in > $@
+
+InstallNonExecFile(xfixes.pc,$(USRLIBDIR)/pkgconfig)
+
+clean::
+ RemoveFile(xfixes.pc)
+
diff --git a/nx-X11/lib/Xfixes/Makefile.am b/nx-X11/lib/Xfixes/Makefile.am
new file mode 100644
index 000000000..08598f93e
--- /dev/null
+++ b/nx-X11/lib/Xfixes/Makefile.am
@@ -0,0 +1,56 @@
+#
+# $Id: Makefile.am,v 1.1 2004/07/31 05:50:39 anholt Exp $
+#
+# Copyright © 2003 Keith Packard, Noah Levitt
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of Keith Packard not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. Keith Packard makes no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+AM_CFLAGS = $(FIXESEXT_CFLAGS) $(X_CFLAGS)
+
+lib_LTLIBRARIES = libXfixes.la
+
+libXfixes_la_SOURCES = \
+ Cursor.c \
+ Region.c \
+ SaveSet.c \
+ Selection.c \
+ Xfixes.c \
+ Xfixesint.h
+
+libXfixes_la_LIBADD = @X_LIBS@
+
+#
+# Library version info. Check the libtool docs for
+# instructions on when and how to change this value
+#
+# bump when the ABI changes
+XFIXES_CURRENT=2
+# bump for non-ABI changes, reset to zero when CURRENT changes
+XFIXES_REVISION=0
+# bump when the ABI changes in backward-compatible fashion
+XFIXES_AGE=2
+libXfixes_la_LDFLAGS = -version-info ${XFIXES_CURRENT}:${XFIXES_REVISION}:${XFIXES_AGE} -no-undefined
+
+libXfixesincludedir = $(includedir)/X11/extensions
+libXfixesinclude_HEADERS = Xfixes.h
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = xfixes.pc
+
+EXTRA_DIST = xfixes.pc.in autogen.sh
diff --git a/nx-X11/lib/Xfixes/NEWS b/nx-X11/lib/Xfixes/NEWS
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/nx-X11/lib/Xfixes/NEWS
diff --git a/nx-X11/lib/Xfixes/README b/nx-X11/lib/Xfixes/README
new file mode 100644
index 000000000..67cf1d8be
--- /dev/null
+++ b/nx-X11/lib/Xfixes/README
@@ -0,0 +1,10 @@
+ Xfixes
+ XFIXES Extension
+ Version 2.0.1
+ 2002-10-4
+
+This package contains header files and documentation for the XFIXES
+extension. Library and server implementations are separate.
+
+Keith Packard
+keithp@keithp.com
diff --git a/nx-X11/lib/Xfixes/Region.c b/nx-X11/lib/Xfixes/Region.c
new file mode 100644
index 000000000..f4781fe9b
--- /dev/null
+++ b/nx-X11/lib/Xfixes/Region.c
@@ -0,0 +1,441 @@
+/*
+ * $Id: Region.c,v 1.3 2005/07/03 07:00:56 daniels Exp $
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include "Xfixesint.h"
+
+XserverRegion
+XFixesCreateRegion (Display *dpy, XRectangle *rectangles, int nrectangles)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesCreateRegionReq *req;
+ long len;
+ XserverRegion region;
+
+ XFixesCheckExtension (dpy, info, 0);
+ LockDisplay (dpy);
+ GetReq (XFixesCreateRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesCreateRegion;
+ region = req->region = XAllocID (dpy);
+ len = ((long) nrectangles) << 1;
+ SetReqLen (req, len, len);
+ len <<= 2;
+ Data16 (dpy, (short *) rectangles, len);
+ UnlockDisplay (dpy);
+ SyncHandle();
+ return region;
+}
+
+XserverRegion
+XFixesCreateRegionFromBitmap (Display *dpy, Pixmap bitmap)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesCreateRegionFromBitmapReq *req;
+ XserverRegion region;
+
+ XFixesCheckExtension (dpy, info, 0);
+ LockDisplay (dpy);
+ GetReq (XFixesCreateRegionFromBitmap, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesCreateRegionFromBitmap;
+ region = req->region = XAllocID (dpy);
+ req->bitmap = bitmap;
+ UnlockDisplay (dpy);
+ SyncHandle();
+ return region;
+}
+
+XserverRegion
+XFixesCreateRegionFromWindow (Display *dpy, Window window, int kind)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesCreateRegionFromWindowReq *req;
+ XserverRegion region;
+
+ XFixesCheckExtension (dpy, info, 0);
+ LockDisplay (dpy);
+ GetReq (XFixesCreateRegionFromWindow, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesCreateRegionFromWindow;
+ region = req->region = XAllocID (dpy);
+ req->window = window;
+ req->kind = kind;
+ UnlockDisplay (dpy);
+ SyncHandle();
+ return region;
+}
+
+XserverRegion
+XFixesCreateRegionFromGC (Display *dpy, GC gc)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesCreateRegionFromGCReq *req;
+ XserverRegion region;
+
+ XFixesCheckExtension (dpy, info, 0);
+ LockDisplay (dpy);
+ GetReq (XFixesCreateRegionFromGC, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesCreateRegionFromGC;
+ region = req->region = XAllocID (dpy);
+ req->gc = gc->gid;
+ UnlockDisplay (dpy);
+ SyncHandle();
+ return region;
+}
+
+XserverRegion
+XFixesCreateRegionFromPicture (Display *dpy, XID picture)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesCreateRegionFromPictureReq *req;
+ XserverRegion region;
+
+ XFixesCheckExtension (dpy, info, 0);
+ LockDisplay (dpy);
+ GetReq (XFixesCreateRegionFromPicture, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesCreateRegionFromPicture;
+ region = req->region = XAllocID (dpy);
+ req->picture = picture;
+ UnlockDisplay (dpy);
+ SyncHandle();
+ return region;
+}
+
+void
+XFixesDestroyRegion (Display *dpy, XserverRegion region)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesDestroyRegionReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ LockDisplay (dpy);
+ GetReq (XFixesDestroyRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesDestroyRegion;
+ req->region = region;
+ UnlockDisplay (dpy);
+ SyncHandle();
+}
+
+void
+XFixesSetRegion (Display *dpy, XserverRegion region,
+ XRectangle *rectangles, int nrectangles)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesSetRegionReq *req;
+ long len;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ LockDisplay (dpy);
+ GetReq (XFixesSetRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesSetRegion;
+ req->region = region;
+ len = ((long) nrectangles) << 1;
+ SetReqLen (req, len, len);
+ len <<= 2;
+ Data16 (dpy, (short *) rectangles, len);
+ UnlockDisplay (dpy);
+ SyncHandle();
+}
+
+void
+XFixesCopyRegion (Display *dpy, XserverRegion dst, XserverRegion src)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesCopyRegionReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ LockDisplay (dpy);
+ GetReq (XFixesCopyRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesCopyRegion;
+ req->source = src;
+ req->destination = dst;
+ UnlockDisplay (dpy);
+ SyncHandle();
+}
+
+void
+XFixesUnionRegion (Display *dpy, XserverRegion dst,
+ XserverRegion src1, XserverRegion src2)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesUnionRegionReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ LockDisplay (dpy);
+ GetReq (XFixesUnionRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesUnionRegion;
+ req->source1 = src1;
+ req->source2 = src2;
+ req->destination = dst;
+ UnlockDisplay (dpy);
+ SyncHandle();
+}
+
+void
+XFixesIntersectRegion (Display *dpy, XserverRegion dst,
+ XserverRegion src1, XserverRegion src2)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesIntersectRegionReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ LockDisplay (dpy);
+ GetReq (XFixesIntersectRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesIntersectRegion;
+ req->source1 = src1;
+ req->source2 = src2;
+ req->destination = dst;
+ UnlockDisplay (dpy);
+ SyncHandle();
+}
+
+void
+XFixesSubtractRegion (Display *dpy, XserverRegion dst,
+ XserverRegion src1, XserverRegion src2)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesSubtractRegionReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ LockDisplay (dpy);
+ GetReq (XFixesSubtractRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesSubtractRegion;
+ req->source1 = src1;
+ req->source2 = src2;
+ req->destination = dst;
+ UnlockDisplay (dpy);
+ SyncHandle();
+}
+
+void
+XFixesInvertRegion (Display *dpy, XserverRegion dst,
+ XRectangle *rect, XserverRegion src)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesInvertRegionReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ LockDisplay (dpy);
+ GetReq (XFixesInvertRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesInvertRegion;
+ req->source = src;
+ req->destination = dst;
+ UnlockDisplay (dpy);
+ SyncHandle();
+}
+
+void
+XFixesTranslateRegion (Display *dpy, XserverRegion region, int dx, int dy)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesTranslateRegionReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ LockDisplay (dpy);
+ GetReq (XFixesTranslateRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesTranslateRegion;
+ req->region = region;
+ req->dx = dx;
+ req->dy = dy;
+ UnlockDisplay (dpy);
+ SyncHandle();
+}
+
+void
+XFixesRegionExtents (Display *dpy, XserverRegion dst, XserverRegion src)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesRegionExtentsReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ LockDisplay (dpy);
+ GetReq (XFixesRegionExtents, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesRegionExtents;
+ req->source = src;
+ req->destination = dst;
+ UnlockDisplay (dpy);
+ SyncHandle();
+}
+
+XRectangle *
+XFixesFetchRegion (Display *dpy, XserverRegion region, int *nrectanglesRet)
+{
+ XRectangle bounds;
+
+ return XFixesFetchRegionAndBounds (dpy, region, nrectanglesRet, &bounds);
+}
+
+XRectangle *
+XFixesFetchRegionAndBounds (Display *dpy,
+ XserverRegion region,
+ int *nrectanglesRet,
+ XRectangle *bounds)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesFetchRegionReq *req;
+ xXFixesFetchRegionReply rep;
+ XRectangle *rects;
+ int nrects;
+ long nbytes;
+ long nread;
+
+ XFixesCheckExtension (dpy, info, 0);
+ LockDisplay (dpy);
+ GetReq (XFixesFetchRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesFetchRegion;
+ req->region = region;
+ if (!_XReply (dpy, (xReply *) &rep, 0, xFalse))
+ {
+ UnlockDisplay (dpy);
+ SyncHandle ();
+ return 0;
+ }
+ bounds->x = rep.x;
+ bounds->y = rep.y;
+ bounds->width = rep.width;
+ bounds->height = rep.height;
+ nbytes = (long) rep.length << 2;
+ nrects = rep.length >> 1;
+ nread = nrects << 3;
+ rects = Xmalloc (nrects * sizeof (XRectangle));
+ if (!rects)
+ {
+ _XEatData (dpy, nbytes);
+ UnlockDisplay (dpy);
+ SyncHandle ();
+ return 0;
+ }
+ _XRead16 (dpy, (short *) rects, nrects << 3);
+ /* skip any padding */
+ if(nbytes > nread)
+ {
+ _XEatData (dpy, (unsigned long) (nbytes - nread));
+ }
+ UnlockDisplay (dpy);
+ SyncHandle();
+ *nrectanglesRet = nrects;
+ return rects;
+}
+
+void
+XFixesSetGCClipRegion (Display *dpy, GC gc,
+ int clip_x_origin, int clip_y_origin,
+ XserverRegion region)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesSetGCClipRegionReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ LockDisplay (dpy);
+ GetReq (XFixesSetGCClipRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesSetGCClipRegion;
+ req->gc = gc->gid;
+ req->region = region;
+ req->xOrigin = clip_x_origin;
+ req->yOrigin = clip_y_origin;
+ UnlockDisplay (dpy);
+ SyncHandle();
+}
+
+void
+XFixesSetWindowShapeRegion (Display *dpy, Window win, int shape_kind,
+ int x_off, int y_off, XserverRegion region)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesSetWindowShapeRegionReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ LockDisplay (dpy);
+ GetReq (XFixesSetWindowShapeRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesSetWindowShapeRegion;
+ req->dest = win;
+ req->destKind = shape_kind;
+ req->xOff = x_off;
+ req->yOff = y_off;
+ req->region = region;
+ UnlockDisplay (dpy);
+ SyncHandle();
+}
+
+void
+XFixesSetPictureClipRegion (Display *dpy, XID picture,
+ int clip_x_origin, int clip_y_origin,
+ XserverRegion region)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesSetPictureClipRegionReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ LockDisplay (dpy);
+ GetReq (XFixesSetPictureClipRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesSetPictureClipRegion;
+ req->picture = picture;
+ req->region = region;
+ req->xOrigin = clip_x_origin;
+ req->yOrigin = clip_y_origin;
+ UnlockDisplay (dpy);
+ SyncHandle();
+}
+
+void
+XFixesExpandRegion (Display *dpy, XserverRegion dst, XserverRegion src,
+ unsigned left, unsigned right,
+ unsigned top, unsigned bottom)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesExpandRegionReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+ LockDisplay (dpy);
+ GetReq (XFixesExpandRegion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesExpandRegion;
+ req->source = src;
+ req->destination = dst;
+ req->left = left;
+ req->right = right;
+ req->top = top;
+ req->bottom = bottom;
+ UnlockDisplay (dpy);
+ SyncHandle();
+}
+
diff --git a/nx-X11/lib/Xfixes/SaveSet.c b/nx-X11/lib/Xfixes/SaveSet.c
new file mode 100644
index 000000000..c5b73f9c9
--- /dev/null
+++ b/nx-X11/lib/Xfixes/SaveSet.c
@@ -0,0 +1,48 @@
+/*
+ * $XFree86: xc/lib/Xfixes/SaveSet.c,v 1.1 2002/11/30 18:41:33 keithp Exp $
+ *
+ * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include "Xfixesint.h"
+
+void
+XFixesChangeSaveSet (Display *dpy, Window win, int mode, int target, int map)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesChangeSaveSetReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+
+ LockDisplay (dpy);
+ GetReq (XFixesChangeSaveSet, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesChangeSaveSet;
+ req->mode = mode;
+ req->target = target;
+ req->map = map;
+ req->window = win;
+ UnlockDisplay (dpy);
+ SyncHandle ();
+}
diff --git a/nx-X11/lib/Xfixes/Selection.c b/nx-X11/lib/Xfixes/Selection.c
new file mode 100644
index 000000000..888dc84f0
--- /dev/null
+++ b/nx-X11/lib/Xfixes/Selection.c
@@ -0,0 +1,50 @@
+/*
+ * $XFree86: xc/lib/Xfixes/Selection.c,v 1.1 2002/11/30 06:21:45 keithp Exp $
+ *
+ * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include "Xfixesint.h"
+
+void
+XFixesSelectSelectionInput (Display *dpy,
+ Window win,
+ Atom selection,
+ unsigned long eventMask)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+ xXFixesSelectSelectionInputReq *req;
+
+ XFixesSimpleCheckExtension (dpy, info);
+
+ LockDisplay (dpy);
+ GetReq (XFixesSelectSelectionInput, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesSelectSelectionInput;
+ req->window = win;
+ req->selection = selection;
+ req->eventMask = eventMask;
+ UnlockDisplay (dpy);
+ SyncHandle ();
+}
diff --git a/nx-X11/lib/Xfixes/Xfixes-def.cpp b/nx-X11/lib/Xfixes/Xfixes-def.cpp
new file mode 100644
index 000000000..bbab58858
--- /dev/null
+++ b/nx-X11/lib/Xfixes/Xfixes-def.cpp
@@ -0,0 +1,10 @@
+LIBRARY Xfixes
+VERSION LIBRARY_VERSION
+EXPORTS
+ XFixesQueryExtension
+ XFixesQueryVersion
+ XFixesChangeSaveSet
+ XFixesSelectSelectionInput
+ XFixesSelectCursorInput
+ XFixesGetCursorImage
+/* $XFree86: xc/lib/Xfixes/Xfixes-def.cpp,v 1.1 2002/11/30 06:21:45 keithp Exp $ */
diff --git a/nx-X11/lib/Xfixes/Xfixes.c b/nx-X11/lib/Xfixes/Xfixes.c
new file mode 100644
index 000000000..e4dfd05de
--- /dev/null
+++ b/nx-X11/lib/Xfixes/Xfixes.c
@@ -0,0 +1,333 @@
+/*
+ * $XFree86: xc/lib/Xfixes/Xfixes.c,v 1.1 2002/11/30 06:21:45 keithp Exp $
+ *
+ * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include "Xfixesint.h"
+
+XFixesExtInfo XFixesExtensionInfo;
+char XFixesExtensionName[] = XFIXES_NAME;
+
+static int
+XFixesCloseDisplay (Display *dpy, XExtCodes *codes);
+
+static Bool
+XFixesWireToEvent(Display *dpy, XEvent *event, xEvent *wire);
+
+static Status
+XFixesEventToWire(Display *dpy, XEvent *event, xEvent *wire);
+
+/*
+ * XFixesExtAddDisplay - add a display to this extension. (Replaces
+ * XextAddDisplay)
+ */
+static XFixesExtDisplayInfo *
+XFixesExtAddDisplay (XFixesExtInfo *extinfo,
+ Display *dpy,
+ char *ext_name)
+{
+ XFixesExtDisplayInfo *info;
+ int ev;
+
+ info = (XFixesExtDisplayInfo *) Xmalloc (sizeof (XFixesExtDisplayInfo));
+ if (!info) return NULL;
+ info->display = dpy;
+
+ info->codes = XInitExtension (dpy, ext_name);
+
+ /*
+ * if the server has the extension, then we can initialize the
+ * appropriate function vectors
+ */
+ if (info->codes) {
+ xXFixesQueryVersionReply rep;
+ xXFixesQueryVersionReq *req;
+ XESetCloseDisplay (dpy, info->codes->extension,
+ XFixesCloseDisplay);
+ for (ev = info->codes->first_event;
+ ev < info->codes->first_event + XFixesNumberEvents;
+ ev++)
+ {
+ XESetWireToEvent (dpy, ev, XFixesWireToEvent);
+ XESetEventToWire (dpy, ev, XFixesEventToWire);
+ }
+ /*
+ * Get the version info
+ */
+ LockDisplay (dpy);
+ GetReq (XFixesQueryVersion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xfixesReqType = X_XFixesQueryVersion;
+ req->majorVersion = XFIXES_MAJOR;
+ req->minorVersion = XFIXES_MINOR;
+ if (!_XReply (dpy, (xReply *) &rep, 0, xTrue))
+ {
+ UnlockDisplay (dpy);
+ SyncHandle ();
+ return 0;
+ }
+ info->major_version = rep.majorVersion;
+ info->minor_version = rep.minorVersion;
+ UnlockDisplay (dpy);
+ } else {
+ /* The server doesn't have this extension.
+ * Use a private Xlib-internal extension to hang the close_display
+ * hook on so that the "cache" (extinfo->cur) is properly cleaned.
+ * (XBUG 7955)
+ */
+ XExtCodes *codes = XAddExtension(dpy);
+ if (!codes) {
+ XFree(info);
+ return NULL;
+ }
+ XESetCloseDisplay (dpy, codes->extension, XFixesCloseDisplay);
+ }
+
+ /*
+ * now, chain it onto the list
+ */
+ _XLockMutex(_Xglobal_lock);
+ info->next = extinfo->head;
+ extinfo->head = info;
+ extinfo->cur = info;
+ extinfo->ndisplays++;
+ _XUnlockMutex(_Xglobal_lock);
+ return info;
+}
+
+
+/*
+ * XFixesExtRemoveDisplay - remove the indicated display from the
+ * extension object. (Replaces XextRemoveDisplay.)
+ */
+static int
+XFixesExtRemoveDisplay (XFixesExtInfo *extinfo, Display *dpy)
+{
+ XFixesExtDisplayInfo *info, *prev;
+
+ /*
+ * locate this display and its back link so that it can be removed
+ */
+ _XLockMutex(_Xglobal_lock);
+ prev = NULL;
+ for (info = extinfo->head; info; info = info->next) {
+ if (info->display == dpy) break;
+ prev = info;
+ }
+ if (!info) {
+ _XUnlockMutex(_Xglobal_lock);
+ return 0; /* hmm, actually an error */
+ }
+
+ /*
+ * remove the display from the list; handles going to zero
+ */
+ if (prev)
+ prev->next = info->next;
+ else
+ extinfo->head = info->next;
+
+ extinfo->ndisplays--;
+ if (info == extinfo->cur) extinfo->cur = NULL; /* flush cache */
+ _XUnlockMutex(_Xglobal_lock);
+
+ Xfree ((char *) info);
+ return 1;
+}
+
+/*
+ * XFixesExtFindDisplay - look for a display in this extension; keeps a
+ * cache of the most-recently used for efficiency. (Replaces
+ * XextFindDisplay.)
+ */
+static XFixesExtDisplayInfo *
+XFixesExtFindDisplay (XFixesExtInfo *extinfo,
+ Display *dpy)
+{
+ XFixesExtDisplayInfo *info;
+
+ /*
+ * see if this was the most recently accessed display
+ */
+ if ((info = extinfo->cur) && info->display == dpy)
+ return info;
+
+ /*
+ * look for display in list
+ */
+ _XLockMutex(_Xglobal_lock);
+ for (info = extinfo->head; info; info = info->next) {
+ if (info->display == dpy) {
+ extinfo->cur = info; /* cache most recently used */
+ _XUnlockMutex(_Xglobal_lock);
+ return info;
+ }
+ }
+ _XUnlockMutex(_Xglobal_lock);
+
+ return NULL;
+}
+
+XFixesExtDisplayInfo *
+XFixesFindDisplay (Display *dpy)
+{
+ XFixesExtDisplayInfo *info;
+
+ info = XFixesExtFindDisplay (&XFixesExtensionInfo, dpy);
+ if (!info)
+ info = XFixesExtAddDisplay (&XFixesExtensionInfo, dpy,
+ XFixesExtensionName);
+ return info;
+}
+
+static int
+XFixesCloseDisplay (Display *dpy, XExtCodes *codes)
+{
+ return XFixesExtRemoveDisplay (&XFixesExtensionInfo, dpy);
+}
+
+static Bool
+XFixesWireToEvent(Display *dpy, XEvent *event, xEvent *wire)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay(dpy);
+
+ XFixesCheckExtension(dpy, info, False);
+
+ switch ((wire->u.u.type & 0x7F) - info->codes->first_event)
+ {
+ case XFixesSelectionNotify: {
+ XFixesSelectionNotifyEvent *aevent;
+ xXFixesSelectionNotifyEvent *awire;
+ awire = (xXFixesSelectionNotifyEvent *) wire;
+ aevent = (XFixesSelectionNotifyEvent *) event;
+ aevent->type = awire->type & 0x7F;
+ aevent->subtype = awire->subtype;
+ aevent->serial = _XSetLastRequestRead(dpy,
+ (xGenericReply *) wire);
+ aevent->send_event = (awire->type & 0x80) != 0;
+ aevent->display = dpy;
+ aevent->window = awire->window;
+ aevent->owner = awire->owner;
+ aevent->selection = awire->selection;
+ aevent->timestamp = awire->timestamp;
+ aevent->selection_timestamp = awire->selectionTimestamp;
+ return True;
+ }
+ case XFixesCursorNotify: {
+ XFixesCursorNotifyEvent *aevent;
+ xXFixesCursorNotifyEvent *awire;
+ awire = (xXFixesCursorNotifyEvent *) wire;
+ aevent = (XFixesCursorNotifyEvent *) event;
+ aevent->type = awire->type & 0x7F;
+ aevent->subtype = awire->subtype;
+ aevent->serial = _XSetLastRequestRead(dpy,
+ (xGenericReply *) wire);
+ aevent->send_event = (awire->type & 0x80) != 0;
+ aevent->display = dpy;
+ aevent->window = awire->window;
+ aevent->cursor_serial = awire->cursorSerial;
+ aevent->timestamp = awire->timestamp;
+ aevent->cursor_name = awire->name;
+ return True;
+ }
+ }
+ return False;
+}
+
+static Status
+XFixesEventToWire(Display *dpy, XEvent *event, xEvent *wire)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay(dpy);
+
+ XFixesCheckExtension(dpy, info, False);
+
+ switch ((event->type & 0x7F) - info->codes->first_event)
+ {
+ case XFixesSelectionNotify: {
+ XFixesSelectionNotifyEvent *aevent;
+ xXFixesSelectionNotifyEvent *awire;
+ awire = (xXFixesSelectionNotifyEvent *) wire;
+ aevent = (XFixesSelectionNotifyEvent *) event;
+ awire->type = aevent->type | (aevent->send_event ? 0x80 : 0);
+ awire->subtype = aevent->subtype;
+ awire->window = aevent->window;
+ awire->owner = aevent->owner;
+ awire->selection = aevent->selection;
+ awire->timestamp = aevent->timestamp;
+ awire->selectionTimestamp = aevent->selection_timestamp;
+ return True;
+ }
+ case XFixesCursorNotify: {
+ XFixesCursorNotifyEvent *aevent;
+ xXFixesCursorNotifyEvent *awire;
+ awire = (xXFixesCursorNotifyEvent *) wire;
+ aevent = (XFixesCursorNotifyEvent *) event;
+ awire->type = aevent->type | (aevent->send_event ? 0x80 : 0);
+ awire->subtype = aevent->subtype;
+ awire->window = aevent->window;
+ awire->timestamp = aevent->timestamp;
+ awire->cursorSerial = aevent->cursor_serial;
+ awire->name = aevent->cursor_name;
+ }
+ }
+ return False;
+}
+
+Bool
+XFixesQueryExtension (Display *dpy, int *event_basep, int *error_basep)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+
+ if (XFixesHasExtension(info))
+ {
+ *event_basep = info->codes->first_event;
+ *error_basep = info->codes->first_error;
+ return True;
+ }
+ else
+ return False;
+}
+
+Status
+XFixesQueryVersion (Display *dpy,
+ int *major_versionp,
+ int *minor_versionp)
+{
+ XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy);
+
+ XFixesCheckExtension (dpy, info, 0);
+
+ *major_versionp = info->major_version;
+ *minor_versionp = info->minor_version;
+ UnlockDisplay (dpy);
+ SyncHandle ();
+ return 1;
+}
+
+int
+XFixesVersion (void)
+{
+ return XFIXES_VERSION;
+}
diff --git a/nx-X11/lib/Xfixes/Xfixes.h b/nx-X11/lib/Xfixes/Xfixes.h
new file mode 100644
index 000000000..28ca28f1a
--- /dev/null
+++ b/nx-X11/lib/Xfixes/Xfixes.h
@@ -0,0 +1,220 @@
+/*
+ * $XFree86: xc/lib/Xfixes/Xfixes.h,v 1.1 2002/11/30 06:21:45 keithp Exp $
+ *
+ * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _XFIXES_H_
+#define _XFIXES_H_
+
+#include <X11/extensions/xfixeswire.h>
+
+#include <X11/Xfuncproto.h>
+
+/*
+ * This revision number also appears in configure.ac, they have
+ * to be manually synchronized
+ */
+#define XFIXES_REVISION 1
+#define XFIXES_VERSION ((XFIXES_MAJOR * 10000) + (XFIXES_MINOR * 100) + (XFIXES_REVISION))
+
+typedef struct {
+ int type; /* event base */
+ unsigned long serial;
+ Bool send_event;
+ Display *display;
+ Window window;
+ int subtype;
+ Window owner;
+ Atom selection;
+ Time timestamp;
+ Time selection_timestamp;
+} XFixesSelectionNotifyEvent;
+
+typedef struct {
+ int type; /* event base */
+ unsigned long serial;
+ Bool send_event;
+ Display *display;
+ Window window;
+ int subtype;
+ unsigned long cursor_serial;
+ Time timestamp;
+ Atom cursor_name;
+} XFixesCursorNotifyEvent;
+
+typedef struct {
+ short x, y;
+ unsigned short width, height;
+ unsigned short xhot, yhot;
+ unsigned long cursor_serial;
+ unsigned long *pixels;
+#if XFIXES_MAJOR >= 2
+ Atom atom; /* Version >= 2 only */
+ const char *name; /* Version >= 2 only */
+#endif
+} XFixesCursorImage;
+
+#if XFIXES_MAJOR >= 2
+/* Version 2 types */
+
+typedef XID XserverRegion;
+
+typedef struct {
+ short x, y;
+ unsigned short width, height;
+ unsigned short xhot, yhot;
+ unsigned long cursor_serial;
+ unsigned long *pixels;
+ Atom atom;
+ const char *name;
+} XFixesCursorImageAndName;
+
+#endif
+
+_XFUNCPROTOBEGIN
+
+Bool XFixesQueryExtension (Display *dpy, int *event_basep, int *error_basep);
+Status XFixesQueryVersion (Display *dpy,
+ int *major_versionp,
+ int *minor_versionp);
+
+int XFixesVersion (void);
+
+void
+XFixesChangeSaveSet (Display *dpy,
+ Window win,
+ int mode,
+ int target,
+ int map);
+
+void
+XFixesSelectSelectionInput (Display *dpy,
+ Window win,
+ Atom selection,
+ unsigned long eventMask);
+
+void
+XFixesSelectCursorInput (Display *dpy,
+ Window win,
+ unsigned long eventMask);
+
+XFixesCursorImage *
+XFixesGetCursorImage (Display *dpy);
+
+#if XFIXES_MAJOR >= 2
+/* Version 2 functions */
+
+XserverRegion
+XFixesCreateRegion (Display *dpy, XRectangle *rectangles, int nrectangles);
+
+XserverRegion
+XFixesCreateRegionFromBitmap (Display *dpy, Pixmap bitmap);
+
+XserverRegion
+XFixesCreateRegionFromWindow (Display *dpy, Window window, int kind);
+
+XserverRegion
+XFixesCreateRegionFromGC (Display *dpy, GC gc);
+
+XserverRegion
+XFixesCreateRegionFromPicture (Display *dpy, XID picture);
+
+void
+XFixesDestroyRegion (Display *dpy, XserverRegion region);
+
+void
+XFixesSetRegion (Display *dpy, XserverRegion region,
+ XRectangle *rectangles, int nrectangles);
+
+void
+XFixesCopyRegion (Display *dpy, XserverRegion dst, XserverRegion src);
+
+void
+XFixesUnionRegion (Display *dpy, XserverRegion dst,
+ XserverRegion src1, XserverRegion src2);
+
+void
+XFixesIntersectRegion (Display *dpy, XserverRegion dst,
+ XserverRegion src1, XserverRegion src2);
+
+void
+XFixesSubtractRegion (Display *dpy, XserverRegion dst,
+ XserverRegion src1, XserverRegion src2);
+
+void
+XFixesInvertRegion (Display *dpy, XserverRegion dst,
+ XRectangle *rect, XserverRegion src);
+
+void
+XFixesTranslateRegion (Display *dpy, XserverRegion region, int dx, int dy);
+
+void
+XFixesRegionExtents (Display *dpy, XserverRegion dst, XserverRegion src);
+
+XRectangle *
+XFixesFetchRegion (Display *dpy, XserverRegion region, int *nrectanglesRet);
+
+XRectangle *
+XFixesFetchRegionAndBounds (Display *dpy, XserverRegion region,
+ int *nrectanglesRet,
+ XRectangle *bounds);
+
+void
+XFixesSetGCClipRegion (Display *dpy, GC gc,
+ int clip_x_origin, int clip_y_origin,
+ XserverRegion region);
+
+void
+XFixesSetWindowShapeRegion (Display *dpy, Window win, int shape_kind,
+ int x_off, int y_off, XserverRegion region);
+
+void
+XFixesSetPictureClipRegion (Display *dpy, XID picture,
+ int clip_x_origin, int clip_y_origin,
+ XserverRegion region);
+
+void
+XFixesSetCursorName (Display *dpy, Cursor cursor, const char *name);
+
+const char *
+XFixesGetCursorName (Display *dpy, Cursor cursor, Atom *atom);
+
+void
+XFixesChangeCursor (Display *dpy, Cursor source, Cursor destination);
+
+void
+XFixesChangeCursorByName (Display *dpy, Cursor source, const char *name);
+
+#endif /* XFIXES_MAJOR >= 2 */
+
+#if XFIXES_MAJOR >= 3
+
+void
+XFixesExpandRegion (Display *dpy, XserverRegion dst, XserverRegion src,
+ unsigned left, unsigned right,
+ unsigned top, unsigned bottom);
+
+#endif /* XFIXES_MAJOR >= 3 */
+
+_XFUNCPROTOEND
+
+#endif /* _XFIXES_H_ */
diff --git a/nx-X11/lib/Xfixes/Xfixes.man b/nx-X11/lib/Xfixes/Xfixes.man
new file mode 100644
index 000000000..f081cc54e
--- /dev/null
+++ b/nx-X11/lib/Xfixes/Xfixes.man
@@ -0,0 +1,76 @@
+.\"
+.\" $XFree86: xc/lib/Xfixes/Xfixes.man,v 1.1 2002/11/30 06:21:45 keithp Exp $
+.\"
+.\" Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this software and its
+.\" documentation for any purpose is hereby granted without fee, provided that
+.\" the above copyright notice appear in all copies and that both that
+.\" copyright notice and this permission notice appear in supporting
+.\" documentation, and that the name of Keith Packard not be used in
+.\" advertising or publicity pertaining to distribution of the software without
+.\" specific, written prior permission. Keith Packard makes no
+.\" representations about the suitability of this software for any purpose. It
+.\" is provided "as is" without express or implied warranty.
+.\"
+.\" KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+.\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+.\" EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+.\" CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+.\" DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+.\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+.\" PERFORMANCE OF THIS SOFTWARE.
+.\"
+.de TQ
+.br
+.ns
+.TP \\$1
+..
+.TH XFIXES 3 "Version 1.0" "XFree86"
+
+.SH NAME
+XFixes \- Augmented versions of core protocol requests
+.SH SYNTAX
+\&#include <X11/extensions/Xfixes.h>
+.nf
+.sp
+Bool XFixesQueryExtension \^(\^Display *\fIdpy\fP,
+ int *\fIevent_basep\fP, int *\fIerror_basep\fP\^);
+.sp
+Status XFixesQueryVersion \^(\^Display *\fIdpy\fP,
+ int *\fImajor_versionp\fP,
+ int *\fIminor_versionp\fP\^);
+.sp
+void XFixesChangeSaveSet \^(\^Display *dpy,
+ Window \fIwindow\fP,
+ int \fImode\fP,
+ int \fItarget\fP,
+ int \fImap\fP);
+.fi
+.SH ARGUMENTS
+.IP \fIdisplay\fP 1i
+Specifies the connection to the X server.
+.IP \fIwindow\fP 1i
+Specifies which window.
+.IP \fImode\fP 1i
+Specifies the save set operation (SetModeInsert/SetModeDelete).
+.IP \fItarget\fP 1i
+Specifies the target when executing the save set
+(SaveSetNearest/SaveSetRoot). In SaveSetNearest mode, the save set member
+window will be reparented to the nearest window not owned by the save set
+client. In SaveSetRoot mode, the save set member window will be reparented
+to the root window.
+.IP \fImap\fP 1i
+Specifies the map mode (SaveSetMap/SaveSetUnmap) which selects whether the
+save setmember window will be mapped or unmapped during save set processing.
+.SH DESCRIPTION
+.B Xfixes
+is a simple library designed to interface the X Fixes
+Extension. This extension provides application with work arounds for
+various limitations in the core protocol.
+.SH RESTRICTIONS
+.B Xfixes
+will remain upward compatible after the current 1.0 release.
+.SH AUTHORS
+Keith Packard, member of the XFree86 Project, Inc. and
+HP, Owen Taylor, member of the Gnome Foundation and Redhat, Inc.
diff --git a/nx-X11/lib/Xfixes/Xfixesint.h b/nx-X11/lib/Xfixes/Xfixesint.h
new file mode 100644
index 000000000..e227571be
--- /dev/null
+++ b/nx-X11/lib/Xfixes/Xfixesint.h
@@ -0,0 +1,68 @@
+/*
+ * $XFree86: xc/lib/Xfixes/Xfixesint.h,v 1.1 2002/11/30 06:21:45 keithp Exp $
+ *
+ * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _XFIXESINT_H_
+#define _XFIXESINT_H_
+
+#define NEED_EVENTS
+#define NEED_REPLIES
+#include <stdio.h>
+#include <X11/Xlib.h>
+#include <X11/Xlibint.h>
+#include <X11/Xutil.h>
+#include "Xfixes.h"
+#include <X11/extensions/xfixesproto.h>
+
+extern char XFixesExtensionName[];
+
+typedef struct _XFixesExtDisplayInfo {
+ struct _XFixesExtDisplayInfo *next; /* keep a linked list */
+ Display *display; /* which display this is */
+ XExtCodes *codes; /* the extension protocol codes */
+ int major_version; /* -1 means we don't know */
+ int minor_version; /* -1 means we don't know */
+} XFixesExtDisplayInfo;
+
+/* replaces XExtensionInfo */
+typedef struct _XFixesExtInfo {
+ XFixesExtDisplayInfo *head; /* start of the list */
+ XFixesExtDisplayInfo *cur; /* most recently used */
+ int ndisplays; /* number of displays */
+} XFixesExtInfo;
+
+extern XFixesExtInfo XFixesExtensionInfo;
+extern char XFixesExtensionName[];
+
+XFixesExtDisplayInfo *
+XFixesFindDisplay (Display *dpy);
+
+#define XFixesHasExtension(i) ((i) && ((i)->codes))
+
+#define XFixesCheckExtension(dpy,i,val) \
+ if (!XFixesHasExtension(i)) { return val; }
+
+#define XFixesSimpleCheckExtension(dpy,i) \
+ if (!XFixesHasExtension(i)) { return; }
+
+#endif /* _XFIXESINT_H_ */
diff --git a/nx-X11/lib/Xfixes/autogen.sh b/nx-X11/lib/Xfixes/autogen.sh
new file mode 100755
index 000000000..b1376df5a
--- /dev/null
+++ b/nx-X11/lib/Xfixes/autogen.sh
@@ -0,0 +1,3 @@
+#! /bin/sh
+autoreconf -v --install || exit 1
+./configure --enable-maintainer-mode "$@"
diff --git a/nx-X11/lib/Xfixes/configure.ac b/nx-X11/lib/Xfixes/configure.ac
new file mode 100644
index 000000000..37b123516
--- /dev/null
+++ b/nx-X11/lib/Xfixes/configure.ac
@@ -0,0 +1,99 @@
+dnl
+dnl $Id: configure.ac,v 1.1 2004/07/31 05:50:39 anholt Exp $
+dnl
+dnl Copyright © 2003 Keith Packard, Noah Levitt
+dnl
+dnl Permission to use, copy, modify, distribute, and sell this software and its
+dnl documentation for any purpose is hereby granted without fee, provided that
+dnl the above copyright notice appear in all copies and that both that
+dnl copyright notice and this permission notice appear in supporting
+dnl documentation, and that the name of Keith Packard not be used in
+dnl advertising or publicity pertaining to distribution of the software without
+dnl specific, written prior permission. Keith Packard makes no
+dnl representations about the suitability of this software for any purpose. It
+dnl is provided "as is" without express or implied warranty.
+dnl
+dnl KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+dnl EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+dnl PERFORMANCE OF THIS SOFTWARE.
+dnl
+dnl Process this file with autoconf to create configure.
+
+AC_PREREQ([2.57])
+
+dnl
+dnl Version should match the current XFixes version. XFixesQueryVersion
+dnl returns the version from xfixeswire.h, NOT the version we set here. But we
+dnl try to keep these the same. Note that the library has an extra
+dnl digit in the version number to track changes which don't affect the
+dnl protocol, so Xfixes version l.n.m corresponds to protocol version l.n,
+dnl that 'revision' number appears in Xfixes.h and has to be manually
+dnl synchronized.
+dnl
+AC_INIT(libXfixes, 3.0.0, [keithp@keithp.com], libXfixes)
+AM_INIT_AUTOMAKE([dist-bzip2])
+AM_MAINTAINER_MODE
+
+AM_CONFIG_HEADER(config.h)
+AC_CONFIG_AUX_DIR(.)
+
+# Check for progs
+AC_PROG_CC
+AC_PROG_LIBTOOL
+
+# Check for X
+PKG_CHECK_MODULES(X, x11,
+ [x_found_with_pkgconfig=yes],
+ [x_found_with_pkgconfig=no])
+AC_SUBST(X_CFLAGS)
+AC_SUBST(X_LIBS)
+
+if test "$x_found_with_pkgconfig" = "no"
+then
+ AC_PATH_XTRA
+ X_LIBS="$X_LIBS -lX11"
+
+ if test "x$no_x" = "xyes"
+ then
+ AC_MSG_ERROR([X is required, but it was either disabled or not found.])
+ fi
+
+ save_LIBS="$LIBS"
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $X_CFLAGS"
+ LIBS="$LIBS $X_LIBS"
+
+ AC_MSG_CHECKING([for XTHREADS in Xlib])
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([[#include <X11/Xlib.h>]],
+ [[return XInitThreads() == 0 ? 0 : 1;]])],
+ [xthreads=no],
+ [xthreads=yes],
+ [xthreads=yes])
+
+ AC_MSG_RESULT($xthreads)
+
+ LIBS="$save_LIBS"
+ CFLAGS="$save_CFLAGS"
+
+ if test "x$xthreads" = "xyes"
+ then
+ X_CFLAGS="$X_CFLAGS -DXTHREADS"
+ fi
+fi
+
+# Check fixesext configuration, strip extra digits from package version to
+# find the required protocol version
+
+FIXESEXT_VERSION=[`echo $VERSION | sed 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/'`]
+PKG_CHECK_MODULES(FIXESEXT, [fixesext >= $FIXESEXT_VERSION])
+AC_SUBST(FIXESEXT_CFLAGS)
+AC_SUBST(FIXESEXT_LIBS)
+
+AC_OUTPUT([Makefile
+ xfixes.pc])
+
diff --git a/nx-X11/lib/Xfixes/xfixes.pc.in b/nx-X11/lib/Xfixes/xfixes.pc.in
new file mode 100644
index 000000000..6180ea371
--- /dev/null
+++ b/nx-X11/lib/Xfixes/xfixes.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Xfixes
+Description: X Fixes Library
+Version: @VERSION@
+Cflags: -I${includedir} @X_CFLAGS@
+Libs: -L${libdir} -lXfixes @X_LIBS@