[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xorg-server: Changes to 'ubuntu'



 debian/changelog                                    |   10 
 debian/control                                      |    4 
 debian/patches/202_xf86CoordinationsToWindows.patch |  101 
 debian/patches/203_gestures-extension.patch         | 1478 ------
 debian/patches/500_xi2.1.patch                      | 4407 ++++++++++++++++++++
 debian/patches/501_xf86CoordinatesToWindow.patch    |   97 
 debian/patches/502_gestures-extension.patch         | 1488 ++++++
 debian/patches/series                               |    5 
 8 files changed, 6006 insertions(+), 1584 deletions(-)

New commits:
commit 6849ccd7f88f67047e0d997ecf6c36e7ccba8542
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Tue Feb 1 16:23:03 2011 -0500

    Add in preliminary xi2.1 support
    
    * Add in preliminary xi2.1 support
      - Added 500_xi2.1.patch
      - Moved 202_xf86CoordinationsToWindows.patch to
        501_xf86CoordinatesToWindow.patch
      - Moved 203_gestures-extension.patch to 502_gestures-extension.patch
      - Bump dependency on x11proto-input for xi 2.1

diff --git a/debian/changelog b/debian/changelog
index 09a9ba7..1742935 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -87,7 +87,15 @@ xorg-server (2:1.9.99.902-2ubuntu1) UNRELEASED; urgency=low
       Regression from 1.9, keyboard events are not converted to protocol
       events. (LP: #714696)
 
- -- Christopher James Halse Rogers <raof@ubuntu.com>  Tue, 22 Feb 2011 09:52:26 +1100
+  [ Chase Douglas ]
+  * Add in preliminary xi2.1 support
+    - Added 500_xi2.1.patch
+    - Moved 202_xf86CoordinationsToWindows.patch to
+      501_xf86CoordinatesToWindow.patch
+    - Moved 203_gestures-extension.patch to 502_gestures-extension.patch
+    - Bump dependency on x11proto-input for xi 2.1
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Mon, 21 Feb 2011 20:45:49 -0500
 
 xorg-server (2:1.9.99.902-2) experimental; urgency=low
 
diff --git a/debian/control b/debian/control
index e9b163b..959a9e4 100644
--- a/debian/control
+++ b/debian/control
@@ -40,7 +40,7 @@ Build-Depends:
  x11proto-xf86vidmode-dev (>= 2.2.99.1),
  xtrans-dev (>= 1.2.2),
  libxau-dev (>= 1:1.0.5-2),
- x11proto-input-dev (>= 1.9.99.902),
+ x11proto-input-dev (>= 2.0.1-1ubuntu1),
  x11proto-dri2-dev (>= 2.3),
  libxdmcp-dev (>= 1:0.99.1),
  libxfont-dev (>= 1:1.4.2),
@@ -172,7 +172,7 @@ Architecture: any
 Depends:
  libpixman-1-dev (>= 0.15.20),
  x11proto-core-dev (>= 7.0.17),
- x11proto-input-dev (>= 1.9.99.902),
+ x11proto-input-dev (>= 2.0.1-1ubuntu1),
  x11proto-xext-dev (>= 7.1.99),
  x11proto-video-dev,
  x11proto-randr-dev (>= 1.3.99),
diff --git a/debian/patches/202_xf86CoordinationsToWindows.patch b/debian/patches/202_xf86CoordinationsToWindows.patch
deleted file mode 100644
index 4d8156a..0000000
--- a/debian/patches/202_xf86CoordinationsToWindows.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From 88538741de597a2595d89d7518f123c3b16c6d4f Mon Sep 17 00:00:00 2001
-From: Chase Douglas <chase.douglas@canonical.com>
-Date: Tue, 25 Jan 2011 22:44:41 -0500
-Subject: [PATCH] Add xf86CoordinatesToWIndow
-
----
- dix/events.c                   |   44 ++++++++++++++++++++++++++++++++++++++++
- hw/xfree86/common/xf86Xinput.c |    6 +++++
- hw/xfree86/common/xf86Xinput.h |    2 +
- include/events.h               |    3 ++
- 4 files changed, 55 insertions(+), 0 deletions(-)
-
---- a/dix/events.c
-+++ b/dix/events.c
-@@ -5811,3 +5811,47 @@ IsInterferingGrab(ClientPtr client, Devi
-     return FALSE;
- }
- 
-+WindowPtr
-+CoordinatesToWindow(int x, int y, int screen)
-+{
-+    WindowPtr pWin;
-+    WindowPtr ret = NullWindow;
-+    BoxRec box;
-+
-+    pWin = screenInfo.screens[screen]->root;
-+    while (pWin)
-+    {
-+	if ((pWin->mapped) &&
-+	    (x >= pWin->drawable.x - wBorderWidth (pWin)) &&
-+	    (x < pWin->drawable.x + (int)pWin->drawable.width +
-+	     wBorderWidth(pWin)) &&
-+	    (y >= pWin->drawable.y - wBorderWidth (pWin)) &&
-+	    (y < pWin->drawable.y + (int)pWin->drawable.height +
-+	     wBorderWidth (pWin))
-+	    /* When a window is shaped, a further check
-+	     * is made to see if the point is inside
-+	     * borderSize
-+	     */
-+	    && (!wBoundingShape(pWin) || PointInBorderSize(pWin, x, y))
-+	    && (!wInputShape(pWin) ||
-+		RegionContainsPoint(wInputShape(pWin),
-+				    x - pWin->drawable.x,
-+				    y - pWin->drawable.y, &box))
-+#ifdef ROOTLESS
-+    /* In rootless mode windows may be offscreen, even when
-+     * they're in X's stack. (E.g. if the native window system
-+     * implements some form of virtual desktop system).
-+     */
-+		&& !pWin->rootlessUnhittable
-+#endif
-+	    )
-+	{
-+            ret = pWin;
-+            pWin = pWin->firstChild;
-+        }
-+        else
-+            pWin = pWin->nextSib;
-+    }
-+    return ret;
-+}
-+
---- a/hw/xfree86/common/xf86Xinput.c
-+++ b/hw/xfree86/common/xf86Xinput.c
-@@ -1396,4 +1396,10 @@ xf86EnableDevice(DeviceIntPtr dev)
-     EnableDevice(dev, TRUE);
- }
- 
-+WindowPtr
-+xf86CoordinatesToWindow(int x, int y, int screen)
-+{
-+    return CoordinatesToWindow(x, y, screen);
-+}
-+
- /* end of xf86Xinput.c */
---- a/hw/xfree86/common/xf86Xinput.h
-+++ b/hw/xfree86/common/xf86Xinput.h
-@@ -179,4 +179,6 @@ extern _X_EXPORT void xf86VIDrvMsgVerb(I
- /* xf86Option.c */
- extern _X_EXPORT void xf86CollectInputOptions(InputInfoPtr pInfo, const char **defaultOpts);
- 
-+extern _X_EXPORT WindowPtr xf86CoordinatesToWindow(int x, int y, int screen);
-+
- #endif /* _xf86Xinput_h */
---- a/include/events.h
-+++ b/include/events.h
-@@ -24,6 +24,7 @@
- 
- #ifndef EVENTS_H
- #define EVENTS_H
-+
- typedef struct _DeviceEvent DeviceEvent;
- typedef struct _DeviceChangedEvent DeviceChangedEvent;
- #if XFreeXDGA
-@@ -35,4 +36,6 @@ typedef struct _XQuartzEvent XQuartzEven
- #endif
- typedef union _InternalEvent InternalEvent;
- 
-+extern WindowPtr CoordinatesToWindow(int x, int y, int screen);
-+
- #endif
diff --git a/debian/patches/203_gestures-extension.patch b/debian/patches/203_gestures-extension.patch
deleted file mode 100644
index 427e90f..0000000
--- a/debian/patches/203_gestures-extension.patch
+++ /dev/null
@@ -1,1478 +0,0 @@
-From 09db1a38853ddf8ad8a72e644c7b8e9b1863f4d6 Mon Sep 17 00:00:00 2001
-From: Chase Douglas <chase.douglas@canonical.com>
-Date: Tue, 25 Jan 2011 20:28:35 -0500
-Subject: [PATCH] Gesture support
-
----
- Makefile.am                    |    5 +
- configure.ac                   |   26 ++-
- dix/events.c                   |    3 +
- dix/window.c                   |   10 +
- gesture/Makefile.am            |   10 +
- gesture/gesture.c              |  430 ++++++++++++++++++++++++++++++++++++++++
- gesture/gesture.h              |   78 ++++++++
- gesture/gestureint.h           |   49 +++++
- gesture/gestureproto.h         |  132 ++++++++++++
- gesture/init.c                 |  280 ++++++++++++++++++++++++++
- hw/xfree86/common/xf86Xinput.c |   43 ++++
- include/dix-config.h.in        |    3 +
- include/eventstr.h             |   14 ++
- include/protocol-versions.h    |    4 +
- include/windowstr.h            |   14 ++
- mi/mieq.c                      |   35 ++++
- mi/miinitext.c                 |   15 ++
- os/utils.c                     |    3 +
- 18 files changed, 1146 insertions(+), 8 deletions(-)
- create mode 100644 gesture/Makefile.am
- create mode 100644 gesture/gesture.c
- create mode 100644 gesture/gesture.h
- create mode 100644 gesture/gestureint.h
- create mode 100644 gesture/gestureproto.h
- create mode 100644 gesture/init.c
-
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -17,6 +17,10 @@ if RECORD
- RECORD_DIR=record
- endif
- 
-+if GESTURES
-+GESTURE_DIR=gesture
-+endif
-+
- SUBDIRS = \
- 	doc \
- 	include \
-@@ -37,6 +41,7 @@ SUBDIRS = \
- 	$(COMPOSITE_DIR) \
- 	$(GLX_DIR) \
- 	exa \
-+	$(GESTURE_DIR) \
- 	config \
- 	hw \
- 	test
---- a/configure.ac
-+++ b/configure.ac
-@@ -596,6 +596,8 @@ AC_ARG_ENABLE(visibility,     AC_HELP_ST
- AC_ARG_ENABLE(pc98,     	AC_HELP_STRING([--enable-pc98], [Enable PC98 support in Xorg (default: auto)]),
- 				[SUPPORT_PC98=$enableval],
- 				[SUPPORT_PC98=auto])
-+AC_ARG_ENABLE(gestures,         AC_HELP_STRING([--enable-gestures], [Enable gesture support (default: disabled)]),
-+				[GESTURES=$enableval])
- 
- dnl GLX build options
- AC_ARG_ENABLE(aiglx,          AS_HELP_STRING([--enable-aiglx], [Build accelerated indirect GLX (default: enabled)]),
-@@ -1353,6 +1355,13 @@ MIEXT_SYNC_INC='-I$(top_srcdir)/miext/sy
- MIEXT_SYNC_LIB='$(top_builddir)/miext/sync/libsync.la'
- CORE_INCS='-I$(top_srcdir)/include -I$(top_builddir)/include'
- 
-+AM_CONDITIONAL(GESTURES, [test "x$GESTURES" = "xyes"])
-+if test "x$GESTURES" = xyes; then
-+	AC_DEFINE(GESTURES, 1, [Enable gesture support])
-+	GESTURE_LIB='$(top_builddir)/gesture/libgesture.la'
-+	GESTURE_INC='-I$(top_srcdir)/gesture'
-+fi
-+
- # SHA1 hashing
- AC_ARG_WITH([sha1],
-             [AS_HELP_STRING([--with-sha1=libc|libmd|libgcrypt|libcrypto|libsha1|CommonCrypto|nettle],
-@@ -1500,7 +1509,7 @@ AC_EGREP_CPP([I_AM_SVR4],[
- AC_DEFINE([SVR4],1,[Define to 1 on systems derived from System V Release 4])
- AC_MSG_RESULT([yes])], AC_MSG_RESULT([no]))
- 
--XSERVER_CFLAGS="$XSERVER_CFLAGS $CORE_INCS $XEXT_INC $COMPOSITE_INC $DAMAGE_INC $FIXES_INC $XI_INC $MI_INC $MIEXT_SYNC_INC $MIEXT_SHADOW_INC $MIEXT_LAYER_INC $MIEXT_DAMAGE_INC $RENDER_INC $RANDR_INC $FB_INC"
-+XSERVER_CFLAGS="$XSERVER_CFLAGS $CORE_INCS $XEXT_INC $COMPOSITE_INC $DAMAGE_INC $FIXES_INC $XI_INC $MI_INC $MIEXT_SYNC_INC $MIEXT_SHADOW_INC $MIEXT_LAYER_INC $MIEXT_DAMAGE_INC $RENDER_INC $RANDR_INC $FB_INC $GESTURE_INC"
- 
- dnl ---------------------------------------------------------------------------
- dnl DDX section.
-@@ -1513,7 +1522,7 @@ AC_MSG_RESULT([$XVFB])
- AM_CONDITIONAL(XVFB, [test "x$XVFB" = xyes])
- 
- if test "x$XVFB" = xyes; then
--	XVFB_LIBS="$FB_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB"
-+	XVFB_LIBS="$FB_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $GESTURE_LIB"
- 	XVFB_SYS_LIBS="$XVFBMODULES_LIBS $GLX_SYS_LIBS"
- 	AC_SUBST([XVFB_LIBS])
- 	AC_SUBST([XVFB_SYS_LIBS])
-@@ -1534,7 +1543,7 @@ if test "x$XNEST" = xyes; then
- 	if test "x$have_xnest" = xno; then
- 		AC_MSG_ERROR([Xnest build explicitly requested, but required modules not found.])
- 	fi
--	XNEST_LIBS="$FB_LIB $FIXES_LIB $MI_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DIX_LIB $MAIN_LIB $OS_LIB"
-+	XNEST_LIBS="$FB_LIB $FIXES_LIB $MI_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DIX_LIB $MAIN_LIB $OS_LIB $GESTURE_LIB"
- 	XNEST_SYS_LIBS="$XNESTMODULES_LIBS $GLX_SYS_LIBS"
- 	AC_SUBST([XNEST_LIBS])
- 	AC_SUBST([XNEST_SYS_LIBS])
-@@ -1562,7 +1571,7 @@ if test "x$XORG" = xyes; then
- 	XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os'
- 	XORG_INCS="$XORG_DDXINCS $XORG_OSINCS"
- 	XORG_CFLAGS="$XORGSERVER_CFLAGS -DHAVE_XORG_CONFIG_H"
--	XORG_LIBS="$COMPOSITE_LIB $FIXES_LIB $XEXTXORG_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB"
-+	XORG_LIBS="$COMPOSITE_LIB $FIXES_LIB $XEXTXORG_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $GESTURE_LIB"
- 
- 	dnl ==================================================================
- 	dnl symbol visibility
-@@ -1898,7 +1907,7 @@ if test "x$XWIN" = xyes; then
- 			XWIN_SYS_LIBS=-lwinsock2
- 			;;
- 	esac
--	XWIN_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $RANDR_LIB $RENDER_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $OS_LIB"
-+	XWIN_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $RANDR_LIB $RENDER_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $OS_LIB $GESTURE_LIB"
- 	XWIN_SYS_LIBS="$XWIN_SYS_LIBS $XWINMODULES_LIBS"
- 	AC_SUBST(XWIN_LIBS)
- 	AC_SUBST(XWIN_SERVER_NAME)
-@@ -1928,7 +1937,7 @@ if test "x$XQUARTZ" = xyes; then
- 	AC_DEFINE(XQUARTZ,1,[Have Quartz])
- 	AC_DEFINE(ROOTLESS,1,[Build Rootless code])
- 
--	DARWIN_LIBS="$MI_LIB $OS_LIB $DIX_LIB $MAIN_LIB $FB_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $XPSTUBS_LIB"
-+	DARWIN_LIBS="$MI_LIB $OS_LIB $DIX_LIB $MAIN_LIB $FB_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $XPSTUBS_LIB $GESTURE_LIB"
- 	AC_SUBST([DARWIN_LIBS])
- 
- 	AC_CHECK_LIB([Xplugin],[xp_init],[:])
-@@ -1989,7 +1998,7 @@ if test "x$DMX" = xyes; then
- 	fi
- 	DMX_INCLUDES="$XEXT_INC $RENDER_INC $RECORD_INC"
- 	XDMX_CFLAGS="$DMXMODULES_CFLAGS"
--	XDMX_LIBS="$FB_LIB $MI_LIB $XEXT_LIB $RENDER_LIB $RECORD_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $MIEXT_SYNC_LIB $MIEXT_SHADOW_LIB $MIEXT_DAMAGE_LIB $COMPOSITE_LIB $DAMAGE_LIB $MAIN_LIB $DIX_LIB $CONFIG_LIB $OS_LIB $FIXES_LIB"
-+	XDMX_LIBS="$FB_LIB $MI_LIB $XEXT_LIB $RENDER_LIB $RECORD_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $MIEXT_SYNC_LIB $MIEXT_SHADOW_LIB $MIEXT_DAMAGE_LIB $COMPOSITE_LIB $DAMAGE_LIB $MAIN_LIB $DIX_LIB $CONFIG_LIB $OS_LIB $FIXES_LIB $GESTURE_LIB"
- 	XDMX_SYS_LIBS="$DMXMODULES_LIBS"
- 	AC_SUBST([XDMX_CFLAGS])
- 	AC_SUBST([XDMX_LIBS])
-@@ -2100,7 +2109,7 @@ if test "$KDRIVE" = yes; then
-     
-     KDRIVE_CFLAGS="$XSERVER_CFLAGS -DHAVE_KDRIVE_CONFIG_H $TSLIB_CFLAGS"
- 
--    KDRIVE_PURE_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $OS_LIB"
-+    KDRIVE_PURE_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $OS_LIB $GESTURE_LIB"
-     KDRIVE_LIB='$(top_builddir)/hw/kdrive/src/libkdrive.la'
-     case $host_os in
- 	*linux*)
-@@ -2214,6 +2223,7 @@ Xext/Makefile
- Xi/Makefile
- xfixes/Makefile
- exa/Makefile
-+gesture/Makefile
- hw/Makefile
- hw/xfree86/Makefile
- hw/xfree86/common/Makefile
---- a/dix/events.c
-+++ b/dix/events.c
-@@ -5442,6 +5442,9 @@ DeleteWindowFromAnyEvents(WindowPtr pWin
- 	    FreeResource(oc->resource, RT_NONE);
- 	while ( (passive = wPassiveGrabs(pWin)) )
- 	    FreeResource(passive->resource, RT_NONE);
-+#ifdef GESTURES
-+        DeleteWindowFromGestureEvents(pWin);
-+#endif
-      }
- 
-     DeleteWindowFromAnyExtEvents(pWin, freeResources);
---- a/dix/window.c
-+++ b/dix/window.c
-@@ -403,6 +403,9 @@ CreateRootWindow(ScreenPtr pScreen)
-     pWin->optional->deviceCursors = NULL;
-     pWin->optional->colormap = pScreen->defColormap;
-     pWin->optional->visual = pScreen->rootVisual;
-+#ifdef GESTURES
-+    pWin->optional->gestureMasks = NULL;
-+#endif
- 
-     pWin->nextSib = NullWindow;
- 
-@@ -3408,6 +3411,10 @@ CheckWindowOptionalNeed (WindowPtr w)
-             pNode = pNode->next;
-         }
-     }
-+#ifdef GESTURES
-+    if (optional->gestureMasks != NULL)
-+        return;
-+#endif
- 
-     parentOptional = FindWindowWithOptional(w)->optional;
-     if (optional->visual != parentOptional->visual)
-@@ -3451,6 +3458,9 @@ MakeWindowOptional (WindowPtr pWin)
-     optional->inputShape = NULL;
-     optional->inputMasks = NULL;
-     optional->deviceCursors = NULL;
-+#ifdef GESTURES
-+    optional->gestureMasks = NULL;
-+#endif
- 
-     parentOptional = FindWindowWithOptional(pWin)->optional;
-     optional->visual = parentOptional->visual;
---- /dev/null
-+++ b/gesture/Makefile.am
-@@ -0,0 +1,10 @@
-+noinst_LTLIBRARIES = libgesture.la
-+
-+AM_CFLAGS = $(DIX_CFLAGS)
-+
-+libgesture_la_SOURCES = 	\
-+	init.c			\
-+	gesture.c		\
-+	gesture.h
-+
-+sdk_HEADERS = gesture.h
---- /dev/null
-+++ b/gesture/gesture.c
-@@ -0,0 +1,430 @@
-+/*
-+ * Copyright © 2010 Canonical, Ltd.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: Chase Douglas <chase.douglas@canonical.com>
-+ *
-+ */
-+
-+#include "windowstr.h"
-+#include "gestureint.h"
-+
-+int
-+SProcGestureQueryVersion(ClientPtr client)
-+{
-+    char n;
-+
-+    REQUEST(GestureQueryVersionReq);
-+    swaps(&stuff->length, n);
-+    REQUEST_AT_LEAST_SIZE(GestureQueryVersionReq);
-+    swaps(&stuff->major_version, n);
-+    swaps(&stuff->minor_version, n);
-+    return (ProcGestureQueryVersion(client));
-+}
-+
-+GestureExtensionVersion GestureVersion;
-+/**
-+ * Return the supported Gesture version.
-+ *
-+ * Saves the version the client claims to support as well, for future
-+ * reference.
-+ */
-+int
-+ProcGestureQueryVersion(ClientPtr client)
-+{
-+    GestureQueryVersionReply rep;
-+    GestureClientPtr gestureClient;
-+    int major, minor;
-+    unsigned int sversion, cversion;
-+
-+    REQUEST(GestureQueryVersionReq);
-+    REQUEST_SIZE_MATCH(GestureQueryVersionReq);
-+
-+    gestureClient = dixLookupPrivate(&client->devPrivates,
-+                                     &GestureClientPrivateKeyRec);
-+
-+    sversion = GestureVersion.major_version * 1000 + GestureVersion.minor_version;
-+    cversion = stuff->major_version * 1000 + stuff->minor_version;
-+
-+    if (sversion > cversion)
-+    {
-+        major = stuff->major_version;
-+        minor = stuff->minor_version;
-+    } else
-+    {
-+        major = GestureVersion.major_version;
-+        minor = GestureVersion.minor_version;
-+    }
-+
-+    gestureClient->major_version = major;
-+    gestureClient->minor_version = minor;
-+
-+    memset(&rep, 0, sizeof(GestureQueryVersionReply));
-+    rep.repType = X_Reply;
-+    rep.RepType = X_GestureQueryVersion;
-+    rep.length = 0;
-+    rep.sequenceNumber = client->sequence;
-+    rep.major_version = major;
-+    rep.minor_version = minor;
-+
-+    WriteReplyToClient(client, sizeof(GestureQueryVersionReply), &rep);
-+
-+    return Success;
-+}
-+
-+void
-+SRepGestureQueryVersion(ClientPtr client, int size, GestureQueryVersionReply *rep)
-+{
-+    char n;
-+    swaps(&rep->sequenceNumber, n);
-+    swapl(&rep->length, n);
-+    swaps(&rep->major_version, n);
-+    swaps(&rep->minor_version, n);
-+    WriteToClient(client, size, (char *)rep);
-+}
-+
-+static Bool
-+MakeGestureMasks(WindowPtr pWin)
-+{
-+    struct _GestureMasks *masks;
-+
-+    masks = calloc(1, sizeof(struct _GestureMasks));
-+    if (!masks)
-+        return FALSE;
-+    pWin->optional->gestureMasks = masks;
-+    return TRUE;
-+}
-+
-+static int
-+AddGestureClient(WindowPtr pWin, ClientPtr client)
-+{
-+    GestureClientsPtr others;
-+
-+    if (!pWin->optional && !MakeWindowOptional(pWin))
-+        return BadAlloc;
-+    others = calloc(1, sizeof(GestureClients));
-+    if (!others)
-+        return BadAlloc;
-+    if (!pWin->optional->gestureMasks && !MakeGestureMasks(pWin))
-+        return BadAlloc;
-+    others->resource = FakeClientID(client->index);
-+    others->next = pWin->optional->gestureMasks->clients;
-+    pWin->optional->gestureMasks->clients = others;
-+    if (!AddResource(others->resource, RT_GESTURECLIENT, (pointer) pWin))
-+        return BadAlloc;
-+    return Success;
-+}
-+
-+/**
-+ * Check the given mask (in len bytes) for invalid mask bits.
-+ * Invalid mask bits are any bits above GestureLastEvent.
-+ *
-+ * @return BadValue if at least one invalid bit is set or Success otherwise.
-+ */
-+static int
-+GestureCheckInvalidMaskBits(unsigned char *mask, int len)
-+{
-+    if (len >= GESTUREMASKSIZE)
-+    {
-+        int i;
-+        for (i = GESTURELASTEVENT + 1; i < len * 8; i++)
-+            if (BitIsOn(mask, i))
-+                return BadValue;
-+    }
-+
-+    return Success;
-+}
-+
-+int
-+SProcGestureSelectEvents(ClientPtr client)
-+{
-+    char n;
-+    int i;
-+
-+    REQUEST(GestureSelectEventsReq);
-+    swaps(&stuff->length, n);
-+    REQUEST_AT_LEAST_SIZE(GestureSelectEventsReq);
-+    swapl(&stuff->window, n);
-+    swaps(&stuff->mask.device_id, n);
-+    swaps(&stuff->mask.mask_len, n);
-+
-+    for (i = 0; i < stuff->mask.mask_len; i++)
-+        swapl(((uint32_t *)(stuff + 1)) + i, n);
-+
-+    return (ProcGestureSelectEvents(client));
-+}
-+
-+static void
-+RecalculateGestureDeliverableEvents(WindowPtr win)
-+{
-+    GestureClientsPtr others;
-+    int i;
-+
-+    if (!win->optional || !wGestureMasks(win))
-+        return;
-+
-+    memset(&wGestureMasks(win)->mask, 0, sizeof(wGestureMasks(win)->mask));
-+
-+    for (others = wGestureMasks(win)->clients; others; others = others->next)
-+        for (i = 0; i < sizeof(others->gestureMask) * 8; i++)
-+            if (BitIsOn(&others->gestureMask, i))
-+                SetBit(wGestureMasks(win)->mask, i % (GESTURELASTEVENT + 1));
-+}
-+
-+static int
-+GestureSetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
-+                    unsigned int len, unsigned char* mask)
-+{
-+    GestureMasks *masks;
-+    GestureClientsPtr others = NULL;
-+
-+    masks = wGestureMasks(win);
-+    if (masks)
-+    {
-+        for (others = masks->clients; others;
-+             others = others->next) {
-+            if (SameClient(others, client)) {
-+                memset(others->gestureMask[dev->id], 0,
-+                       sizeof(others->gestureMask[dev->id]));
-+                break;
-+            }
-+        }
-+    }
-+
-+    len = min(len, sizeof(others->gestureMask[dev->id]));
-+
-+    if (len && !others)
-+    {
-+        if (AddGestureClient(win, client) != Success)
-+            return BadAlloc;
-+        masks = wGestureMasks(win);
-+        others = masks->clients;
-+    }
-+
-+    if (others)
-+        memset(others->gestureMask[dev->id], 0,
-+               sizeof(others->gestureMask[dev->id]));
-+
-+    if (len)
-+        memcpy(others->gestureMask[dev->id], mask, len);
-+
-+    RecalculateGestureDeliverableEvents(win);
-+
-+    return Success;
-+}
-+
-+int
-+ProcGestureSelectEvents(ClientPtr client)
-+{
-+    int rc;
-+    WindowPtr win;
-+    DeviceIntPtr dev;
-+    DeviceIntRec dummy;
-+
-+    REQUEST(GestureSelectEventsReq);
-+    REQUEST_AT_LEAST_SIZE(GestureSelectEventsReq);
-+
-+    if (sizeof(GestureSelectEventsReq) + stuff->mask.mask_len * 4 >
-+        stuff->length * 4)
-+        return BadLength;
-+
-+    rc = dixLookupWindow(&win, stuff->window, client, DixReceiveAccess);
-+    if (rc != Success)
-+        return rc;
-+
-+    if (GestureCheckInvalidMaskBits((unsigned char*)(stuff + 1),
-+                                    stuff->mask.mask_len * 4) != Success)
-+        return BadValue;
-+
-+    if (stuff->mask.device_id == GestureAllDevices)
-+    {
-+        dummy.id = stuff->mask.device_id;
-+        dev = &dummy;
-+    } else {
-+        rc = dixLookupDevice(&dev, stuff->mask.device_id, client, DixUseAccess);
-+        if (rc != Success)
-+            return rc;
-+    }
-+
-+    if (GestureSetEventMask(dev, win, client, stuff->mask.mask_len * 4,
-+                            (unsigned char*)(stuff + 1)) != Success)
-+        return BadAlloc;
-+
-+    return Success;
-+}
-+
-+int
-+SProcGestureGetSelectedEvents(ClientPtr client)
-+{
-+    char n;
-+
-+    REQUEST(GestureGetSelectedEventsReq);
-+    swaps(&stuff->length, n);
-+    REQUEST_SIZE_MATCH(GestureGetSelectedEventsReq);
-+    swapl(&stuff->window, n);
-+
-+    return (ProcGestureGetSelectedEvents(client));
-+}
-+
-+int
-+ProcGestureGetSelectedEvents(ClientPtr client)
-+{
-+    int rc, i;
-+    WindowPtr win;
-+    char n;
-+    char *buffer = NULL;
-+    GestureGetSelectedEventsReply reply;
-+    GestureMasks *masks;
-+    GestureClientsPtr others = NULL;
-+    GestureEventMask *evmask = NULL;
-+    DeviceIntPtr dev;
-+
-+    REQUEST(GestureGetSelectedEventsReq);
-+    REQUEST_SIZE_MATCH(GestureGetSelectedEventsReq);
-+
-+    rc = dixLookupWindow(&win, stuff->window, client, DixGetAttrAccess);
-+    if (rc != Success)
-+        return rc;
-+
-+    reply.repType = X_Reply;
-+    reply.RepType = X_GestureGetSelectedEvents;
-+    reply.length = 0;
-+    reply.sequenceNumber = client->sequence;
-+    reply.num_masks = 0;
-+
-+    masks = wGestureMasks(win);
-+    if (masks)
-+    {
-+        for (others = masks->clients; others; others = others->next) {
-+            if (SameClient(others, client)) {
-+                break;
-+            }
-+        }
-+    }
-+
-+    if (!others)
-+    {
-+        WriteReplyToClient(client, sizeof(GestureGetSelectedEventsReply), &reply);
-+        return Success;
-+    }
-+
-+    buffer = calloc(MAXDEVICES, sizeof(GestureEventMask) + pad_to_int32(GESTUREMASKSIZE));
-+    if (!buffer)
-+        return BadAlloc;
-+
-+    evmask = (GestureEventMask*)buffer;
-+    for (i = 0; i < MAXDEVICES; i++)
-+    {
-+        int j;
-+        unsigned char *devmask = others->gestureMask[i];
-+
-+        if (i > 2)
-+        {
-+            rc = dixLookupDevice(&dev, i, client, DixGetAttrAccess);
-+            if (rc != Success)
-+                continue;
-+        }
-+
-+
-+        for (j = GESTUREMASKSIZE - 1; j >= 0; j--)
-+        {
-+            if (devmask[j] != 0)
-+            {
-+                int mask_len = (j + 4)/4; /* j is an index, hence + 4, not + 3 */
-+                evmask->device_id = i;
-+                evmask->mask_len = mask_len;
-+                reply.num_masks++;
-+                reply.length += sizeof(GestureEventMask)/4 + evmask->mask_len;
-+
-+                if (client->swapped)
-+                {
-+                    swaps(&evmask->device_id, n);
-+                    swaps(&evmask->mask_len, n);
-+                }
-+
-+                memcpy(&evmask[1], devmask, j + 1);
-+                evmask = (GestureEventMask*)((char*)evmask +
-+                           sizeof(GestureEventMask) + mask_len * 4);
-+                break;
-+            }
-+        }
-+    }
-+
-+    WriteReplyToClient(client, sizeof(GestureGetSelectedEventsReply), &reply);
-+
-+    if (reply.num_masks)
-+        WriteToClient(client, reply.length * 4, buffer);
-+
-+    free(buffer);
-+    return Success;
-+}
-+
-+void
-+SRepGestureGetSelectedEvents(ClientPtr client,
-+                             int len, GestureGetSelectedEventsReply *rep)
-+{
-+    char n;
-+
-+    swaps(&rep->sequenceNumber, n);
-+    swapl(&rep->length, n);
-+    swaps(&rep->num_masks, n);
-+    WriteToClient(client, len, (char *)rep);
-+}
-+
-+int
-+GestureClientGone(WindowPtr pWin, XID id)
-+{
-+    GestureClientsPtr other, prev;
-+
-+    if (!wGestureMasks(pWin))
-+        return (Success);
-+    prev = 0;
-+    for (other = wGestureMasks(pWin)->clients; other;
-+         other = other->next) {
-+        if (other->resource == id) {
-+            if (prev) {
-+                prev->next = other->next;
-+                free(other);
-+            } else if (!(other->next)) {
-+                free(wGestureMasks(pWin));
-+                pWin->optional->gestureMasks = (GestureMasks *) NULL;
-+                CheckWindowOptionalNeed(pWin);
-+                free(other);
-+            } else {
-+                wGestureMasks(pWin)->clients = other->next;
-+                free(other);
-+            }
-+            RecalculateGestureDeliverableEvents(pWin);
-+            return (Success);
-+        }
-+        prev = other;
-+    }
-+    FatalError("client not on device event list");
-+}
-+
-+void
-+DeleteWindowFromGestureEvents(WindowPtr pWin)
-+{
-+    struct _GestureMasks *gestureMasks;
-+
-+    while ((gestureMasks = wGestureMasks(pWin)) != 0)
-+        FreeResource(gestureMasks->clients->resource, RT_NONE);
-+}
---- /dev/null
-+++ b/gesture/gesture.h
-@@ -0,0 +1,78 @@
-+/*
-+ * Copyright © 2010 Canonical, Ltd.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: Chase Douglas <chase.douglas@canonical.com>
-+ *
-+ */
-+
-+#ifndef _GESTURE_H_
-+#define _GESTURE_H_
-+
-+#ifdef HAVE_DIX_CONFIG_H
-+#include <dix-config.h>
-+#endif
-+
-+#include "inputstr.h"
-+
-+/* This is the last Gesture event supported by the server. If you add
-+ * events to the protocol, the server will not support these events until
-+ * this number here is bumped.
-+ */
-+#define GESTURELASTEVENT     63
-+#define GESTUREMASKSIZE      (GESTURELASTEVENT/8 + 1) /* no of bits for masks */
-+
-+extern _X_EXPORT int GestureReqCode;
-+
-+/**
-+ * Attached to the devPrivates of each client. Specifies the version number as
-+ * supported by the client.
-+ */
-+typedef struct _GestureClientRec {
-+        int major_version;
-+        int minor_version;
-+} GestureClientRec, *GestureClientPtr;
-+
-+typedef struct _GestureClients *GestureClientsPtr;
-+
-+/**
-+ * This struct stores the Gesture event mask for each client.
-+ *
-+ * Each window that has events selected has at least one of these masks. If
-+ * multiple client selected for events on the same window, these masks are in
-+ * a linked list.
-+ */
-+typedef struct _GestureClients {
-+    GestureClientsPtr  next; /**< Pointer to the next mask */
-+    XID                resource; /**< id for putting into resource manager */
-+    /** Gesture event masks. One per device, each bit is a mask of (1 << type) */
-+    unsigned char      gestureMask[EMASKSIZE][GESTUREMASKSIZE];
-+} GestureClients;
-+
-+typedef struct _GestureMasks {
-+    GestureClientsPtr   clients;
-+    unsigned char       mask[GESTUREMASKSIZE];
-+} GestureMasks;
-+
-+extern int GestureClientGone(WindowPtr pWin, XID id);
-+extern void DeleteWindowFromGestureEvents(WindowPtr pWin);
-+
-+#endif /* _GESTURE_H_ */
---- /dev/null
-+++ b/gesture/gestureint.h
-@@ -0,0 +1,49 @@
-+/*
-+ * Copyright © 2010 Canonical, Ltd.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: Chase Douglas <chase.douglas@canonical.com>
-+ *
-+ */
-+
-+#ifndef _GESTUREINT_H_
-+#define _GESTUREINT_H_
-+
-+#include "gestureproto.h"
-+
-+typedef struct {
-+        short   major_version;
-+        short   minor_version;
-+} GestureExtensionVersion;
-+
-+extern DevPrivateKeyRec GestureClientPrivateKeyRec;
-+extern int RT_GESTURECLIENT;
-+
-+extern int ProcGestureQueryVersion(ClientPtr client);
-+extern int ProcGestureSelectEvents(ClientPtr client);
-+extern int ProcGestureGetSelectedEvents(ClientPtr client);
-+extern int SProcGestureQueryVersion(ClientPtr client);
-+extern int SProcGestureSelectEvents(ClientPtr client);
-+extern int SProcGestureGetSelectedEvents(ClientPtr client);
-+extern void SRepGestureQueryVersion(ClientPtr client, int size, GestureQueryVersionReply *rep);
-+extern void SRepGestureGetSelectedEvents(ClientPtr client, int len, GestureGetSelectedEventsReply *rep);
-+
-+#endif /* _GESTUREINT_H_ */
---- /dev/null
-+++ b/gesture/gestureproto.h
-@@ -0,0 +1,132 @@
-+/*
-+ * Copyright © 2010 Canonical, Ltd.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the next
-+ * paragraph) shall be included in all copies or substantial portions of the
-+ * Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: Chase Douglas <chase.douglas@canonical.com>
-+ *
-+ */
-+
-+#ifndef _GESTUREPROTO_H_
-+#define _GESTUREPROTO_H_
-+
-+#include <stdint.h>
-+#include <X11/X.h>
-+
-+#define Window  uint32_t
-+#define Time    uint32_t
-+


Reply to: