Imported Debian patch 1.11.4-0ubuntu3
authorChase Douglas <chase.douglas@ubuntu.com>
Mon, 13 Feb 2012 23:54:04 +0000 (15:54 -0800)
committerDavid Bercovitz <d-bercovitz@ti.com>
Tue, 21 Feb 2012 16:56:22 +0000 (17:56 +0100)
225 files changed:
ChangeLog
Xi/exevents.c
Xi/extinit.c
Xi/grabdev.c
Xi/grabdevb.c
Xi/grabdevk.c
Xi/ungrdev.c
Xi/ungrdevb.c
Xi/ungrdevk.c
Xi/xiallowev.c
Xi/xigrabdev.c
Xi/xipassivegrab.c
Xi/xiproperty.c
Xi/xiquerydevice.c
Xi/xiquerydevice.h
Xi/xiquerypointer.c
Xi/xiselectev.c
Xi/xiwarppointer.c
config/config-backends.h
config/config.c
config/dbus-api [new file with mode: 0644]
config/dbus.c
config/hal.c
config/udev.c
configure.ac
debian/README.source [new file with mode: 0644]
debian/changelog [new file with mode: 0644]
debian/compat [new file with mode: 0644]
debian/control [new file with mode: 0644]
debian/copyright [new file with mode: 0644]
debian/gbp.conf [new file with mode: 0644]
debian/local/10-kbd.conf [new file with mode: 0644]
debian/local/10-mouse.conf [new file with mode: 0644]
debian/local/64-xorg-xkb.rules [new file with mode: 0644]
debian/local/dh_xsf_substvars [new file with mode: 0644]
debian/local/xsf.pm [new file with mode: 0644]
debian/local/xvfb-run [new file with mode: 0644]
debian/local/xvfb-run.1 [new file with mode: 0644]
debian/patches/001_fedora_extramodes.patch [new file with mode: 0644]
debian/patches/02_Add-libnettle-as-option-for-sha1.diff [new file with mode: 0644]
debian/patches/07-xfree86-fix-build-with-xv-disabled.diff [new file with mode: 0644]
debian/patches/100_rethrow_signals.patch [new file with mode: 0644]
debian/patches/105_nvidia_fglrx_autodetect.patch [new file with mode: 0644]
debian/patches/111_armel-drv-fallbacks.patch [new file with mode: 0644]
debian/patches/122_xext_fix_card32_overflow_in_xauth.patch [new file with mode: 0644]
debian/patches/13_debian_add_xkbpath_env_variable.diff [new file with mode: 0644]
debian/patches/15-nouveau.diff [new file with mode: 0644]
debian/patches/157_check_null_modes.patch [new file with mode: 0644]
debian/patches/162_null_crtc_in_rotation.patch [new file with mode: 0644]
debian/patches/165_man_xorg_conf_no_device_ident.patch [new file with mode: 0644]
debian/patches/166_nullptr_xinerama_keyrepeat.patch [new file with mode: 0644]
debian/patches/167_nullptr_xisbread.patch [new file with mode: 0644]
debian/patches/168_glibc_trace_to_stderr.patch [new file with mode: 0644]
debian/patches/172_cwgetbackingpicture_nullptr_check.patch [new file with mode: 0644]
debian/patches/188_default_primary_to_first_busid.patch [new file with mode: 0644]
debian/patches/190_cache-xkbcomp_output_for_fast_start_up.patch [new file with mode: 0644]
debian/patches/191-Xorg-add-an-extra-module-path.patch [new file with mode: 0644]
debian/patches/198_nohwaccess.patch [new file with mode: 0644]
debian/patches/200_randr-null.patch [new file with mode: 0644]
debian/patches/201_report-real-dpi.patch [new file with mode: 0644]
debian/patches/208_switch_on_release.diff [new file with mode: 0644]
debian/patches/209_add_legacy_bgnone_option.patch [new file with mode: 0644]
debian/patches/214_glx_dri_searchdirs.patch [new file with mode: 0644]
debian/patches/217_revert_bgnonevisitwindow.patch [new file with mode: 0644]
debian/patches/219_fedora-pointer-barriers.diff [new file with mode: 0644]
debian/patches/224_return_BadWindow_not_BadMatch.diff [new file with mode: 0644]
debian/patches/225_non-root_config_paths.patch [new file with mode: 0644]
debian/patches/226_fall_back_to_autoconfiguration.patch [new file with mode: 0644]
debian/patches/500_pointer_barrier_thresholds.diff [new file with mode: 0644]
debian/patches/600-Revert-dix-deduplicate-callers-of-DeliverDeviceEvent.patch [new file with mode: 0644]
debian/patches/601-Store-window-pointer-in-touch-listener-record.patch [new file with mode: 0644]
debian/patches/602-Factor-out-TouchEnd-generation-and-delivery.patch [new file with mode: 0644]
debian/patches/603-Export-TouchEventRejected-as-TouchRejected.patch [new file with mode: 0644]
debian/patches/604-Move-AllowTouch-to-dix-touch.c-and-rename-to-TouchAc.patch [new file with mode: 0644]
debian/patches/605-Check-for-proper-window-ID-when-processing-touch-all.patch [new file with mode: 0644]
debian/patches/606-Implement-early-touch-reject.patch [new file with mode: 0644]
debian/patches/607-Implement-touch-early-accept.patch [new file with mode: 0644]
debian/patches/608-dix-fix-an-out-of-memory-crash.patch [new file with mode: 0644]
debian/patches/609-Xi-handle-new-XIAllowEvents-request-in-inputproto-2..patch [new file with mode: 0644]
debian/patches/610-Fix-scrolling.patch [new file with mode: 0644]
debian/patches/611-Fix-touch-punt-crash.patch [new file with mode: 0644]
debian/patches/612-Fix-vcp-touches-corruption.patch [new file with mode: 0644]
debian/patches/613-Keep-vcp-touch-class.patch [new file with mode: 0644]
debian/patches/series [new file with mode: 0644]
debian/rules [new file with mode: 0755]
debian/serverminver [new file with mode: 0644]
debian/watch [new file with mode: 0644]
debian/xdmx-tools.install [new file with mode: 0644]
debian/xdmx.install [new file with mode: 0644]
debian/xnest.install [new file with mode: 0644]
debian/xserver-common.install [new file with mode: 0644]
debian/xserver-xephyr.docs [new file with mode: 0644]
debian/xserver-xephyr.install [new file with mode: 0644]
debian/xserver-xfbdev.install [new file with mode: 0644]
debian/xserver-xorg-core-udeb.install [new file with mode: 0644]
debian/xserver-xorg-core.bug.script [new file with mode: 0644]
debian/xserver-xorg-core.install [new file with mode: 0644]
debian/xserver-xorg-core.lintian-overrides [new file with mode: 0644]
debian/xserver-xorg-core.postrm [new file with mode: 0644]
debian/xserver-xorg-dev.install [new file with mode: 0644]
debian/xvfb.install [new file with mode: 0644]
dix/Makefile.am
dix/devices.c
dix/dispatch.c
dix/enterleave.c
dix/eventconvert.c
dix/events.c
dix/extension.c
dix/getevents.c
dix/grabs.c
dix/inpututils.c
dix/ptrveloc.c
dix/tables.c
dix/touch.c [new file with mode: 0644]
dix/window.c
doc/c-extensions [new file with mode: 0644]
fix-miregion [new file with mode: 0644]
fix-miregion-private [new file with mode: 0644]
fix-patch-whitespace [new file with mode: 0644]
fix-region [new file with mode: 0644]
hw/kdrive/Xkdrive.man [new file with mode: 0644]
hw/kdrive/ephyr/ephyrhostproxy.c [new file with mode: 0644]
hw/kdrive/ephyr/ephyrhostproxy.h [new file with mode: 0644]
hw/kdrive/ephyr/ephyrproxyext.c [new file with mode: 0644]
hw/kdrive/ephyr/ephyrproxyext.h [new file with mode: 0644]
hw/kdrive/fbdev/Xfbdev.man [new file with mode: 0644]
hw/xfree86/common/xf86Config.c
hw/xfree86/common/xf86Cursor.c
hw/xfree86/common/xf86DGA.c
hw/xfree86/common/xf86Init.c
hw/xfree86/common/xf86Module.h
hw/xfree86/common/xf86Option.c
hw/xfree86/common/xf86RandR.c
hw/xfree86/common/xf86Xinput.c
hw/xfree86/common/xf86Xinput.h
hw/xfree86/doc/ddxDesign.xml
hw/xfree86/man/xorg.conf.man
hw/xfree86/modes/xf86RandR12.c
hw/xfree86/xaa/xaalocal.h
hw/xquartz/GL/glcontextmodes.c [new file with mode: 0644]
hw/xquartz/GL/glcontextmodes.h [new file with mode: 0644]
hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/English.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/French.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/French.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/German.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/Italian.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/ar.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/da.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/el.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/el.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/fi.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/he.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/he.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/ko.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/no.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/no.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/pl.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/pt.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/ru.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/ru.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/sk.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/sk.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/sv.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/zh_CN.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist [new file with mode: 0644]
hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib [new file with mode: 0644]
hw/xwin/XWin.exe.manifest [new file with mode: 0644]
hw/xwin/glx/wgl_ext_api.h [new file with mode: 0644]
hw/xwin/winglobals.h [new file with mode: 0644]
hw/xwin/winmonitors.h [new file with mode: 0644]
include/dix.h
include/dixgrabs.h
include/eventconvert.h
include/events.h
include/eventstr.h
include/exevents.h
include/input.h
include/inputstr.h
include/inpututils.h
include/list.h
include/misc.h
include/protocol-versions.h
include/ptrveloc.h
include/scrnintstr.h
include/xserver-properties.h
mi/mi.h
mi/mibstore.c [new file with mode: 0644]
mi/mieq.c
mi/mipointer.c
mi/mipointer.h
mi/misprite.c
mi/mivaltree.c
test/Makefile.am
test/input.c
test/list.c
test/misc.c
test/touch.c [new file with mode: 0644]
test/xfree86.c [new file with mode: 0644]
test/xi2/Makefile.am
test/xi2/protocol-common.c
test/xi2/protocol-eventconvert.c
test/xi2/protocol-xipassivegrabdevice.c
test/xi2/protocol-xiquerydevice.c
test/xi2/protocol-xiselectevents.c
test/xi2/xi2.c [new file with mode: 0644]
xkb/XKM_file_format.txt [new file with mode: 0644]
xkb/xkbAccessX.c
xkb/xkbActions.c

index 29c791133b06619300df6d2b977364e213989fb0..a3980c30e9376e5a68352a49f08b3495a65cd569 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,59 +1,94 @@
-commit e597f0119cd69b6d9edf86d06d941468f90d8e6d
-Author: Jeremy Huddleston <jeremyhu@apple.com>
-Date:   Fri Jan 27 21:07:17 2012 -0800
+commit 03e15dc10aa7cec2d1db294beb0c006ea0e24e25
+Author: Chase Douglas <chase.douglas@canonical.com>
+Date:   Wed Jan 18 19:09:21 2012 -0800
 
-    configure.ac: 1.11.4
+    Don't set X and Y valuators for indirect touch events
     
-    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    For expediency, it made sense to always have the X and Y axes set for
+    direct touch device event propagation. The last X and Y values are
+    stored internally. However, indirect device touch event propagation
+    does not depend on the touch's X and Y values. Thus, we don't need to
+    set the values for every indirect touch event.
+    
+    On top of this, the previous X and Y values aren't stored for indirect
+    touches, so without this change the axes get erroneously set to 0.
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit e1085a0da0b9299f48b3dc41dee5e33bf022bea5)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 6c491463ee7a3637c8aae7ddae9625b36b792078
-Author: Jeremy Huddleston <jeremyhu@apple.com>
-Date:   Fri Jan 20 23:54:58 2012 -0800
+commit 17e9669a686c5b943b6e22ed740c2e8ffcb39c27
+Author: Daniel Stone <daniel@fooishbar.org>
+Date:   Thu Jan 19 22:40:32 2012 +1100
 
-    1.11.3.902 (1.11.4 RC2)
+    UngrabAllDevices: Don't kill clients if not told to
     
-    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    The kill_client argument to UngrabAllClients specifies if we want to
+    kill the client holding the grab or just deactivate the grab.
+    
+    Signed-off-by: Daniel Stone <daniel@fooishbar.org>
+    Reported-by: Julien Cristau <jcristau@debian.org>
+    Reviewed-by: Cyril Brulebois <kibi@debian.org>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit 5201310559fe8708ba8278bdef77cdc1673fff71)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit b747a91485184649c05aba6fa10734f70e926032
-Author: Jeremy Huddleston <jeremyhu@apple.com>
-Date:   Wed Jan 18 11:47:21 2012 -0800
+commit 36d20ea69467e0a873a457078c5032d7447ac984
+Author: Chase Douglas <chase.douglas@canonical.com>
+Date:   Wed Jan 18 18:04:14 2012 -0800
 
-    XQuartz: Bump bundle version to 2.7.1
+    Only update pointer motion data for pointer emulated touch events
     
-    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit 9b1e18f42a05a79d9ebec372a37b47442e397ca9)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit a1ed67fa0551ee2b39d002d3b786a2017b37c7ac
-Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date:   Fri Jan 6 13:20:45 2012 +1000
+commit b6e21d8b973f46fe70517d37385342b5e2f47d22
+Author: Chase Douglas <chase.douglas@canonical.com>
+Date:   Wed Jan 18 18:04:13 2012 -0800
 
-    render: don't bother with animated cursors on floating slaves (#39989)
+    Only scale direct device touch coordinates
     
-    X.Org Bug 39989 <http://bugs.freedesktop.org/show_bug.cgi?id=39989>
+    Indirect touch devices provide valuator values in pure device
+    coordinates. They also don't need to be fixed up for screen crossings.
     
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
     Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
-    (cherry picked from commit bbb6b8c834e0e1491ca14403b5d0840dd14380d3)
+    (cherry picked from commit f00e5b02f5d9928cd88961e761da91b5faff1b32)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit f89c39e6c9e20ffc3c1ae228ee601c2ab9007ff4
+commit ebf3e90cbb271b00dbe767ce848a9687390ec887
 Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date:   Mon Jan 9 15:04:10 2012 +1000
+Date:   Mon Jan 16 12:53:39 2012 +1000
 
-    dix: Update pointer limits for floating devices too (#43635)
+    include: Fix comment typo
     
-    When the screen is restructured, the pointer limits need to be reset for
-    floating slave devices as well, not just for master pointers. Only skip
-    devices that don't have a cursor (attached slaves and keyboard)
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit 24dc0389da3970e83e4908039957567e55f9ea05)
     
-    Bug reproducer: float an absolute slave device, rotate the screen - the
-    device is now confined to a section of the screen only.
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 1fbd9c6f967484485f1e8b333f21a1dac0da7680
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date:   Wed Jan 18 11:47:21 2012 -0800
+
+    XQuartz: Bump bundle version to 2.7.1
     
-    X.Org Bug 43635 <http://bugs.freedesktop.org/show_bug.cgi?id=43635>
+    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    (cherry picked from commit b747a91485184649c05aba6fa10734f70e926032)
     
-    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
-    (cherry picked from commit 35bd77e9d0701daae87d681900d749604fc6471f)
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit dea9377a257a402b2c7fe4a96c958d951a7d4579
+commit 800d82ff45f150aa6680d8c3a0172a851d8a55ab
 Author: Zhigang Gong <zhigang.gong@linux.intel.com>
 Date:   Wed Jan 4 07:01:19 2012 +0000
 
@@ -68,8 +103,11 @@ Date:   Wed Jan 4 07:01:19 2012 +0000
     Reviewed-by: Adam Jackson <ajax@redhat.com>
     Signed-off-by: Keith Packard <keithp@keithp.com>
     (cherry picked from commit f4956faab9ccf9aba6cf9603f4489f5dad19a347)
+    (cherry picked from commit dea9377a257a402b2c7fe4a96c958d951a7d4579)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit d2db5100b1bafeeea8c1febd390631c8f8abb094
+commit 8f40cad6e07065691799b54da37204747cb428fa
 Author: Alan Coopersmith <alan.coopersmith@oracle.com>
 Date:   Fri Oct 28 21:29:50 2011 -0700
 
@@ -82,8 +120,11 @@ Date:   Fri Oct 28 21:29:50 2011 -0700
     Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
     Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
     (cherry picked from commit 780133f9ae7fada462714b47e79d26075bbd9abe)
+    (cherry picked from commit d2db5100b1bafeeea8c1febd390631c8f8abb094)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 5b28bcb340e279e7f4e76617e86b439092367690
+commit 2538c43541a48bddc654eea645bd3408e741a49a
 Author: Adam Jackson <ajax@redhat.com>
 Date:   Tue Dec 13 21:23:12 2011 -0500
 
@@ -103,8 +144,11 @@ Date:   Tue Dec 13 21:23:12 2011 -0500
     Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
     Signed-off-by: Adam Jackson <ajax@redhat.com>
     (cherry picked from commit 8f9bdfd293ad8e45755efe8d764b4dcc2a724f51)
+    (cherry picked from commit 5b28bcb340e279e7f4e76617e86b439092367690)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit e1ea93fec93b13d18df4451210aaaf322b769b6a
+commit d0c6ccbfb61eb4b0e5c83b8ecf5ebcf3a4e90ba7
 Author: Adam Jackson <ajax@redhat.com>
 Date:   Tue Dec 13 20:23:40 2011 -0500
 
@@ -123,8 +167,11 @@ Date:   Tue Dec 13 20:23:40 2011 -0500
     Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
     Signed-off-by: Adam Jackson <ajax@redhat.com>
     (cherry picked from commit 83a98543b58c661a22574a6f8d8f9d777c0955b8)
+    (cherry picked from commit e1ea93fec93b13d18df4451210aaaf322b769b6a)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 9eaa0b5c89f645c50ea90e07e8b49ebacf4349a0
+commit 33af6a8d422a6ba95883e448dbfe6fb8ff4ce2ec
 Author: Adam Jackson <ajax@redhat.com>
 Date:   Tue Dec 13 21:00:05 2011 -0500
 
@@ -144,8 +191,11 @@ Date:   Tue Dec 13 21:00:05 2011 -0500
     Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
     Signed-off-by: Adam Jackson <ajax@redhat.com>
     (cherry picked from commit 11977fab546da35d579ebe285e3c26864007805e)
+    (cherry picked from commit 9eaa0b5c89f645c50ea90e07e8b49ebacf4349a0)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit a3b6ecc893e17028cfbe16d8d7981c9037fc0766
+commit eecdd1c758c3a610038384308e0f9ae558cc92fc
 Author: Peter Hutterer <peter.hutterer@who-t.net>
 Date:   Tue Jan 3 10:45:45 2012 +1000
 
@@ -160,8 +210,11 @@ Date:   Tue Jan 3 10:45:45 2012 +1000
     Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
     Reviewed-by: Cyril Brulebois <kibi@debian.org>
     (cherry picked from commit 75953ccb9e9e5f1dbbaa44c714716a0049e22aae)
+    (cherry picked from commit a3b6ecc893e17028cfbe16d8d7981c9037fc0766)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 4a339afc586d55a9a248b893f007219d79c72600
+commit f17bd8187cbce7f848c9613c51d0fcfe86c49489
 Author: Julien Cristau <jcristau@debian.org>
 Date:   Fri Dec 30 20:41:25 2011 +0100
 
@@ -177,8 +230,11 @@ Date:   Fri Dec 30 20:41:25 2011 +0100
     Reviewed-by: Cyril Brulebois <kibi@debian.org>
     Signed-off-by: Julien Cristau <jcristau@debian.org>
     (cherry picked from commit 6269977c91071e0ea16ca5b4b8e15fd6db0b6fcf)
+    (cherry picked from commit 4a339afc586d55a9a248b893f007219d79c72600)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 9a4be7e99f0e832df87b8e7fb548793dd4b52717
+commit 70130bf9e5feaefe9807a47d12c520b91baa5dca
 Author: Matthieu Herrb <matthieu.herrb@laas.fr>
 Date:   Mon Jan 2 13:23:59 2012 +0000
 
@@ -190,8 +246,11 @@ Date:   Mon Jan 2 13:23:59 2012 +0000
     Reviewed-by: Adam Jackson <ajax@redhat.com>
     Signed-off-by: Keith Packard <keithp@keithp.com>
     (cherry picked from commit 6d6d4cb6043905d850834946e9bfc526ed5a9ef7)
+    (cherry picked from commit 9a4be7e99f0e832df87b8e7fb548793dd4b52717)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 8046717d720c1bbbf02ba986622bc96c6b52a36c
+commit 364540f76e0c80ef26f301785214e6a9cb0e5a04
 Author: Alan Coopersmith <alan.coopersmith@oracle.com>
 Date:   Sat Dec 24 10:00:56 2011 -0800
 
@@ -209,268 +268,2130 @@ Date:   Sat Dec 24 10:00:56 2011 -0800
     Reviewed-by: Rami Ylimäki <rami.ylimaki@vincit.fi>
     Signed-off-by: Keith Packard <keithp@keithp.com>
     (cherry picked from commit cfc4c3d7fa8bd4da4c08b2ab8e6f85435f75353a)
+    (cherry picked from commit 8046717d720c1bbbf02ba986622bc96c6b52a36c)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit cea9f9f273cb525cb5daa2d2819d3f635582cb24
-Author: Jeremy Huddleston <jeremyhu@apple.com>
-Date:   Fri Jan 6 22:01:03 2012 -0800
+commit 2c973d2c078e8af01a06334a4a2ee8705e369bf2
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Nov 9 15:31:10 2011 +1000
 
-    configure.ac: 1.11.3.901 (1.11.4 RC1)
+    Xext: don't swap CARD8 in SProcSELinuxQueryVersion
     
-    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    xselinux_ext.c: In function 'SELinuxSendItemsToClient':
+    xselinux_ext.c:340:16: warning: unused variable 'n' [-Wunused-variable]
+    xselinux_ext.c: In function 'SProcSELinuxQueryVersion':
+    xselinux_ext.c:532:62: error: call to 'wrong_size' declared with attribute
+    error: wrong sized variable passed to swap
+    xselinux_ext.c:533:62: error: call to 'wrong_size' declared with attribute
+    error: wrong sized variable passed to swap
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Julien Cristau <jcristau@debian.org>
+    (cherry picked from commit bb4aa1f263ad38c175bfda3b7e6c325260ce3f28)
+    
+    Conflicts:
+    
+       Xext/xselinux_ext.c
+    (cherry picked from commit cf296f2eeffe4b438e9378268f84a1f63c555e52)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit b15be8547d4d204f3e498f52d86713a76766e871
-Author: Jeremy Huddleston <jeremyhu@apple.com>
-Date:   Fri Jan 6 22:12:14 2012 -0800
+commit 7014cf0a6497f122bfa2b0e6e7794dc3e30c0c6f
+Author: Chase Douglas <chase.douglas@canonical.com>
+Date:   Wed Jan 11 07:38:12 2012 -0800
 
-    Xi: Fix mishandled git merge
+    Use event time instead of CurrentTime for grab times
     
-    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    When {XI,X,}AllowEvents is called, the timestamp is compared against the
+    grab time to ensure that the request pertains to the current grab in the
+    server. While many clients may use CurrentTime (client-side), the
+    timestamp of the event causing the grab is also valid.
+    
+    This change ensures that the server's notion of the grab time is the
+    time of the event that activated the grab rather than the time that the
+    grab is actually activated.
+    
+    This bug was exposed through nested touch then pointer grabs.
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit f9e6858d5c10be6a8439c0f18bfb2325fa0ee070)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 82e0ae042379181eb143431e1413084432a17079
-Merge: f9b00c2 4e4bb31
-Author: Jeremy Huddleston <jeremyhu@apple.com>
-Date:   Mon Jan 2 20:58:22 2012 -0500
+commit 4989bff6bfe2c0409127a523e56f177b3141b8d1
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Jan 6 13:20:45 2012 +1000
 
-    Merge remote-tracking branch 'whot/server-1.11-branch' into server-1.11-branch
+    render: don't bother with animated cursors on floating slaves (#39989)
+    
+    X.Org Bug 39989 <http://bugs.freedesktop.org/show_bug.cgi?id=39989>
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+    (cherry picked from commit bbb6b8c834e0e1491ca14403b5d0840dd14380d3)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 4e4bb319a4f9510277557f65676948cd1db10e93
-Author: Carlos Garnacho <carlosg@gnome.org>
-Date:   Tue Dec 13 15:41:23 2011 +0100
+commit b5f71a5f124eb44eab08f68d3c8ef946df05bb45
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Jan 9 15:04:10 2012 +1000
 
-    Xi: assign correct grab_mode/other_device_mode in XI2 passive grabs
+    dix: Update pointer limits for floating devices too (#43635)
     
-    CreateGrab() expects the keyboard mode to be stored in grab_mode, and the
-    pointer mode in other_device_mode, so respect this in passive XI2 grabs,
-    and switch modes if needed.
+    When the screen is restructured, the pointer limits need to be reset for
+    floating slave devices as well, not just for master pointers. Only skip
+    devices that don't have a cursor (attached slaves and keyboard)
+    
+    Bug reproducer: float an absolute slave device, rotate the screen - the
+    device is now confined to a section of the screen only.
+    
+    X.Org Bug 43635 <http://bugs.freedesktop.org/show_bug.cgi?id=43635>
     
-    Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
     Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
     Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
-    (cherry picked from commit 5b169cb695bd450d7f64e3800f00c9237ee67f96)
+    (cherry picked from commit 35bd77e9d0701daae87d681900d749604fc6471f)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 8c73f6bcbdc04380cc41d9f6dc7e849c7c4f9298
-Author: Alan Coopersmith <alan.coopersmith@oracle.com>
-Date:   Thu Dec 8 21:52:07 2011 -0800
+commit 0c292448ebcfcc6e5072efada55f8135b60b7795
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Dec 22 09:35:51 2011 -0800
 
-    Change disable_clientpointer return type to void
+    test/xi2: Fix infinite loop in test_convert_XITouchOwnershipEvent
     
-    It doesn't return anything, nor does it's caller expect it to.
+    The touchid test was using a loop like:
     
-    Fixes Solaris Studio compiler error:
-    "xichangehierarchy.c", line 214: Function has no return statement : disable_clientpointer
+       for(i = 1; i < 0xffffffff; i <<= 1)
+    
+    When 'i' is a 32-bit variable, this infinite loops as it goes from
+    0x80000000 to 0. 'i' is declared as 'long', which is 32-bit in 32-bit mode.
     
-    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
-    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
     Signed-off-by: Keith Packard <keithp@keithp.com>
-    (cherry picked from commit 372a6f10dc2d74d2d179e8b92449e9b8636a99ef)
+    (cherry picked from commit e7df42ab68e30588a5e32ed543b0711821daf009)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit ae4272a5742119b10074a542d0dcd4c493cb83e4
+commit 738549e470ea1ae792840bbc50766a017de23cff
 Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date:   Wed Nov 30 09:06:06 2011 +1000
+Date:   Thu Dec 22 10:00:15 2011 +1000
 
-    xfixes: don't dereference a NULL cursor
+    test: fix grab mode value tests for new XIGrabModeTouch
     
-    If the new cursor is the NULL cursor, don't dereference it and use zeros
-    instead.
+    This test checks that last-valid-mode + 1 returns a BadValue. With the
+    addition of XIGrabModeTouch, that value has changed - sync it up again.
     
     Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
-    (cherry picked from commit 1ab50be938524dcd4a9e56d27e3b96a27c2db2c0)
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit f75bdf7fbe757f4603e39139acc3c90538a45e15)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 20efd3c15829d8fbb3610d5af41b67a627e63d21
+commit bc282a9a1492137b44486e39f08b2e4cbc34f92b
 Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date:   Tue Nov 29 16:15:37 2011 +1000
+Date:   Wed Dec 21 14:45:27 2011 +1000
 
-    Xi: when removing a device, reset ClientPointers where needed
+    Xi: only activate the device grab if we don't already have one
     
-    if a client had the to-be-removed device as ClientPointer, reset to NULL.
+    If the device is already grabbed, don't activate the passive grab, it screws
+    with our event masks. Just deliver to the grabbing client instead.
     
-    Fixes #43165
+    Reported-by: Carlos Garnacho <carlosg@gnome.org>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 2bb282cd45cb8149b39d72397ef5bbcfebca11d2)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 3fc68a253e8f45bedeebf6d6a5e885cc720b68cf
+Author: Carlos Garnacho <carlosg@gnome.org>
+Date:   Wed Dec 21 01:08:40 2011 +0100
+
+    dix: fix xi2 mask/filter when delivering grabbed events
     
+    Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
     Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
-    (cherry picked from commit d2ebbcdaf6b13d70eee704b1764ff349e1be22a0)
+    (cherry picked from commit 475ef5cc8339fac3696fe654ef683f92f0b0cc2c)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit cf296f2eeffe4b438e9378268f84a1f63c555e52
+commit a4d462fa2cdec99ae4444be843cd2eca8b7598ca
 Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date:   Wed Nov 9 15:31:10 2011 +1000
+Date:   Mon Dec 19 09:08:05 2011 +1000
 
-    Xext: don't swap CARD8 in SProcSELinuxQueryVersion
-    
-    xselinux_ext.c: In function 'SELinuxSendItemsToClient':
-    xselinux_ext.c:340:16: warning: unused variable 'n' [-Wunused-variable]
-    xselinux_ext.c: In function 'SProcSELinuxQueryVersion':
-    xselinux_ext.c:532:62: error: call to 'wrong_size' declared with attribute
-    error: wrong sized variable passed to swap
-    xselinux_ext.c:533:62: error: call to 'wrong_size' declared with attribute
-    error: wrong sized variable passed to swap
+    test: add a basic test for ownership event values
     
     Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-    Reviewed-by: Julien Cristau <jcristau@debian.org>
-    (cherry picked from commit bb4aa1f263ad38c175bfda3b7e6c325260ce3f28)
+    (cherry picked from commit 4551510f752624592f9201f73db89ac1325a234a)
     
-    Conflicts:
+    Backported swap macros for test_values_XITouchOwnershipEvent.
     
-       Xext/xselinux_ext.c
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 4b386610243b1a30db7e4cdb89cb43012198407d
+commit 4f18583067c194b6e484405752a85708e2a1a00b
 Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date:   Fri Dec 16 12:41:08 2011 +1000
+Date:   Mon Dec 19 08:31:37 2011 +1000
 
-    dix: button state must show the logical buttons, not physical buttons
-    
-    If the device is mapped 3 2 1, a click on physical button 1 sends a button 3
-    press, but the state was set for button 1. Fix this, the state must be set
-    for that button's logical mapping.
+    test: drop printfs from protocol-eventconvert.c
     
-    https://bugzilla.gnome.org/show_bug.cgi?id=655928
+    The test outputs are noisy enough, no need having these here too.
     
     Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-    (cherry picked from commit 9567d21e85b99febe805263a4d93b15fd1f7ab42)
-    
-    Conflicts:
+    (cherry picked from commit 0c661dc478b4b436a3e61066d31bc510c7a08456)
     
-       dix/inpututils.c
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit f9b00c2aba496fe470c24d0f8d3e3d0e3b05aa65
+commit e3a9114e1e31378e96eaacf660e665ed6e50c428
 Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date:   Tue Nov 29 16:15:37 2011 +1000
+Date:   Wed Dec 21 11:11:48 2011 +1000
 
-    Xi: when removing a device, reset ClientPointers where needed
+    dix: remove requirement for client_id be the first element
     
-    if a client had the to-be-removed device as ClientPointer, reset to NULL.
-    
-    Fixes #43165
+    Leftover code from an earlier version of GetTouchEvents.
     
     Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
-    (cherry picked from commit d2ebbcdaf6b13d70eee704b1764ff349e1be22a0)
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 8080d785b2c1e5791312ed0975efd1b8aea58d98)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit e4984b3023351b5fcc506f4a196ad699db8b0535
+commit 717ac30a73beac953c6aa5d94ca8df1bce7bb97d
 Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date:   Wed Nov 30 09:06:06 2011 +1000
+Date:   Thu Dec 15 07:59:06 2011 +1000
 
-    xfixes: don't dereference a NULL cursor
-    
-    If the new cursor is the NULL cursor, don't dereference it and use zeros
-    instead.
+    mi: handle screen switching on pointer emulated touch events
     
     Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
-    (cherry picked from commit 1ab50be938524dcd4a9e56d27e3b96a27c2db2c0)
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 8a32c39c00789c16006de61112627722ce548be1)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 625d1088192a9ad972c20fbdbcb4bb9fda979157
+commit 0f9cfff4971ba9f2559312e4ab75fe576aec4b1c
 Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date:   Fri Dec 16 09:15:25 2011 -0500
+Date:   Thu Dec 15 07:57:47 2011 +1000
 
-    dmx: force -fno-strict-aliasing for xinput example
+    mi: split move to new screen logic to a helper function
     
-    Compiler warning:
-    xinput.c:272: warning: dereferencing pointer 'e' does break strict-aliasing
-    rules
+    No functional changes.
     
-    The code itself is the usual XInput client-side code:
-            XEvent event;
-            XDeviceMotionEvent *e = (XDeviceMotionEvent *)&event;
-            XNextEvent(display, &event);
-            printf("%d\n", e->type);
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 48547068b115b1f5e5f46a70110454a2175fb9a4)
     
-    Since XDeviceMotionEvent is not guaranteed the same size as XEvent, clients
-    must use pointer aliasing as above when using the XNextEvent API. Disable
-    strict aliasing for this example.
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 73d9c55a86bf1361fcaabb8780fd01ddf5fc5e57
+Author: Daniel Stone <daniel@fooishbar.org>
+Date:   Thu Dec 15 07:52:28 2011 +1000
+
+    dix: Remove touch grabs if the grab disappears
     
-    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
-    Reviewed-by: Gaetan Nadon <memsize@videotron.ca>
     Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
-    Signed-off-by: Keith Packard <keithp@keithp.com>
-    (cherry picked from commit 3aca8199405cff5097ee5813605ec78b5ae44a43)
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 3b1e2035cc4740711360c845cfcdff07f7b60558)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 53e347b22bb79043243e25891cd7d6f374a8aa23
-Author: Keith Packard <keithp@keithp.com>
-Date:   Tue Nov 8 10:13:15 2011 -0800
+commit dcb3ee2ba3f533f2cabbce9c0c94b7acde4d5fa3
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Dec 15 07:48:49 2011 +1000
 
-    Save major/minor opcodes in ClientRec for RecordAReply
+    dix: hook up passive grabs and pointer emulated passive grabs
     
-    The record extension needs the major and minor opcodes in the reply
-    hook, but the request buffer may have been freed by the time the hook
-    is invoked. Saving the request major and minor codes as the request is
-    executed avoids fetching from the defunct request buffer.
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit cd3de8324e8908955a2e4be3000c8ffee8684c68)
     
-    This patch also eliminates the public MinorOpcodeOfRequest function,
-    inlining it into Dispatch. Usages of that function have been replaced
-    with direct access to the new ClientRec field.
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit d87933d11530e056181bc13f0ee6724149c3d78c
+Author: Carlos Garnacho <carlosg@gnome.org>
+Date:   Tue Dec 13 15:41:23 2011 +0100
+
+    Xi: assign correct grab_mode/other_device_mode in XI2 passive grabs
     
-    Signed-off-by: Keith Packard <keithp@keithp.com>
-    Reviewed-by: Jamey Sharp <jamey@minilop.net>
-    (cherry picked from commit fb22a408c69a84f81905147de9e82cf66ffb6eb2)
+    CreateGrab() expects the keyboard mode to be stored in grab_mode, and the
+    pointer mode in other_device_mode, so respect this in passive XI2 grabs,
+    and switch modes if needed.
+    
+    Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 5b169cb695bd450d7f64e3800f00c9237ee67f96)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 55e1e8691f2aa5f375a9c79bb469a3ad44ccd139
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Dec 15 07:42:12 2011 +1000
+
+    Xi: add the hooks for passive touch grabs
+    
+    Co-authored-by: Daniel Stone <daniel@fooishbar.org>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 4469430b109fa2da7ba3d2fadf66eca78b7156a0)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 118d0e5841ea025f573df777491ff07abb3a616b
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Dec 15 07:21:38 2011 +1000
+
+    Xi: handle grab accept/reject requests
+    
+    Consists mostly of generating an ownership event and processing it.
+    
+    Co-authored-by: Daniel Stone <daniel@fooishbar.org>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit bb0af002dc9ad5b464dc6793aedb6d1ff65d001d)
     
     Conflicts:
     
-       include/extension.h
+       Xi/xiallowev.c
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit b736f8c92bae7773ff6e1fca886f9ccc50156488
-Author: Julien Cristau <jcristau@debian.org>
-Date:   Sat Nov 5 13:00:07 2011 +0100
+commit 9507e4e1f1562c37b1877f921e288124393d7a6e
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Dec 20 16:34:43 2011 -0800
 
-    Fix ShmPutImage for XYBitmap
+    Xi: hook up touch ownership handling
     
-    We can't call CopyArea in that case because the image has depth 1, which
-    might not match the target drawable, so we might overrun the shm
-    segment.  Commit 11817a881cb93a89788105d1e575a468f2a8d27c apparently
-    fixed a similar bug for XYPixmap, but missed the bitmap case.
+    Ownership changes don't get processed directly when they happen, instead the
+    DIX submits an ownership event which goes through ProcessTouchEvents and
+    ProcessTouchOwnershipEvents.
+    Then on the required events are generated and sent to clients.
     
-    Fixes: http://bugs.debian.org/629611
+    Co-authored-by: Daniel Stone <daniel@fooishbar.org>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 209b3d613a7bed126c81daedbad6461e4391e9e6)
     
-    Thanks to Alan Curry for diagnosing this and providing a test case.
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 151ecb96cbb5747aa9a58dbf0d5c5afaae553025
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Dec 20 16:33:33 2011 -0800
+
+    Xi: hook up pointer emulation for emulating touches
     
-    Reported-and-tested-by: Alan Curry <pacman@kosh.dhis.org>
-    Reviewed-by: Peter Harris <pharris@opentext.com>
-    Signed-off-by: Julien Cristau <jcristau@debian.org>
-    (cherry picked from commit 08ec4da6a7617637914bee1636858474213cf39d)
+    Includes a hack for implicit grab activation, because integrating this
+    requires a larger rewrite and I'm not sleeping enough as it is.
+    Right now, we deliver the event and check before/after if there is an
+    implicit grab on. If one activated, then store the event in the grab and
+    switch the listener type to a grab listener.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 1894468c2b9788efa70ef4fb5fc911711402f3a7)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit b2a4c09507b267495ea5e4c2e05373b323c80edf
-Author: Jeremy Huddleston <jeremyhu@apple.com>
-Date:   Sat Dec 17 12:56:59 2011 -0800
+commit 4ef22a181992b7348757f84a49909a7f6a5d12e0
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 17:04:38 2011 +1000
 
-    kdrive/linux: Fix compilation with -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast
+    dix: add touch to pointer event conversion helper
     
-    Reported-by: Arkadiusz Miśkiewicz <arekm@maven.pl>
-    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
-    Reviewed-by: Jamey Sharp <jamey@minilop.net>
-    (cherry picked from commit 1deede3c48d5ac91f50774c79f02afc6e036614e)
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 753c4dca1e42035e29fb21458a746e484ed93ca3)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit beaa7ad2ec45811e16722283a8b557a08e91ef18
-Author: Jeremy Huddleston <jeremyhu@apple.com>
-Date:   Sat Dec 17 12:25:26 2011 -0800
+commit b3af3cbbd525d432f294c1ca2e0c458dd5c41a6d
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 17:02:30 2011 +1000
 
-    configure.ac: Make Xephyr dependency error message more informative
+    dix: add real_event parameter to ActivatePassiveGrab
     
-    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
-    Reviewed-by: Jamey Sharp <jamey@minilop.net>
-    (cherry picked from commit d0170d54c71fc761b8f1ae7a0e555dc2ca23cf9c)
+    For touch events with pointer emulation, the event that triggers the grab
+    (the pointer event) is not the same as the actual event (the touch event).
+    For replaying, we need to store the real event then.
+    
+    No effective changes at this point, for the current caller event and
+    real_event are identical.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit c3843f5498a849920ab68cca3557411ad8ab3454)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit 41524dd61020f2a446ec54643fa17aa791338cac
-Author: Jeremy Huddleston <jeremyhu@apple.com>
-Date:   Fri Dec 16 17:47:46 2011 -0800
+commit a9b4de42cce42a4185365b449c95b7569b0f45db
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Dec 20 16:32:52 2011 -0800
 
-    configure.ac: 1.11.3
+    Process and deliver touch events
     
-    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Does not include pointer emulation handling.
+    Does include partial ownership handling but not the actual processing of
+    ownership events.
+    
+    Note: this commit is a retroactive commit extracted from a series of ~50
+    commits and may thus appear a bit more complicated than what you'd write out
+    from scratch.
+    
+    Pointer processing tree is roughly:
+    - ProcessOtherEvents
+      - ProcessTouchEvents
+        - DeliverTouchEvents
+          - DeliverTouchBeginEvent|DeliverTouchEndEvent|...
+            - DeliverOneTouchEvent
+    
+    Also hooks up the event history playing to the right function now.
+    
+    Co-authored-by: Daniel Stone <daniel@fooishbar.org>
+    Co-authored-by: Chase Douglas <chase.douglas@canonical.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit e389a19a730055d4550ff708da83c78099a516fd)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
-commit ee66474eb2009118a41539c6773e514a09d27e4d
-Author: Gaetan Nadon <memsize@videotron.ca>
-Date:   Fri Dec 9 07:45:02 2011 -0500
+commit 0951b7cc0c573a06600a8b0cb8a8cb423a471d77
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Dec 15 07:53:19 2011 +1000
 
-    dmx: fix distcheck failure, missing compsize.h in Makefile.am
+    dix: set core and button state based on the touch state
     
-    which was added in commit:
-    dmx: Build fix for -Werror=implicit-function-declaration
+    If a pointer-emulating touch caused a button to be logically down, set that
+    state in the input events.
     
-    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
-    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
-    Signed-off-by: Keith Packard <keithp@keithp.com>
-    (cherry picked from commit 2c1d0a539c0fb1860ac89a00d1fb609f1959e1b6)
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 634b0da9a83076d0e9e0fc44dc5dc77b0c368bc1)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 90814f2ea800c5fa3f7121d4185e47b406565119
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 16:33:05 2011 +1000
+
+    Xi: make UpdateDeviceState aware of touch events
+    
+    Update the logical button state for pointer-emulating events. Button state
+    must be kept separate from the ButtonClassRec to avoid clearing the button
+    state on a touch end if there is a physical button still down.
+    
+    And obviously don't change the button state if we're currently replaying the
+    event history for some client.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit dbfd7b37a0ba21899d8ebb7e0b324301bd466c49)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 2636f32908aeefeabade64ba1b81b8430cfd6653
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 16:30:05 2011 +1000
+
+    dix: add TouchResourceIsOwner helper function
+    
+    The first listener in the sequence is the owner of the touch sequence.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 593c3e2eb3da5c5fb957b68c8025dfdbe1139639)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 83ea5e519c7e233409bcc9a210d7ce74518138e6
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 16:24:17 2011 +1000
+
+    dix: add helper functions for adding/removing touch listeners
+    
+    The DIX will call TouchSetupListeners once for a new touch. After that
+    the listener list remains static, with listeners only dropping out when they
+    either reject the grab or disappear.
+    
+    Exception: if grabs activate they are prefixed to the listeners.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 5d0260cc986e8c1f0907870b851d47fd73bb1b7d)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit dbd4702466dfe0c7b6d5be3942294708dfa0df21
+Author: Chase Douglas <chase.douglas@canonical.com>
+Date:   Wed Dec 14 16:26:04 2011 +1000
+
+    dix: add TouchGetPointerEventType helper function
+    
+    Returns the respective pointer event type for a given touch event type.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 6a68f97ce6704dd2ff2a50f91acd2da72c9995bd)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 125fbadadcd8dbc3dfd88a1bf7f610a5baf7a975
+Author: Daniel Stone <daniel@fooishbar.org>
+Date:   Wed Dec 14 16:53:04 2011 +1000
+
+    dix: when a window disappears, remove it from the touch sprite trace
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 8e58ce73c8b79cb86e890369d0216cdd850c52a5)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit a02a40fd7ac661737d895dc1852c74a8a84e5b26
+Author: Daniel Stone <daniel@fooishbar.org>
+Date:   Wed Dec 14 16:03:01 2011 +1000
+
+    dix: add helper functions to build up/verify the sprite trace
+    
+    Touch events' sprite trace stays the same for the duration of the touch
+    sequence.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit c18a173cf5f53778356c5e8f25ab132956f8c27d)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 6ca95a9524b0ebd47eab7e0b8b016014ff65ed2f
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 15:56:05 2011 +1000
+
+    dix: add touch event history helper functions
+    
+    If touch client has not registered for ownership events and a grab above
+    that client is rejected, the client needs to receive the complete event
+    history.
+    
+    The history currently doesn't really do fancy overflow handling. We assume
+    that the first TOUCH_HISTORY_SIZE events are the important ones and anything
+    after that is dropped. If that is a problem, fix the client that takes > 100
+    event to decide whether to accept or reject.
+    
+    Events marked with TOUCH_CLIENT_ID or TOUCH_REPLAYING must not be stored in
+    the history, they are events created by the DIX to comply with the protocol.
+    Any such event should already be in the history anyway.
+    
+    A fixme in this patch: we don't have a function to actually deliver the
+    event yet.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 40475261eacabb79a824db1138407a9d0f9fe37f)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 697dfd87140dac9c30d137631869287036bc938c
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Oct 26 09:08:17 2011 +1000
+
+    Support XI 2.2 officially
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit b274c472a5ad700aea5fe651d677e8cb34ffc976)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 88280f374162c8cca3e494226826cbcc27cdec86
+Author: Daniel Stone <daniel@fooishbar.org>
+Date:   Wed Dec 14 15:45:19 2011 +1000
+
+    Xi: allow selecting for touch events
+    
+    Selecting for any of XI_TouchBegin/Update/End/Ownership requires the three
+    bits for begin/update/end to be set.
+    
+    Only one client at a time may select for XI_TouchBegin event
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit d2af968cb65873780a6e61342d5d3c23b9654e2a)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 4bcad5fc184ef3c22a7e0f417dc87ccb453d0791
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 16:45:04 2011 +1000
+
+    dix: handle DIX-submitted touch events
+    
+    The DIX needs to submit touch events for e.g. TouchEnd after an
+    acceptance/rejection. These have the TOUCH_CLIENT_ID flag set.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit f3df3ad668fcd417ffb5afa3bea79a73a348bc1a)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 61770844df70cffd9611e780f48396bbb929382a
+Author: Daniel Stone <daniel@fooishbar.org>
+Date:   Wed Dec 14 15:41:07 2011 +1000
+
+    dix: generate touchpoints from driver-submitted data
+    
+    The touchpoints are generated, enqueued but not processed since we don't
+    handle them in the event processing yet.
+    
+    Co-authored-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 9ce8463a3334f76f128bb35b541aa6e67b4e4374)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit c1846423c3f36f3760f733bef69f841ad6417c93
+Author: Daniel Stone <daniel@fooishbar.org>
+Date:   Wed Dec 14 15:29:48 2011 +1000
+
+    dix: add GetTouchOwnership event API
+    
+    No callers yet. This API is not to be used by drivers, it's an API for the
+    DIX which will create ownership events mainly on touch acceptance/rejection.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit bec51f5ec6575a1971ae5371a4b6d8563933032c)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit f63fb7517d9dc41abb6d666353f84f7b334b00ac
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 14:57:46 2011 +1000
+
+    dix: add DIX API to create touchpoints
+    
+    The DIX touchpoints are the ones used for event processing.
+    
+    Co-authored-by: Daniel Stone <daniel@fooishbar.org>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 5c63dc6dbcbebbb19d79575a9f1ec9878e6537f1)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit fc1f1f21580d76a2aacdf2fe8d3896e104d307f7
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 14:53:52 2011 +1000
+
+    dix: if we run out of space for new touch events, resize the queue
+    
+    The SIGIO handler forces us to drop the current touch and schedule the
+    actual resize for later. Should not happen if the device sets up the
+    TouchClassRec with the correct number of touchpoints.
+    
+    Co-authored-by: Daniel Stone <daniel@fooishbar.org>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 7f8127d203394cae45c3ded0d063030d7c5fdb70)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 5550bcd5b377bf67b2b79ce6f1447b86bdbd98f9
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 14:48:56 2011 +1000
+
+    dix: add helper functions to create DDX touch recs
+    
+    DDX touch points are the ones that keep records of the driver-submitted
+    touchpoints. They're unaffected by the grab state and terminate on a
+    TouchEnd submitted by the driver.
+    
+    The client ID assigned is server-global.
+    
+    Since drivers usually submit in the SIGIO handler, we cannot allocate in the
+    these functions.
+    
+    Co-authored-by: Daniel Stone <daniel@fooishbar.org>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 758bc57ba5a89f765d83f0b169aa09e79a89bf89)
+    
+    Conflicts:
+    
+       test/Makefile.am
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 378fb64a547a6ad2be4451a7aa634a3c91038644
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Dec 15 08:30:02 2011 +1000
+
+    xfree86: bump the input ABI for the touch changes
+    
+    New additions to the API:
+    - InitTouchClassDeviceStruct
+    - xf86PostTouchEvent
+    
+    Changes to the ABI:
+    - DeviceIntRec now contains a TouchClassPtr
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 1a133eb8b1ddbe0da7c2fbf7f6a686ec4512373e)
+    
+    Conflicts:
+    
+       hw/xfree86/common/xf86Module.h
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 508df2ddd779504c3fef213e2a2d1a1ed61104c1
+Author: Daniel Stone <daniel@fooishbar.org>
+Date:   Wed Dec 14 12:46:40 2011 +1000
+
+    input: add a TouchClassRec to the devices
+    
+    These structs will be used to store touch-related data, events and
+    information.
+    
+    Drivers must call InitTouchClassDeviceStruct to set up a multi-touch capable
+    device.
+    
+    Touchpoints for the DDX and the DIX are handled separately - touchpoints
+    submitted by the driver/DDX will be stored in the DDXTouchPointInfoRec. Once
+    the touchpoints are processed by the DIX, new TouchPointInfoRecs are created
+    and stored. This process is already used for pointer events with the
+    last.valuators field.
+    
+    Note that this patch does not actually add the generation of touch events,
+    only the required structs.
+    
+    TouchListeners are (future) recipients of touch or emulated pointer events.
+    Each listener is in a state, depending which event they have already
+    received. The type of listener defines how the listener got to be one.
+    
+    Co-authored-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 3fb258ca28850c998097b55884774cb95f476f69)
+    
+    Backported swap macros for SwapTouchInfo.
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit db04a6a8ea22c43daea1c26892694d89e7644c1c
+Author: Daniel Stone <daniel@fooishbar.org>
+Date:   Wed Dec 14 14:41:48 2011 +1000
+
+    Add the touch input API stubs
+    
+    xf86PostTouchEvent is the driver API to submit touch events to the server.
+    This API doesn't do anything yet though but now we can at least bump the
+    API.
+    
+    For valuators, drivers should use the existing xf86InitValuatorAxisStruct
+    function.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 098b837440e40bbc485368ec9658e12efd6ef581)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 2e040f9bb00c8dbeda5cfbf768c618e23c2a25b1
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 13:51:12 2011 +1000
+
+    Hook up the ownership events
+    
+    This patch applies most of the protocol conversions and the internal event
+    type for ownership events.
+    
+    Note that ownership events are generated by the DIX only, they do not pass
+    through the event queue.
+    
+    Co-authored-by: Daniel Stone <daniel@fooishbar.org>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 93c2a1628a9f6e7480d834bf55c080997fd18911)
+    
+    Backported swap macros in STouchOwnershipEvent.
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit bb67773ce0ee49f80de8828777285780a64ea60d
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 13:21:59 2011 +1000
+
+    Xi: process raw touch events
+    
+    No-one can generated them yet, but if they could, we'd be processing them
+    like there was no tomorrow.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 3390d3fc0347947796aa245d70fefecf59b7bfe4)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit e7298a1fefc4b6083d6c5a45bf1f992e4e6c2233
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 12:45:28 2011 +1000
+
+    Hook up TouchBegin/Update/End events
+    
+    The are the same as device events internally but require the touch ID
+    separately from the detail.button field (the protocol uses the detail field
+    for the touch id).
+    For simpler integration of pointer emulation we need to set the
+    detail.button field while keeping the touchid around.
+    
+    Add the three new touch event types to the various places in the server
+    where they need to be handled. The actual handling of the events is somewhat
+    more complicated in most places.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 84db813b9db34975b5fe288a8a551bb98f0cc1c1)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 1274c19c51b08cb8ad42f1655cf13112c06ad7ca
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 15:00:33 2011 +1000
+
+    include: add a bunch of flags for GetTouchEvent processing
+    
+    TOUCH_CLIENT_ID is set if the touch was generated from a client ID instead
+    of a DDX/driver touch ID. i.e. submitted by the dix.
+    
+    TOUCH_END is a special flag that's required to force the touch to end.
+    Since the protocol with grab replaying and pointer emulation is rather
+    complex, it's quite hard to know otherwise when a touch sequence should
+    really die.
+    
+    The others do what it says on the imaginary box.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 92a5862d0c120b009a688237ec7142b7c21ae272)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 092f816c7f36fd22b5ec09a720327474c9ac5a16
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 12:19:27 2011 +1000
+
+    include: RawTouchEnd is the last event now
+    
+    Plus, use the actual definition from the protocol instead of the numeric
+    values. Turns out not everyone knows the protocol event IDs by heart.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 956a97487beada8cf5f354550ff779635cc64361)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 73c74a9b5ec4e22698a5ba1e31e84c7305160054
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 12:15:29 2011 +1000
+
+    tests: update for touch support
+    
+    Touch event mask must be set for all three event types.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 92c6c0c1d2d6a8882ed97b0e7f2952978ee5ce82)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 7452df21f4131365efd9fffd7dfff03bb1ad965a
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 10:41:17 2011 +1000
+
+    Require inputproto 2.1.99.3
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 731b1db2fcc82c0a8afd28d7f28363c1db0a20ce)
+    
+    Conflicts:
+    
+       configure.ac
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit cb61ae915cbfc34697ed527bb87f4eeb1f9b61da
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Nov 2 10:38:26 2011 +1000
+
+    Xi: add a FIXME
+    
+    All the DeepCopy stuff really needs to be shared between the init calls the
+    drivers use and this code here. Too many bugs by not keeping the two in
+    sync.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 4c825eae89063fdc2241f92ab4101ba682b5b4b7)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 5a9d46a4afdfb726185e437eb7f071e10b7ca5b6
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 14 13:21:03 2011 +1000
+
+    Xi: split ProcessOtherEvent into ProcessDeviceEvent
+    
+    No functional changes.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 0b9d2e426defabbf6df7e872e158b080a6a5e0be)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 01d34fb8bbeca48be09247a25fd54060da80725d
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Dec 16 09:52:43 2011 +1000
+
+    dix: split positionSprite into scale_to_desktop and positionSprite
+    
+    For future touch points, we need positionSprite to calculate the coordinates
+    but we don't want to actually change the cursor position for non-emulating
+    touches.
+    
+    No functional changes at this point.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jamey Sharp <jamey@minilop.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 190a6f45ee7412870b3d95c5db6c1079a285bc59)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit a303ee4bb638e58f32ceb5f606db6879c1c16a77
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Dec 15 10:19:26 2011 +1000
+
+    include: fix BUG_WARN_MSG for constant messages only
+    
+    Previous declaration required the use of a message + printf varargs. We
+    obviously want to allow the use of just a message.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    (cherry picked from commit ff6d9c79c1aa502f1aef81d8063425e5fc002534)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 17d456955ca912ff6536b7cff2f491f8b951e35e
+Merge: ce03688 625d108
+Author: Chase Douglas <chase.douglas@canonical.com>
+Date:   Wed Dec 21 12:30:03 2011 -0800
+
+    Merge remote-tracking branch 'upstream/server-1.11-branch' into upstream-1.11+input
+
+commit 625d1088192a9ad972c20fbdbcb4bb9fda979157
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Dec 16 09:15:25 2011 -0500
+
+    dmx: force -fno-strict-aliasing for xinput example
+    
+    Compiler warning:
+    xinput.c:272: warning: dereferencing pointer 'e' does break strict-aliasing
+    rules
+    
+    The code itself is the usual XInput client-side code:
+            XEvent event;
+            XDeviceMotionEvent *e = (XDeviceMotionEvent *)&event;
+            XNextEvent(display, &event);
+            printf("%d\n", e->type);
+    
+    Since XDeviceMotionEvent is not guaranteed the same size as XEvent, clients
+    must use pointer aliasing as above when using the XNextEvent API. Disable
+    strict aliasing for this example.
+    
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Gaetan Nadon <memsize@videotron.ca>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+    (cherry picked from commit 3aca8199405cff5097ee5813605ec78b5ae44a43)
+
+commit ce03688df5447e6634667a32785276105c31230e
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Dec 16 12:41:08 2011 +1000
+
+    dix: button state must show the logical buttons, not physical buttons
+    
+    If the device is mapped 3 2 1, a click on physical button 1 sends a button 3
+    press, but the state was set for button 1. Fix this, the state must be set
+    for that button's logical mapping.
+    
+    https://bugzilla.gnome.org/show_bug.cgi?id=655928
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit fcda98c48610fd507ca0b89c6006a5497d9dc1c9)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit d2178c5f2931363c8626ee27352235aa5688931d
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Dec 19 14:52:41 2011 +1000
+
+    dix: don't retrieve the syncEvents tail on an empty list
+    
+    An empty list points to itself but syncEvents has the list head only and is
+    of a different format than the elements. Thus, casting it to a QdEventPtr
+    gives us garbage.
+    
+    Segfaults with XTS test case Xlib13/XGrabKeyboard
+    
+    Introduced in 7af23259d88f4c28ed21140f82cc03b3724c06bb.
+    
+    Reported-by: Aaron Plattner <aplattner@nvidia.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit 47da6b6b2c2e9245422655f94770146fb8cd430b)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 53e347b22bb79043243e25891cd7d6f374a8aa23
+Author: Keith Packard <keithp@keithp.com>
+Date:   Tue Nov 8 10:13:15 2011 -0800
+
+    Save major/minor opcodes in ClientRec for RecordAReply
+    
+    The record extension needs the major and minor opcodes in the reply
+    hook, but the request buffer may have been freed by the time the hook
+    is invoked. Saving the request major and minor codes as the request is
+    executed avoids fetching from the defunct request buffer.
+    
+    This patch also eliminates the public MinorOpcodeOfRequest function,
+    inlining it into Dispatch. Usages of that function have been replaced
+    with direct access to the new ClientRec field.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+    Reviewed-by: Jamey Sharp <jamey@minilop.net>
+    (cherry picked from commit fb22a408c69a84f81905147de9e82cf66ffb6eb2)
+    
+    Conflicts:
+    
+       include/extension.h
+
+commit b736f8c92bae7773ff6e1fca886f9ccc50156488
+Author: Julien Cristau <jcristau@debian.org>
+Date:   Sat Nov 5 13:00:07 2011 +0100
+
+    Fix ShmPutImage for XYBitmap
+    
+    We can't call CopyArea in that case because the image has depth 1, which
+    might not match the target drawable, so we might overrun the shm
+    segment.  Commit 11817a881cb93a89788105d1e575a468f2a8d27c apparently
+    fixed a similar bug for XYPixmap, but missed the bitmap case.
+    
+    Fixes: http://bugs.debian.org/629611
+    
+    Thanks to Alan Curry for diagnosing this and providing a test case.
+    
+    Reported-and-tested-by: Alan Curry <pacman@kosh.dhis.org>
+    Reviewed-by: Peter Harris <pharris@opentext.com>
+    Signed-off-by: Julien Cristau <jcristau@debian.org>
+    (cherry picked from commit 08ec4da6a7617637914bee1636858474213cf39d)
+
+commit b2a4c09507b267495ea5e4c2e05373b323c80edf
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date:   Sat Dec 17 12:56:59 2011 -0800
+
+    kdrive/linux: Fix compilation with -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast
+    
+    Reported-by: Arkadiusz Miśkiewicz <arekm@maven.pl>
+    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Reviewed-by: Jamey Sharp <jamey@minilop.net>
+    (cherry picked from commit 1deede3c48d5ac91f50774c79f02afc6e036614e)
+
+commit beaa7ad2ec45811e16722283a8b557a08e91ef18
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date:   Sat Dec 17 12:25:26 2011 -0800
+
+    configure.ac: Make Xephyr dependency error message more informative
+    
+    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Reviewed-by: Jamey Sharp <jamey@minilop.net>
+    (cherry picked from commit d0170d54c71fc761b8f1ae7a0e555dc2ca23cf9c)
+
+commit 41524dd61020f2a446ec54643fa17aa791338cac
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date:   Fri Dec 16 17:47:46 2011 -0800
+
+    configure.ac: 1.11.3
+    
+    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit ee66474eb2009118a41539c6773e514a09d27e4d
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Fri Dec 9 07:45:02 2011 -0500
+
+    dmx: fix distcheck failure, missing compsize.h in Makefile.am
+    
+    which was added in commit:
+    dmx: Build fix for -Werror=implicit-function-declaration
+    
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+    (cherry picked from commit 2c1d0a539c0fb1860ac89a00d1fb609f1959e1b6)
+
+commit 3eaf942e727652db144d055a08ac2deb93c86105
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Dec 14 11:40:10 2011 -0800
+
+    Merge remote-tracking branch 'whot/for-keith'
+    (cherry picked from commit 7da7aa96a0acb895e1fe57a9d3f2d093479cf2a2)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 481c6f70eb9889fa52e9ac2cc2805101ff2b8777
+Author: Chase Douglas <chase.douglas@canonical.com>
+Date:   Tue Dec 13 17:39:20 2011 -0800
+
+    A few random fixes that are needed due to backport cherry-picking
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit a44c1d329d1284939f9948161838193e9de2ef4f
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date:   Thu Dec 8 21:52:07 2011 -0800
+
+    Change disable_clientpointer return type to void
+    
+    It doesn't return anything, nor does it's caller expect it to.
+    
+    Fixes Solaris Studio compiler error:
+    "xichangehierarchy.c", line 214: Function has no return statement : disable_clientpointer
+    
+    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+    (cherry picked from commit 372a6f10dc2d74d2d179e8b92449e9b8636a99ef)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 77cae4b31f9e22210d3b98dfd2f413818915ffc3
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Dec 8 20:57:26 2011 -0800
+
+    Merge remote-tracking branch 'whot/for-keith'
+    (cherry picked from commit 522f8bcc0360d6a117e929a004bc956ab92037e9)
+    
+    Conflicts:
+    
+       hw/xfree86/common/xf86Module.h
+       include/input.h
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 9963b023509a8ec3ff33700faf331994b14bbd84
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Dec 1 14:36:58 2011 +0000
+
+    Merge remote-tracking branch 'whot/for-keith'
+    (cherry picked from commit 3197b773c81e58cd4aa412eccaee49526012ed6f)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit cec13888543742bed1bee9edad0e7ad96b911539
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date:   Tue Nov 1 16:56:18 2011 -0700
+
+    Make XIGetKnownProperty take a const char * argument
+    
+    Now that MakeAtom takes const char *, so can XIGetKnownProperty.
+    Clears 71 warnings from gcc -Wwrite-strings of the form:
+    devices.c:145:5: warning: passing argument 1 of 'XIGetKnownProperty' discards qualifiers from pointer target type
+    ../include/exevents.h:128:23: note: expected 'char *' but argument is of type 'const char *'
+    
+    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit 5f285a30a1d6ffba82ebe5e08a0b68352bb51556)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 92f7f64c91c07ce5a74e5714166ce2372301e807
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date:   Mon Oct 24 23:40:45 2011 -0700
+
+    Enable memory checking during unit testing
+    
+    If configure is generated with xorg-macros 1.16.0 or newer, and
+    an appropriate memory checking library is found for the platform,
+    use it when running unit tests.   If not, then no harm is done.
+    
+    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+    (cherry picked from commit e47aa9475027ed6a255daefec85561c6b15789bd)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 3ea81b1d44befe9fa51bb3fefb51bba5b4a67454
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date:   Tue Oct 25 00:12:48 2011 -0700
+
+    Don't require ld -wrap for tests that don't need it
+    
+    If configure is generated with xorg-macros 1.16 or later, this allows
+    builders to --enable-unit-test and run the tests other than the xi2
+    tests which require ld -wrap (and are still wrapped in if HAVE_LD_WRAP
+    in tests/xi2/Makefile).  If an older xorg-macros is used, the existing
+    behaviour is preserved of requiring ld -wrap for all unit tests, but
+    no side effects occur, so the minimum xorg-macros version is not raised.
+    
+    If unit testing is enabled without ld -wrap, then we create a bogus
+    "xi2-tests" script just to report that we're skipping them.
+    
+    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+    (cherry picked from commit 36670065bd74b870d0da7c6a69a9c0d222b21706)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 8eece5a0ef9547a247872419a63c81a9d6cf0223
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Aug 1 14:14:02 2011 +1000
+
+    input: replace remaining GetPairedDevice() with GetMaster()
+    
+    Wherever it's obvious which device we need (keyboard or pointer), use
+    GetMaster() instead of GetPairedDevice(). It is more reliable in actually
+    getting the device type we want.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 35ec24cf245e5ef676e98a0bf7c77296a3f1ff63)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 4b7dd4523c11ef4952b78e4164b2fa7b34588867
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Nov 1 12:17:50 2011 +1000
+
+    xfree86: duplicate name and driver from pInfo for NewInputDeviceRequest
+    
+    xorg.conf devices had the name and driver set in the DDX's InputInfoPtr list
+    but not in the option list for those devices. That information was lost when
+    passing the options into NewInputDeviceRequest. NIDR then refused to start
+    the devices.
+    
+    Introduced in xorg-server-1.11.0-250-ge4cd24e
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Tested-by: James Cloos <cloos@jhcloos.com>
+    (cherry picked from commit c643c2b7bf480f5c27ff8606bda087f8bff3b154)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit cb5044370af84c760feeb32522d98e157f88fb6a
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Nov 2 21:20:07 2011 -0700
+
+    Merge remote-tracking branch 'whot/two-screen-coordinates'
+    (cherry picked from commit d91aa0e6601bdf3e2cfa57b3412ab14ac486edc4)
+    
+    Conflicts:
+    
+       dix/dispatch.c
+       dix/inpututils.c
+       hw/xfree86/common/xf86Xinput.h
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 5f6416463b2acb5e434eb1e2209f79b2040e9fae
+Author: Dave Airlie <airlied@redhat.com>
+Date:   Thu Oct 27 08:38:45 2011 +1000
+
+    test: fix two more failing FP3232 tests
+    
+    And put a comment in to explain why we're testing for a frac between .3 and
+    .6. We can't directly compare the frac since the floating/fixed point
+    conversion loses precision.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit 005ab41986b0bb6a4e626aee7a7a542247f422e7)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 869bd27ab17d46f3982ea4930d861b616fc90330
+Author: Alexandr Shadchin <alexandr.shadchin@gmail.com>
+Date:   Sat Oct 29 00:14:32 2011 +0600
+
+    Fix position _X_EXPORT
+    
+    Signed-off-by: Alexandr Shadchin <Alexandr.Shadchin@gmail.com>
+    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+    (cherry picked from commit 91131037a2d2e07079de5d222d8a8c95300750cc)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit c8e249e5bd0dee563effb7ae58d97b0e1d5865d1
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Oct 20 16:42:20 2011 +1000
+
+    Use new FP1616/FP3232 conversion functions
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+    (cherry picked from commit ffe20acedb3cdc4811eb52f8fc540ba6af7339fa)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 11b244ab6ea1dd2a8655d1fd5d1e2055531bf0fe
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Oct 20 16:49:28 2011 +1000
+
+    test: fix test with new double -> fp3232 conversion functions
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Tested-by: Dave Airlie <airlied@redhat.com>
+    Reviewed-by: Dave Airlie <airlied@redhat.com>
+    (cherry picked from commit 7500d841f4c709ae0edc6420332096d3b9ef9fcc)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit dc06150807ecd57d13959fbfda87b0512efed91a
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Oct 19 13:17:51 2011 +1000
+
+    Xi: send DeviceChangedEvents when the scroll valuators change value
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 4bb5d8fae4f9a70f12591315f0b267a2ea826a0c)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 1036c8b3233766a9a7e392a5c11d2972efcea81c
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Oct 19 12:28:37 2011 +1000
+
+    dix: accept a NULL master for CreateClassesChangedEvent
+    
+    If a floating device changes, the master is NULL but we must still create a
+    DCE for it.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 1f4af6c12fb5d4c19f4eac3df768517c9132cc88)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit a3e6b576402e02c5b03483f96c8eaf72ebcd73fb
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Oct 19 12:11:16 2011 +1000
+
+    Xi: ensure the deviceid for DeviceChangedEvents is always the right one
+    
+    If we're sending the event for a given device, make sure the deviceid is
+    that of the device.
+    This allows callers to use the same DCE for slave and master without having
+    to fiddle the DCE's internal fields.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit d77dec6971e4a0b306c8dbd5adf627908d7972cb)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 740d7e37a1e2d3b2f955f95276f746afe43515ec
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Oct 18 17:47:59 2011 +1000
+
+    dix: pass the flags into the CreateClassesChangedEvent
+    
+    No effective functional changes, prep work for future patches.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit e9dee21fa3213bfe87b2b728a38eb41d3ba0e664)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 4d7824db35c4121a6a3a9560981c8f6f3826f8bf
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Oct 18 17:41:29 2011 +1000
+
+    dix: drop unused argument from XISendDeviceChangedEvent
+    
+    Instead of device and master (and just using master), drop the master
+    argument and let the callers pass in the device the event is to be sent for.
+    
+    No effective functional changes.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit fcdd2587a17437b643b4592aa7f65d11c05a4cd8)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 5647fd210d0d7d7c723689f95c84eeb968339b7e
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Oct 18 17:11:27 2011 +1000
+
+    dix: add ScrollInfo to DeviceChangedEvents
+    
+    3304bbff9b4ed63f1a47410a5320a136420ba2c6 added smooth scrolling support for
+    pointer events and for XIQueryDevice but didn't add the matching parts to
+    XIDeviceChangedEvents.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 8473e441b0f832775153281bc3df5e2d4feb2b36)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit e3744f444174c63d0a297e2127c9437483a84546
+Author: Andreas Wettstein <wettstein509@solnet.ch>
+Date:   Thu Aug 11 16:33:33 2011 +1000
+
+    xkb: Support noLock and noUnlock flags for LockMods
+    
+    These flags are required by the XKB spec section 6.3.
+    
+    Signed-off-by: Andreas Wettstein <wettstein509@solnet.ch>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit e3f6a76dd480717eae4b17ad8e2ff707de2ffe4c)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit c6325a9d104029ae7e7045b7a8a0612b1da802f9
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Oct 21 09:09:55 2011 +1000
+
+    xfree86 doc: replace driver "keyboard" with "kbd"
+    
+    We've deprecated keyboard a long time ago
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    (cherry picked from commit 6f33593dc087d367d899d1cb6e6e30b282d922e2)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 7ee1621364d2b6230bb1c02bbdb5b6abb74ad2ff
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Aug 5 14:48:02 2011 +1000
+
+    xfree86: use NewInputDeviceRequest for xorg.conf devices too
+    
+    Only use one init path for input devices - through NIDR.
+    
+    This requires that inp_driver and inp_identifier from the
+    XF86ConfInputRec are copied over into the options for NIDR to see them.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit e4cd24e717ef1059804b3f6bb483810b708cd56a)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 2d2cf90360126ddf9c3d404568bafacbc7456d84
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Aug 10 14:37:41 2011 +1000
+
+    dix: move #if statement to stop compiler warning
+    
+    ptrveloc.c: In function 'QueryTrackers':
+    ptrveloc.c:598:34: warning: variable 'used_offset' set but not used
+    [-Wunused-but-set-variable]
+    
+    used_offset is used, but only in the debugging code. Move the #if statement
+    to ignore that warning.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 1ecc427a39d41e723912492b846512fd0ad9af2d)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 9c5d621fc6a6c0c067c0a7de8872771271985554
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Aug 5 14:05:58 2011 +1000
+
+    xfree86: Fix a comment, the old function doesn't exist anymore
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit f9067c1dd8ce9058eb48a20dfae52bc8cf3a1e55)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit c3deb23e59a4d93899a8e9025fd0215a4a4d7723
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Aug 10 15:58:34 2011 +1000
+
+    xfree86: use xf86AddNewOption instead of xf86addNewOption
+    
+    The former strdups for us. If the strdup fails we miss out on the
+    CorePointer option (default on anyway) and we're likely to fall over soon
+    anyway, so let's pretend this is the same behaviour.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit aeab26e9e1751e1e3514798fa53e9bd604b0d254)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 58c411bd0f5d867f21f98c965deb054404211780
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date:   Mon Oct 17 23:45:32 2011 -0700
+
+    test: Add unit test for mieq
+    
+    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit 4597ac6fe0580323860080dae2576733acc49757)
+    
+    Conflicts:
+    
+       test/input.c
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit ab7c89d52bf043d7eaa1a5adecf2412fac048325
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date:   Mon Oct 17 21:16:37 2011 -0700
+
+    mieq: Reserve some space in EQ for release and other special events
+    
+    The last 64 events in the event queue will be reserved for release
+    events in order to help return the system to a cleaner state when
+    it comes back from a soft wedge.
+    
+    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit ad450d76e468cd62406c4f09e71e131f7ff4555c)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 1ecb0b451bb622d22b4a34b0c60a5caee8ca5137
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date:   Sat Oct 15 22:51:30 2011 -0700
+
+    mieq: Provide better adaptability and diagnostics during mieq overflow
+    
+    This patch changes from a static length event queue (512) to one that
+    starts at 128 and grows to 4096 as it overflows, logging each time it
+    grows.
+    
+    This change also allows for multiple backtraces to be printed when the
+    server is wedged rather than just one.  This increased sampling should
+    help identify the true hog in cases where one backtrace might be
+    insufficient.
+    
+    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit 7d153f25be678acf500236ae422b33d17e6cb7a6)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 809ff8badee654467329182e21fc35db0f01704c
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date:   Wed Oct 5 15:02:52 2011 -0700
+
+    test: Silence some debug lines from the input unit tests
+    
+    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit a046d649e4c7e4d28f350382dcdd293e92a59aad)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 3c12875447cbe24664ae5578df832110e58fb76f
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Oct 19 17:26:50 2011 -0700
+
+    Merge remote-tracking branch 'whot/for-keith'
+    (cherry picked from commit 15bbdc103b34b6b374815698946e6c409421a644)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit e4b0c485ff3dafc90e0171ad49f88345193e3b7a
+Author: Dave Airlie <airlied@redhat.com>
+Date:   Wed Oct 12 09:59:38 2011 +0100
+
+    test: fix input test
+    
+    The test was memsetting the wrong thing, this fixes make check in my tinderbox.
+    
+    Signed-off-by: Dave Airlie <airlied@redhat.com>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+    (cherry picked from commit 1433103a49b97e356da0f20aa65046cdb2f5ece6)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 44431b35e6fe1e8ab3152b784a951d9c54b72242
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date:   Wed Oct 5 15:02:52 2011 -0700
+
+    dix: add utility functions for double to/fro FP1616/FP3232 conversion
+    
+    Co-authored-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Reviewed-by: Mark Kettenis <kettenis@openbsd.org>
+    (cherry picked from commit f9c6903d4a90b59c328f4fa05d2be9e0ce1c5189)
+    
+    Conflicts:
+    
+       test/input.c
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit ddf22daa6f7f4c7c01e95cd11218e7357fdda337
+Author: Keith Packard <keithp@keithp.com>
+Date:   Mon Oct 17 13:50:25 2011 -0700
+
+    Merge remote-tracking branch 'whot/next'
+    (cherry picked from commit fb84be47db7cdaff406792c08e34670e8e0cbda9)
+    
+    Conflicts:
+    
+       dix/inpututils.c
+       include/input.h
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit cf4e91a4c8a9dd227dce2a9fe15e507b7ae844e4
+Author: Keith Packard <keithp@keithp.com>
+Date:   Mon Oct 3 11:36:28 2011 -0700
+
+    Merge remote-tracking branch 'whot/next'
+    (cherry picked from commit f5d50b46ddeb039ab6564141f61261e94ee67637)
+    
+    Conflicts:
+    
+       hw/xfree86/common/xf86Xinput.h
+       test/xi2/protocol-eventconvert.c
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit a17c72bc0ed96441662a8d827220d389041bbafb
+Author: vdb@picaros.org <vdb@picaros.org>
+Date:   Wed Aug 31 07:23:01 2011 +0200
+
+    xfree86: .BI style: monitor section in xorg.conf man page
+    
+    The xorg.conf manual uses the following convention in most of its
+    sections:
+    
+    bold = text to be copied literally to the config file,
+    italic = a symbolic name to be substituted by a true value.
+    
+    Some configuration keywords seem to have been changed into generic
+    options.  Prepending Option to the manual entry swapped the
+    bold-italic logic.  This patch restores the convention in the monitor
+    section and consists of
+    
+    -.BI "Option " "\*qPreferredMode\*q  " \*qstring\*q
+    +.BI "Option \*qPreferredMode\*q \*q" name \*q
+    
+    modifications.
+    
+    Plus a few minor changes (Modes → Mode) and a typo fix.
+    
+    Signed-off-by: Servaas Vandenberghe
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit c7163fdd302f706a3d67f0fdf93eeb3396bb3332)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit f5be70465e8125bb30596761207e16d5487161e2
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Sep 6 09:33:43 2011 +1000
+
+    xfree86: expose Option "TransformationMatrix"
+    
+    Recent changes to the server change the default absolute input device
+    behaviour on zaphods to span the whole desktop too. Since these setups
+    usually use an xorg.conf, allow the transformation matrix to be specified in
+    the config as well.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Simon Thum <simon.thum@gmx.de>
+    (cherry picked from commit 4b4caecb7d2c8e0b7e4fedc95fba2a728bbc25e6)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 6f1775f76248561367cb908207f05b9e7ab74864
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Sep 6 09:39:01 2011 +1000
+
+    xfree86: use subheader for Pointer Acceleration parts in xorg.conf(5)
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit cf51424a34fb2b567a867338ab44f83b5c43251c)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit dee2412a68e04d43c86c2aa7a4e1f70ee98f4a60
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Sep 5 15:43:14 2011 +1000
+
+    xfree86: fix comment typo
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit 9125952b407090b040bffb3d752288293137cf77)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit e36277e9e31190d403e1ddb44539ab262cf0eea2
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Aug 8 15:21:46 2011 +1000
+
+    Add null-terminated list interface.
+    
+    This is a set of macros to provide a struct list-alike interface for classic
+    linked lists such as the XF86OptionRec or the DeviceIntRec. The typical
+    format for these is to have a "struct foo *next" pointer in each struct foo
+    and walk through those. These macros provide a few basic functions to add to,
+    remove from and iterate through these lists.
+    
+    While struct list is in some ways more flexible, switching legacy code to
+    use struct list is not alway viable. These macros at least reduce the amount
+    of open-coded lists.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    (cherry picked from commit fcafe825751bef99f4c0b36250ca6f15f127502f)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 4cc88f2c59eb21689ecba221bc0eaeaa46e7374d
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Aug 12 15:55:48 2011 +1000
+
+    xfree86: comment typo fix
+    
+    in synch → in sync
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit 79ca7c0b5786a02a80a1c40ed475e928da7c82b3)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 95bc0b5705bb0e78a9cb2aaaf8d7ba61af21450c
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Jul 29 16:33:54 2011 +1000
+
+    dix: don't XWarpPointer through the last slave anymore (#38313)
+    
+    This line was introduced pre-1.6 to fix Bug 19297. The effect of warping
+    through the VCP then was that if a device had custom valuator ranges, the
+    warp position would be wrong. The better device for this effect is the the
+    XTest device.
+    
+    This fixes a server crash where the lastSlave is a pointer device without
+    valuators (Bug 38313#0).
+    
+    And while we're at it, make sure the Xinerama code-path does the same.
+    
+    X.Org Bug 38313 <http://bugs.freedesktop.org/show_bug.cgi?id=38313>
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 2bfb802839688ecf328119c4c6979390fc60348d)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 0bfa207c31ce962e7373a3e9c0d4e4764474c867
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Aug 11 10:59:07 2011 +1000
+
+    dix: use helper functions in EventIsDeliverable
+    
+    Proximity events don't have an XI2 type and caused error messages in the
+    log when trying to get the event filter. Use this opportunity to
+    clean up the code, instead of manually setting the fields that
+    GetEventFilter requires use EventTo(XI2|XI|Core) instead.
+    
+    Co-Authored-by: Keith Packard <keithp@keithp.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Keith Packard <keithp@keithp.com>
+    (cherry picked from commit 3be379f5076566edaf92c27df5a4d447bcf5d015)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit d6b224872b2a950c91cab3369a1d18015376e3a7
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Aug 11 10:57:05 2011 +1000
+
+    dix: abstract XI2 filter mask lookup
+    
+    Don't access the xi2mask bytes directly or calculate the offsets manually,
+    use a few helper functions instead. XI2 masks are a bit weird in the event
+    handling code since they slot onto the legacy code. For core/XI 1.x events,
+    the event mask is a CARD32. That mask is used together with the event filter
+    (also 32 bit) to determine if event delivery should be attempted.
+    XI2 masks are of arbitrary size and their mask is simply the byte of the
+    mask that contains the event mask. Likewise, the filter is a single byte
+    matching that mask. Provide helper functions get these bytes and masks in
+    the right order instead of accessing them manually.
+    
+    EventIsDeliverable should be part of this cleanup patch but it will be
+    gutted with the next patch.
+    
+    Co-Authored-by: Keith Packard <keithp@keithp.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Keith Packard <keithp@keithp.com>
+    (cherry picked from commit 799879797505a5e891ccaec2bea73fd838c94b7a)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 3df4cf9f986a1758972d47e1a4955dd6148bb9bf
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Aug 3 15:07:23 2011 +1000
+
+    input: provide a single function to init DeviceEvents to 0
+    
+    getevents.c already had that function, but XKB was manually initializing it,
+    causing bugs when the event structure was updated in one place but not the
+    other.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit 3a077f246e9ac07a37c1b01c3d321e0f5ceb4153)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 93b29777be13d2d1055b6a4d191b4dd03e953961
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Aug 1 14:20:53 2011 +1000
+
+    dix: fix compiler warnings ("foo" set but not used)
+    
+    devices.c: In function 'AttachDevice':
+    devices.c:2409:18: warning: variable 'oldmaster' set but not used
+    [-Wunused-but-set-variable]
+    
+    events.c: In function 'ConfineToShape':
+    events.c:683:15: warning: variable 'pSprite' set but not used
+    [-Wunused-but-set-variable]
+    
+    events.c: In function 'ProcGrabPointer':
+    events.c:4759:15: warning: variable 'time' set but not used
+    [-Wunused-but-set-variable]
+    
+    getevents.c: In function 'GetMotionHistory':
+    getevents.c:425:9: warning: variable 'dflt' set but not used
+    [-Wunused-but-set-variable]
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 4b376ddeb4f3c9d9d279ffd2946d88edd5af4cfc)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit af899fc57c08a3f7bbf033204b2fb0aacc5f0aa4
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Aug 1 14:27:54 2011 +1000
+
+    mi: fix compiler warnings ("foo" set but not used)
+    
+    misprite.c: In function 'miSpriteSaveUnderCursor':
+    misprite.c:940:12: warning: variable 'y' set but not used
+    [-Wunused-but-set-variable]
+    misprite.c:940:9: warning: variable 'x' set but not used
+    [-Wunused-but-set-variable]
+    
+    mivaltree.c: In function 'miComputeClips':
+    mivaltree.c:226:10: warning: variable 'resized' set but not used
+    [-Wunused-but-set-variable]
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 6fd2adc179141310e45a56ee90ef5b5f6115a1f6)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 2ad6d4c3abe3e3d4c517a50f30c73016c5e683d0
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Aug 2 09:21:00 2011 +1000
+
+    Xi: silence compiler warnings (set but not used)
+    
+    exevents.c: In function 'UpdateDeviceState':
+    exevents.c:719:9: warning: variable 'bit' set but not used
+    [-Wunused-but-set-variable]
+    
+    exevents.c: In function 'ProcessOtherEvent':
+    exevents.c:889:22: warning: variable 'v' set but not used
+    [-Wunused-but-set-variable]
+    exevents.c:888:17: warning: variable 'k' set but not used
+    [-Wunused-but-set-variable]
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 484cef5b29ef82402a15e155b3b8505b1e4a6830)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 4ce019c541c41bb5533a5a5a8b74db82049115a7
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Aug 1 13:52:13 2011 +1000
+
+    dix: add KEYBOARD_OR_FLOAT and POINTER_OR_FLOAT to GetMaster()
+    
+    GetMaster() currently requires an attached slave device as parameter,
+    resuling in many calls being IsFloating(dev) ? dev : GetMaster(...);
+    
+    Add two new parameters so GetMaster can be called unconditionally to get the
+    right device.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 98fe735ea1d756711019c3d90ed6abd9c06abebf)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 7127c6960d04dd681cd3de8852220d2f90513e82
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Aug 2 08:54:00 2011 +1000
+
+    test: add a test for GetMaster() behaviour
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit dbbe5735d1451bb32f43bce90f0bcfeff46f9743)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 7cea2bd9a921ae55d6d9f5072b8f9a6d7b761146
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Aug 1 11:54:17 2011 +1000
+
+    mi: fix comment typo, whitespace in miPointerSetPosition
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit b3c76b0c53ac42b70d12849da18465e8467e474c)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 82241760f5e738646d30253c08ec2e1c91bcf513
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Aug 1 09:52:38 2011 +1000
+
+    dix: rename mieqSwitchScreen argument fromDix → set_dequeue_screen, document
+    
+    fromDIX is neither exactly true nor particularly helpful in understanding
+    what this parameter triggers. Rename to set_dequeue_screen, because that's
+    exactly what happens.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit c9562bed0d5e26b7e3e55e26cf1ddc5086d61cc6)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit e4e5c3806093da3c8d798da3771fadce30f8858a
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Aug 9 11:21:06 2011 +1000
+
+    config: use add_option for '_source' too
+    
+    _source was being allocated manually, with all other options added to that
+    list through add_option. Skip the manual part, allocate the first option
+    _source with add_option too.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 20a61845d3c93c337bf3331a6bac30cf66c2a293)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 79289b346559876579be1cffc1d2fd35b33ccc2b
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Aug 9 11:20:31 2011 +1000
+
+    config: return the new InputOption from add_option.
+    
+    Change add_option to return the new InputOption on success, or NULL
+    failure. This way we can at least check for errors in callers.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit d33652dad8838ab0a9175ca4613a3161ebc5676f)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 9d4324b005d177671827048b25e0314c6470cf8e
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Jul 8 16:13:45 2011 +1000
+
+    Revert "Attempt to add the 'mouse' driver in more situations."
+    
+    This reverts commit 43d9edd31e31b33b9da4a50d8ab05004881c8d5a.
+    
+    This commit was introduced in the 1.2 cycle when hotplugging was less than
+    ideal (i.e. it didn't exist). From the commit message:
+    
+        Always add a mouse driver instance configured to send core events, unless
+        a core pointer already exists using either the mouse or void drivers.  This
+        handles the laptop case where the config file only specifies, say,
+        synaptics, which causes the touchpad to work but not the pointing stick.
+        We don't double-instantiate the mouse driver to avoid the mouse moving twice
+        as fast, and we skip this logic when the user asked for a void core pointer
+        since that probably means they want to run with no pointer at all.
+    
+    To get this case above, a user would need to disable hotplugging _and_ have a
+    xorg.conf that only references one device. This is possible, but not a use-case
+    we should worry about too much now.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 1357cd725143c1a35e32f15df658de111b151692)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 94283b6b5b0d529041a061f96a90f357c5e091e3
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Jul 8 16:10:07 2011 +1000
+
+    xfree86: use xf86AllocateInput for implicit devices too
+    
+    Slowly merging the vastly different code-paths.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 95772598b57f6054fbf88683fa0a492c77605790)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 025dd499ae9c1190b8f6baef5bd50f9b26ae6d80
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Jul 4 15:02:20 2011 +1000
+
+    xfree86: factor out adding/removing a device from the input device array
+    
+    No functional changes, just readability improvements. This also gets rid of
+    the count variable. Count was just used for resizing the null-terminated
+    list. Since we're not in a time-critical path here at all we can afford to
+    loop the list multiple times instead of keeping an extra variable around.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit fa8f4652819b692faaf2789cf32d7fa99fbb34aa)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 22434f6706b9742ea9c350ae61324d7045a2e30e
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Jul 4 14:14:11 2011 +1000
+
+    xfree86: update comment for InitInput
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 5b5477c05f691205064ca4d8034f8dd47ab975b7)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 8362af42e29add5d02c88712f49808bed072fbd0
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Jul 4 14:26:13 2011 +1000
+
+    xfree86: nest loops instead of 0x1 pointers.
+    
+    If we find the core device, move all other device pointers forward right
+    then and there. The break will jump out of the top loop.
+    
+    They had a special on braces today, so I added some for readability (and
+    fixed up tab vs space indentation.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 7354f607833c69626d8692bc5176b18ea1cf6263)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit c5c869867c5fcc7b60cad3c69237624ad51162db
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Jul 4 14:05:30 2011 +1000
+
+    xfree86: improve readability of synthesized device.
+    
+    No functional changes.
+    
+    The options we assign are the ones from the Pointer/Keyboard device so we
+    might as well use those readable names instead of dev[count-1]->options.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 5669aa2d24dff9ab276e5f74a09f97ec77b90e75)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 19cdfec1b49afcf9d00f486526f14aa0ac32e94a
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Jul 4 13:52:11 2011 +1000
+
+    test: add a option duplication test
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 5aa826cdd1f2e768bedf23d399703a5d0b6302be)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit eebfaa128b6b87012918545e19ee67acd0306433
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Jul 4 13:46:24 2011 +1000
+
+    xfree86: when implicitly choosing a core device, set the option to a value
+    
+    Devices are core pointers/keyboards by default now anyway, but let's set the
+    option to some value instead of just NULL.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 4527e2b776cfcdac2b189b5439b9a3d0b6433077)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 7a6b7fba273adf42b80fcb278db2a9dafcb9d2b6
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Jul 4 13:44:44 2011 +1000
+
+    xfree86: don't warn about duplicate core devices
+    
+    It doesn't matter. All devices are core pointer devices by default now
+    anyway.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 44d53728a6a533fc0a6e0a10269d1cc99e9dad32)
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
 
 commit 0ca8869e4537412f25bfd5610aba5e604952608c
 Author: Jeremy Huddleston <jeremyhu@apple.com>
index 9d43564f86609ac875a2f176949bb5ccfe9fa67d..6b2db4b5988060da60ffb61706edabe3576732db 100644 (file)
@@ -44,6 +44,32 @@ SOFTWARE.
 
 ********************************************************/
 
+/*
+ * Copyright © 2010 Collabora Ltd.
+ * Copyright © 2011 Red Hat, Inc.
+ *
+ * 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.
+ *
+ * Author: Daniel Stone <daniel@fooishbar.org>
+ */
+
 /********************************************************************
  *
  *  Routines to register and initialize extension input devices.
@@ -78,6 +104,7 @@ SOFTWARE.
 #include "eventconvert.h"
 #include "eventstr.h"
 #include "inpututils.h"
+#include "mi.h"
 
 #include <X11/extensions/XKBproto.h>
 #include "xkbsrv.h"
@@ -104,7 +131,7 @@ int
 XIShouldNotify(ClientPtr client, DeviceIntPtr dev)
 {
     DeviceIntPtr current_ptr = PickPointer(client);
-    DeviceIntPtr current_kbd = GetPairedDevice(current_ptr);
+    DeviceIntPtr current_kbd = GetMaster(current_ptr, KEYBOARD_OR_FLOAT);
 
     if (dev == current_kbd || dev == current_ptr)
         return 1;
@@ -128,6 +155,21 @@ IsPointerEvent(InternalEvent* event)
     return FALSE;
 }
 
+Bool
+IsTouchEvent(InternalEvent* event)
+{
+    switch(event->any.type)
+    {
+        case ET_TouchBegin:
+        case ET_TouchUpdate:
+        case ET_TouchEnd:
+            return TRUE;
+        default:
+            break;
+    }
+    return FALSE;
+}
+
 /**
  * @return the device matching the deviceid of the device set in the event, or
  * NULL if the event is not an XInput event.
@@ -492,6 +534,8 @@ DeepCopyKeyboardClasses(DeviceIntPtr from, DeviceIntPtr to)
 
 }
 
+/* FIXME: this should really be shared with the InitValuatorAxisClassRec and
+ * similar */
 static void
 DeepCopyPointerClasses(DeviceIntPtr from, DeviceIntPtr to)
 {
@@ -624,6 +668,41 @@ DeepCopyPointerClasses(DeviceIntPtr from, DeviceIntPtr to)
         classes->proximity = to->proximity;
         to->proximity      = NULL;
     }
+
+    if (from->touch)
+    {
+        TouchPointInfoPtr tmp;
+        if (!to->touch)
+        {
+            classes = to->unused_classes;
+            to->touch = classes->touch;
+            if (!to->touch)
+            {
+                int i;
+                to->touch = calloc(1, sizeof(TouchClassRec));
+                if (!to->touch)
+                    FatalError("[Xi] no memory for class shift.\n");
+                to->touch->num_touches = from->touch->num_touches;
+                to->touch->touches = calloc(to->touch->num_touches,
+                                            sizeof(TouchPointInfoRec));
+                for (i = 0; i < to->touch->num_touches; i++)
+                    TouchInitTouchPoint(to->touch, to->valuator, i);
+                if (!to->touch)
+                    FatalError("[Xi] no memory for class shift.\n");
+            } else
+                classes->touch = NULL;
+        }
+        tmp = to->touch->touches;
+        memcpy(to->touch, from->touch, sizeof(TouchClassRec));
+        to->touch->touches = tmp;
+        to->touch->sourceid = from->id;
+    } else if (to->touch)
+    {
+        ClassesPtr classes;
+        classes = to->unused_classes;
+        classes->touch = to->touch;
+        to->touch      = NULL;
+    }
 }
 
 /**
@@ -651,7 +730,7 @@ DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to, DeviceChangedEvent *dc
  * Send an XI2 DeviceChangedEvent to all interested clients.
  */
 void
-XISendDeviceChangedEvent(DeviceIntPtr device, DeviceIntPtr master, DeviceChangedEvent *dce)
+XISendDeviceChangedEvent(DeviceIntPtr device, DeviceChangedEvent *dce)
 {
     xXIDeviceChangedEvent *dcce;
     int rc;
@@ -665,7 +744,7 @@ XISendDeviceChangedEvent(DeviceIntPtr device, DeviceIntPtr master, DeviceChanged
 
     /* we don't actually swap if there's a NullClient, swapping is done
      * later when event is delivered. */
-    SendEventToAllWindows(master, XI_DeviceChangedMask, (xEvent*)dcce, 1);
+    SendEventToAllWindows(device, XI_DeviceChangedMask, (xEvent*)dcce, 1);
     free(dcce);
 }
 
@@ -699,7 +778,57 @@ ChangeMasterDeviceClasses(DeviceIntPtr device, DeviceChangedEvent *dce)
 
     /* FIXME: the classes may have changed since we generated the event. */
     DeepCopyDeviceClasses(slave, device, dce);
-    XISendDeviceChangedEvent(slave, device, dce);
+    dce->deviceid = device->id;
+    XISendDeviceChangedEvent(device, dce);
+}
+
+/**
+ * Add state and motionMask to the filter for this event. The protocol
+ * supports some extra masks for motion when a button is down:
+ * ButtonXMotionMask and the DeviceButtonMotionMask to trigger only when at
+ * least one button (or that specific button is down). These masks need to
+ * be added to the filters for core/XI motion events.
+ *
+ * @param device The device to update the mask for
+ * @param state The current button state mask
+ * @param motion_mask The motion mask (DeviceButtonMotionMask or 0)
+ */
+static void
+UpdateDeviceMotionMask(DeviceIntPtr device, unsigned short state,
+                       Mask motion_mask)
+{
+    Mask mask;
+
+    mask = DevicePointerMotionMask | state | motion_mask;
+    SetMaskForEvent(device->id, mask, DeviceMotionNotify);
+    mask = PointerMotionMask | state | motion_mask;
+    SetMaskForEvent(device->id, mask, MotionNotify);
+}
+
+static void
+IncreaseButtonCount(DeviceIntPtr dev, int key, CARD8 *buttons_down,
+                    Mask *motion_mask, unsigned short *state)
+{
+    if (dev->valuator)
+        dev->valuator->motionHintWindow = NullWindow;
+
+    (*buttons_down)++;
+    *motion_mask = DeviceButtonMotionMask;
+    if (dev->button->map[key] <= 5)
+        *state |= (Button1Mask >> 1) << dev->button->map[key];
+}
+
+static void
+DecreaseButtonCount(DeviceIntPtr dev, int key, CARD8 *buttons_down,
+                    Mask *motion_mask, unsigned short *state)
+{
+    if (dev->valuator)
+        dev->valuator->motionHintWindow = NullWindow;
+
+    if (*buttons_down >= 1 && !--(*buttons_down))
+        *motion_mask = 0;
+    if (dev->button->map[key] <= 5)
+        *state &= ~((Button1Mask >> 1) << dev->button->map[key]);
 }
 
 /**
@@ -716,12 +845,12 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
 {
     int i;
     int key = 0,
-        bit = 0,
         last_valuator;
 
     KeyClassPtr k       = NULL;
     ButtonClassPtr b    = NULL;
     ValuatorClassPtr v  = NULL;
+    TouchClassPtr t     = NULL;
 
     /* This event is always the first we get, before the actual events with
      * the data. However, the way how the DDX is set up, "device" will
@@ -739,6 +868,9 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
         case ET_KeyRelease:
         case ET_ProximityIn:
         case ET_ProximityOut:
+        case ET_TouchBegin:
+        case ET_TouchUpdate:
+        case ET_TouchEnd:
             break;
         default:
             /* other events don't update the device */
@@ -748,9 +880,9 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
     k = device->key;
     v = device->valuator;
     b = device->button;
+    t = device->touch;
 
     key = event->detail.key;
-    bit = 1 << (key & 7);
 
     /* Update device axis */
     /* Check valuators first */
@@ -776,12 +908,9 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
 
     for (i = 0; i <= last_valuator && i < v->numAxes; i++)
     {
+        /* XXX: Relative/Absolute mode */
         if (BitIsOn(&event->valuators.mask, i))
-        {
-            /* XXX: Relative/Absolute mode */
             v->axisVal[i] = event->valuators.data[i];
-            v->axisVal[i] += (event->valuators.data_frac[i] * 1.0f / (1 << 16) / (1 << 16));
-        }
     }
 
     if (event->type == ET_KeyPress) {
@@ -805,7 +934,6 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
            device->valuator->motionHintWindow = NullWindow;
        set_key_up(device, key, KEY_PROCESSED);
     } else if (event->type == ET_ButtonPress) {
-        Mask mask;
         if (!b)
             return DONT_PROCESS;
 
@@ -813,22 +941,13 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
             return DONT_PROCESS;
 
         set_button_down(device, key, BUTTON_PROCESSED);
-       if (device->valuator)
-           device->valuator->motionHintWindow = NullWindow;
+
         if (!b->map[key])
             return DONT_PROCESS;
-        b->buttonsDown++;
-       b->motionMask = DeviceButtonMotionMask;
-        if (b->map[key] <= 5)
-           b->state |= (Button1Mask >> 1) << b->map[key];
-
-        /* Add state and motionMask to the filter for this event */
-        mask = DevicePointerMotionMask | b->state | b->motionMask;
-        SetMaskForEvent(device->id, mask, DeviceMotionNotify);
-        mask = PointerMotionMask | b->state | b->motionMask;
-        SetMaskForEvent(device->id, mask, MotionNotify);
+
+        IncreaseButtonCount(device, key, &b->buttonsDown, &b->motionMask, &b->state);
+        UpdateDeviceMotionMask(device, b->state, b->motionMask);
     } else if (event->type == ET_ButtonRelease) {
-        Mask mask;
         if (!b)
             return DONT_PROCESS;
 
@@ -854,108 +973,641 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
             }
         }
         set_button_up(device, key, BUTTON_PROCESSED);
-       if (device->valuator)
-           device->valuator->motionHintWindow = NullWindow;
         if (!b->map[key])
             return DONT_PROCESS;
-        if (b->buttonsDown >= 1 && !--b->buttonsDown)
-           b->motionMask = 0;
-       if (b->map[key] <= 5)
-           b->state &= ~((Button1Mask >> 1) << b->map[key]);
-
-        /* Add state and motionMask to the filter for this event */
-        mask = DevicePointerMotionMask | b->state | b->motionMask;
-        SetMaskForEvent(device->id, mask, DeviceMotionNotify);
-        mask = PointerMotionMask | b->state | b->motionMask;
-        SetMaskForEvent(device->id, mask, MotionNotify);
+
+        DecreaseButtonCount(device, key, &b->buttonsDown, &b->motionMask, &b->state);
+        UpdateDeviceMotionMask(device,  b->state, b->motionMask);
     } else if (event->type == ET_ProximityIn)
        device->proximity->in_proximity = TRUE;
     else if (event->type == ET_ProximityOut)
        device->proximity->in_proximity = FALSE;
+    else if (event->type == ET_TouchBegin) {
+        BUG_WARN(!b || !v);
+        BUG_WARN(!t);
+
+        if (!b || !t || !b->map[key])
+            return DONT_PROCESS;
+
+        if (!(event->flags & TOUCH_POINTER_EMULATED) ||
+            (event->flags & TOUCH_REPLAYING))
+            return DONT_PROCESS;
+
+        IncreaseButtonCount(device, key, &t->buttonsDown, &t->motionMask, &t->state);
+        UpdateDeviceMotionMask(device, t->state, DeviceButtonMotionMask);
+    } else if (event->type == ET_TouchEnd) {
+        BUG_WARN(!b || !v);
+        BUG_WARN(!t);
+
+        if (!b || !t || t->buttonsDown <= 0 || !b->map[key])
+            return DONT_PROCESS;
+
+        if (!(event->flags & TOUCH_POINTER_EMULATED))
+            return DONT_PROCESS;
+        if (!(event->flags & TOUCH_END))
+            return DONT_PROCESS;
+
+        DecreaseButtonCount(device, key, &t->buttonsDown, &t->motionMask, &t->state);
+        UpdateDeviceMotionMask(device, t->state, DeviceButtonMotionMask);
+    }
 
     return DEFAULT;
 }
 
 /**
- * Main device event processing function.
- * Called from when processing the events from the event queue.
+ * A client that does not have the TouchOwnership mask set may not receive a
+ * TouchBegin event if there is at least one grab active.
  *
+ * @return TRUE if the client selected for ownership events on the given
+ * window for this device, FALSE otherwise
  */
-void
-ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
+static inline Bool
+TouchClientWantsOwnershipEvents(ClientPtr client, DeviceIntPtr dev, WindowPtr win)
+{
+    InputClients *iclient;
+
+    nt_list_for_each_entry(iclient, wOtherInputMasks(win)->inputClients, next)
+    {
+        if (rClient(iclient) != client)
+            continue;
+
+        return xi2mask_isset(iclient->xi2mask, dev, XI_TouchOwnership);
+    }
+
+    return FALSE;
+}
+
+static void
+TouchSendOwnershipEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, int reason, XID resource)
+{
+    int nev, i;
+    InternalEvent *tel = InitEventList(GetMaximumEventsNum());
+
+    nev = GetTouchOwnershipEvents(tel, dev, ti, reason, resource, 0);
+    for (i = 0; i < nev; i++)
+        mieqProcessDeviceEvent(dev, tel + i, NULL);
+
+    FreeEventList(tel, GetMaximumEventsNum());
+}
+
+/**
+ * Attempts to deliver a touch event to the given client.
+ */
+static Bool
+DeliverOneTouchEvent(ClientPtr client, DeviceIntPtr dev, TouchPointInfoPtr ti,
+                     GrabPtr grab, WindowPtr win, InternalEvent *ev)
+{
+    int err;
+    xEvent *xi2;
+    Mask filter;
+    Window child = DeepestSpriteWin(&ti->sprite)->drawable.id;
+
+    /* FIXME: owner event handling */
+
+    /* If the client does not have the ownership mask set and is not
+     * the current owner of the touch, only pretend we delivered */
+    if (!grab && ti->num_grabs != 0 &&
+           !TouchClientWantsOwnershipEvents(client, dev,win))
+           return TRUE;
+
+    /* If we fail here, we're going to leave a client hanging. */
+    err = EventToXI2(ev, &xi2);
+    if (err != Success)
+        FatalError("[Xi] %s: XI2 conversion failed in %s"
+                   " (%d)\n", dev->name, __func__, err);
+
+    FixUpEventFromWindow(&ti->sprite, xi2, win, child, FALSE);
+    filter = GetEventFilter(dev, xi2);
+    if (XaceHook(XACE_RECEIVE_ACCESS, client, win, xi2, 1) != Success)
+        return FALSE;
+    err = TryClientEvents(client, dev, xi2, 1, filter, filter, NullGrab);
+    free(xi2);
+
+    /* Returning the value from TryClientEvents isn't useful, since all our
+     * resource-gone cleanups will update the delivery list anyway. */
+    return TRUE;
+}
+
+/**
+ * If the current owner has rejected the event, deliver the
+ * TouchOwnership/TouchBegin to the next item in the sprite stack.
+ */
+static void
+TouchPuntToNextOwner(DeviceIntPtr dev, TouchPointInfoPtr ti,
+                     TouchOwnershipEvent *ev)
+{
+    InternalEvent *tel = InitEventList(GetMaximumEventsNum());
+    ValuatorMask *mask = valuator_mask_new(2);
+    int i, nev;
+
+    /* Deliver the ownership */
+    if (ti->listeners[0].state == LISTENER_AWAITING_OWNER)
+        DeliverTouchEvents(dev, ti, (InternalEvent*)ev, ti->listeners[0].listener);
+    else if (ti->listeners[0].state == LISTENER_AWAITING_BEGIN)
+        TouchEventHistoryReplay(ti, dev, ti->listeners[0].listener);
+
+    /* If we've just removed the last grab and the touch has physically
+     * ended, send a TouchEnd event too and finalise the touch. */
+    if (ti->num_listeners == 1 && ti->num_grabs == 0 &&
+            ti->pending_finish)
+    {
+        int flags;
+        valuator_mask_set_double(mask, 0,
+                                 valuator_mask_get_double(ti->valuators, 0));
+        valuator_mask_set_double(mask, 1,
+                                 valuator_mask_get_double(ti->valuators, 1));
+
+        flags = TOUCH_CLIENT_ID;
+        if (ti->emulate_pointer)
+            flags |= TOUCH_POINTER_EMULATED;
+        nev = GetTouchEvents(tel, dev, ti->client_id, XI_TouchEnd, flags, mask);
+        for (i = 0; i < nev; i++)
+            DeliverTouchEvents(dev, ti, tel + i, 0);
+        TouchEndTouch(dev, ti);
+    }
+
+    valuator_mask_free(&mask);
+    FreeEventList(tel, GetMaximumEventsNum());
+}
+
+static void
+TouchEventRejected(DeviceIntPtr sourcedev, TouchPointInfoPtr ti,
+                   TouchOwnershipEvent *ev)
+{
+    InternalEvent *tel = InitEventList(GetMaximumEventsNum());
+    ValuatorMask *mask = valuator_mask_new(2);
+    Bool was_owner = (ev->resource == ti->listeners[0].listener);
+    void *grab;
+    int nev, i;
+
+
+    /* Send a TouchEnd event to the resource being removed, but only if they
+     * haven't received one yet already */
+    if (ti->listeners[0].state != LISTENER_HAS_END)
+    {
+        int flags;
+        valuator_mask_set_double(mask, 0,
+                                 valuator_mask_get_double(ti->valuators, 0));
+        valuator_mask_set_double(mask, 1,
+                                 valuator_mask_get_double(ti->valuators, 1));
+
+        flags = TOUCH_CLIENT_ID|TOUCH_REJECT;
+        if (ti->emulate_pointer)
+            flags |= TOUCH_POINTER_EMULATED;
+        nev = GetTouchEvents(tel, sourcedev, ti->client_id, XI_TouchEnd, flags, mask);
+        for (i = 0; i < nev; i++)
+            DeliverTouchEvents(sourcedev, ti, tel + i, ev->resource);
+    }
+
+    /* If there are no other listeners left, and the touchpoint is pending
+     * finish, then we can just kill it now. */
+    if (ti->num_listeners == 1 && ti->pending_finish)
+    {
+        TouchEndTouch(sourcedev, ti);
+        goto out;
+    }
+
+    /* Remove the resource from the listener list, updating
+     * ti->num_listeners, as well as ti->num_grabs if it was a grab. */
+    if (TouchRemoveListener(ti, ev->resource))
+    {
+        if (dixLookupResourceByType(&grab, ev->resource, RT_PASSIVEGRAB,
+                                    serverClient, DixGetAttrAccess) == Success)
+            ti->num_grabs--;
+    }
+
+    /* If the current owner was removed and there are further listeners, deliver
+     * the TouchOwnership or TouchBegin event to the new owner. */
+    if (ti->num_listeners > 0 && was_owner)
+        TouchPuntToNextOwner(sourcedev, ti, ev);
+
+out:
+    FreeEventList(tel, GetMaximumEventsNum());
+    valuator_mask_free(&mask);
+}
+
+/**
+ * Processes a TouchOwnership event, indicating a grab has accepted the touch
+ * it currently owns, or a grab or selection has been removed.  Will generate
+ * and send TouchEnd events to all clients removed from the delivery list, as
+ * well as possibly sending the new TouchOwnership event.  May end the
+ * touchpoint if it is pending finish.
+ */
+static void
+ProcessTouchOwnershipEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
+                           TouchOwnershipEvent *ev)
+{
+
+    if (ev->reason == XIRejectTouch)
+        TouchEventRejected(dev, ti, ev);
+    else if (ev->reason == XIAcceptTouch) {
+        int flags;
+        int nev, i;
+        ValuatorMask *mask;
+
+        InternalEvent *tel = InitEventList(GetMaximumEventsNum());
+
+        mask = valuator_mask_new(dev->valuator->numAxes);
+        valuator_mask_set_double(mask, 0,
+                                 valuator_mask_get_double(ti->valuators, 0));
+        valuator_mask_set_double(mask, 1,
+                                 valuator_mask_get_double(ti->valuators, 1));
+
+        /* FIXME: what about early acceptance? a client may accept before it
+         * owns the touch. */
+
+        /* The touch owner has accepted the touch.  Send TouchEnd events to
+         * everyone else, and truncate the list of listeners. */
+        flags = TOUCH_ACCEPT|TOUCH_CLIENT_ID;
+        if (ti->emulate_pointer)
+            flags |= TOUCH_POINTER_EMULATED;
+        nev = GetTouchEvents(tel, dev, ti->client_id, XI_TouchEnd,
+                             flags, mask);
+        for (i = 0; i < nev; i++)
+            DeliverTouchEvents(dev, ti, tel + i, 0);
+
+        FreeEventList(tel, GetMaximumEventsNum());
+        valuator_mask_free(&mask);
+
+        while (ti->num_listeners > 1)
+            TouchRemoveListener(ti, ti->listeners[1].listener);
+        /* Owner accepted after receiving end */
+        if (ti->listeners[0].state == LISTENER_HAS_END)
+            TouchEndTouch(dev, ti);
+    } else { /* this is the very first ownership event for a grab */
+        DeliverTouchEvents(dev, ti, (InternalEvent*)ev, ev->resource);
+    }
+}
+
+/**
+ * Copy the event's valuator information into the touchpoint, we may need
+ * this for emulated TouchEnd events.
+ */
+static void
+TouchCopyValuatorData(DeviceEvent *ev, TouchPointInfoPtr ti)
+{
+    int i;
+    for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++)
+        if (BitIsOn(ev->valuators.mask, i))
+            valuator_mask_set_double(ti->valuators, i, ev->valuators.data[i]);
+}
+
+/**
+ * Given a touch event and a potential listener, retrieve info needed for
+ * processing the event.
+ *
+ * @param dev The device generating the touch event.
+ * @param ti The touch point info record for the touch event.
+ * @param ev The touch event to process.
+ * @param listener The touch event listener that may receive the touch event.
+ * @param[out] client The client that should receive the touch event.
+ * @param[out] win The window to deliver the event on.
+ * @param[out] grab The grab to deliver the event through, if any.
+ * @param[out] mask The XI 2.x event mask of the grab or selection, if any.
+ * @return TRUE if an event should be delivered to the listener, FALSE
+ *         otherwise.
+ */
+static Bool
+RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
+                          InternalEvent *ev, TouchListener *listener,
+                          ClientPtr *client, WindowPtr *win, GrabPtr *grab,
+                          XI2Mask **mask)
+{
+     int rc;
+     InputClients *iclients = NULL;
+
+    if (listener->type == LISTENER_GRAB ||
+        listener->type == LISTENER_POINTER_GRAB)
+    {
+        rc = dixLookupResourceByType((pointer*)grab, listener->listener,
+                RT_PASSIVEGRAB,
+                serverClient, DixSendAccess);
+        if (rc != Success)
+        {
+            /* the grab doesn't exist but we have a grabbing listener - this
+             * is an implicit/active grab */
+            rc = dixLookupClient(client, listener->listener, serverClient, DixSendAccess);
+            if (rc != Success)
+                return FALSE;
+
+            *grab = dev->deviceGrab.grab;
+            if (!*grab)
+                return FALSE;
+        }
+
+        *client = rClient(*grab);
+        *win = (*grab)->window;
+        *mask = (*grab)->xi2mask;
+    } else {
+        if (listener->level == CORE)
+            rc = dixLookupWindow(win, listener->listener,
+                                 serverClient, DixSendAccess);
+        else
+            rc = dixLookupResourceByType((pointer*)win, listener->listener,
+                                         RT_INPUTCLIENT,
+                                         serverClient, DixSendAccess);
+        if (rc != Success)
+            return FALSE;
+
+
+        if (listener->level == XI2)
+        {
+            int evtype;
+            if (ti->emulate_pointer && listener->type == LISTENER_POINTER_REGULAR)
+                evtype = GetXI2Type(TouchGetPointerEventType(ev));
+            else
+                evtype = GetXI2Type(ev->any.type);
+
+            nt_list_for_each_entry(iclients, wOtherInputMasks(*win)->inputClients, next)
+                if (xi2mask_isset(iclients->xi2mask, dev, evtype))
+                    break;
+            BUG_WARN(!iclients);
+            if (!iclients)
+                return FALSE;
+        } else if (listener->level == XI)
+        {
+            int xi_type = GetXIType(TouchGetPointerEventType(ev));
+            Mask xi_filter = event_get_filter_from_type(dev, xi_type);
+            nt_list_for_each_entry(iclients, wOtherInputMasks(*win)->inputClients, next)
+                if (iclients->mask[dev->id] & xi_filter)
+                    break;
+            BUG_WARN(!iclients);
+            if (!iclients)
+                return FALSE;
+        } else
+        {
+            int coretype = GetCoreType(TouchGetPointerEventType(ev));
+            Mask core_filter = event_get_filter_from_type(dev, coretype);
+
+            /* all others */
+            nt_list_for_each_entry(iclients, (InputClients*)wOtherClients(*win), next)
+                if (iclients->mask[XIAllDevices] & core_filter)
+                    break;
+            /* if owner selected, iclients is NULL */
+        }
+
+        *client = iclients ? rClient(iclients) : wClient(*win);
+        *mask = iclients ? iclients->xi2mask : NULL;
+        *grab = NULL;
+    }
+
+    return TRUE;
+}
+
+static int
+DeliverTouchEmulatedEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
+                          TouchListener *listener, ClientPtr client,
+                          WindowPtr win, GrabPtr grab, XI2Mask *xi2mask)
+{
+    InternalEvent motion, button;
+    InternalEvent *ptrev = &motion;
+    int nevents;
+    DeviceIntPtr kbd;
+
+    /* We don't deliver pointer events to non-owners */
+    if (!TouchResourceIsOwner(ti, listener->listener))
+        return Success;
+
+    nevents = TouchConvertToPointerEvent(ev, &motion, &button);
+    BUG_WARN(nevents == 0);
+    if (nevents == 0)
+        return BadValue;
+
+    if (nevents > 1)
+        ptrev = &button;
+
+    kbd = GetMaster(dev, KEYBOARD_OR_FLOAT);
+    event_set_state(dev, kbd, &ptrev->device_event);
+    ptrev->device_event.corestate = event_get_corestate(dev, kbd);
+
+    if (grab)
+    {
+        /* this side-steps the usual activation mechansims, but... */
+        if (ev->any.type == ET_TouchBegin && !dev->deviceGrab.grab)
+                ActivatePassiveGrab(dev, grab, ptrev, ev); /* also delivers the event */
+        else {
+            int deliveries = 0;
+            /* 'grab' is the passive grab, but if the grab isn't active,
+             * don't deliver */
+            if (!dev->deviceGrab.grab)
+                return Success;
+
+            if (grab->ownerEvents)
+            {
+                WindowPtr focus = NullWindow;
+                WindowPtr win = dev->spriteInfo->sprite->win;
+                deliveries = DeliverDeviceEvents(win, ptrev, grab, focus, dev);
+            }
+
+            if (!deliveries)
+                DeliverOneGrabbedEvent(ptrev, dev, grab->grabtype);
+
+            if (ev->any.type == ET_TouchEnd &&
+                !dev->button->buttonsDown &&
+                dev->deviceGrab.fromPassiveGrab &&
+                GrabIsPointerGrab(grab))
+                (*dev->deviceGrab.DeactivateGrab)(dev);
+        }
+    } else
+    {
+        GrabPtr devgrab = dev->deviceGrab.grab;
+
+        DeliverDeviceEvents(win, ptrev, grab, win, dev);
+        /* FIXME: bad hack
+         * Implicit passive grab activated in response to this event. Store
+         * the event.
+         */
+        if (!devgrab && dev->deviceGrab.grab && dev->deviceGrab.implicitGrab)
+        {
+            TouchListener *listener;
+
+            devgrab = dev->deviceGrab.grab;
+
+            *dev->deviceGrab.sync.event = ev->device_event;
+
+            /* The listener array has a sequence of grabs and then one event
+             * selection. Implicit grab activation occurs through delivering an
+             * event selection. Thus, we update the last listener in the array.
+             */
+            listener = &ti->listeners[ti->num_listeners - 1];
+            listener->listener = devgrab->resource;
+
+            if (devgrab->grabtype != XI2 ||
+                devgrab->type != XI_TouchBegin)
+                listener->type = LISTENER_POINTER_GRAB;
+            else
+                listener->type = LISTENER_GRAB;
+        }
+
+    }
+    if (ev->any.type == ET_TouchBegin)
+        listener->state = LISTENER_IS_OWNER;
+    else if (ev->any.type == ET_TouchEnd)
+        listener->state = LISTENER_HAS_END;
+
+    return Success;
+}
+
+
+
+
+static void
+DeliverEmulatedMotionEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
+                           InternalEvent *ev)
+{
+    InternalEvent motion;
+
+    if (ti->num_listeners)
+    {
+        ClientPtr client;
+        WindowPtr win;
+        GrabPtr grab;
+        XI2Mask *mask;
+
+        if (ti->listeners[0].type != LISTENER_POINTER_REGULAR ||
+            ti->listeners[0].type != LISTENER_POINTER_GRAB)
+            return;
+
+        motion = *ev;
+        motion.any.type = ET_TouchUpdate;
+        motion.device_event.detail.button = 0;
+
+        if (!RetrieveTouchDeliveryData(dev, ti, &motion,
+                                       &ti->listeners[0], &client, &win, &grab,
+                                       &mask))
+            return;
+
+        /* There may be a pointer grab on the device */
+        if (!grab)
+        {
+            grab = dev->deviceGrab.grab;
+            if (grab)
+            {
+                win = grab->window;
+                mask = grab->xi2mask;
+                client = rClient(grab);
+            }
+        }
+
+        DeliverTouchEmulatedEvent(dev, ti, &motion, &ti->listeners[0], client, win, grab, mask);
+    } else {
+        InternalEvent button;
+        int converted;
+        converted = TouchConvertToPointerEvent(ev, &motion, &button);
+
+        BUG_WARN(converted == 0);
+        if (converted)
+            ProcessOtherEvent(&motion, dev);
+    }
+}
+
+/**
+ * Processes and delivers a TouchBegin, TouchUpdate, or a
+ * TouchEnd event.
+ *
+ * Due to having rather different delivery semantics (see the Xi 2.2 protocol
+ * spec for more information), this implements its own grab and event-selection
+ * delivery logic.
+ */
+static void
+ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev)
+{
+    TouchClassPtr t = dev->touch;
+    TouchPointInfoPtr ti;
+    uint32_t touchid;
+    int type = ev->any.type;
+    int emulate_pointer = !!(ev->device_event.flags & TOUCH_POINTER_EMULATED);
+
+    if (!t)
+        return;
+
+    if (ev->any.type == ET_TouchOwnership)
+        touchid = ev->touch_ownership_event.touchid;
+    else
+        touchid = ev->device_event.touchid;
+
+    if (type == ET_TouchBegin) {
+        ti = TouchBeginTouch(dev, ev->device_event.sourceid, touchid,
+                             emulate_pointer);
+    } else
+        ti = TouchFindByClientID(dev, touchid);
+
+    if (!ti)
+    {
+        DebugF("[Xi] %s: Failed to get event %d for touchpoint %d\n",
+               dev->name, type, touchid);
+        return;
+    }
+
+
+    /* if emulate_pointer is set, emulate the motion event right
+     * here, so we can ignore it for button event emulation. TouchUpdate
+     * events which _only_ emulate motion just work normally */
+    if (emulate_pointer && ev->any.type != ET_TouchUpdate)
+        DeliverEmulatedMotionEvent(dev, ti, ev);
+    if (emulate_pointer && IsMaster(dev))
+        CheckMotion(&ev->device_event, dev);
+
+    /* Make sure we have a valid window trace for event delivery; must be
+     * called after event type mutation. */
+    /* FIXME: check this */
+    if (!TouchEnsureSprite(dev, ti, ev))
+        return;
+
+    /* TouchOwnership events are handled separately from the rest, as they
+     * have more complex semantics. */
+    if (ev->any.type == ET_TouchOwnership)
+        ProcessTouchOwnershipEvent(dev, ti, &ev->touch_ownership_event);
+    else
+    {
+        TouchCopyValuatorData(&ev->device_event, ti);
+        /* WARNING: the event type may change to TouchUpdate in
+         * DeliverTouchEvents if a TouchEnd was delivered to a grabbing
+         * owner */
+        DeliverTouchEvents(dev, ti, (InternalEvent *) ev, 0);
+        if (ev->any.type == ET_TouchEnd)
+            TouchEndTouch(dev, ti);
+    }
+}
+
+
+/**
+ * Process DeviceEvents and DeviceChangedEvents.
+ */
+static void
+ProcessDeviceEvent(InternalEvent *ev, DeviceIntPtr device)
 {
     GrabPtr grab;
     Bool deactivateDeviceGrab = FALSE;
     int key = 0, rootX, rootY;
     ButtonClassPtr b;
-    KeyClassPtr k;
-    ValuatorClassPtr v;
     int ret = 0;
-    int state, i;
+    int corestate;
     DeviceIntPtr mouse = NULL, kbd = NULL;
     DeviceEvent *event = &ev->device_event;
 
-    verify_internal_event(ev);
-
-    if (ev->any.type == ET_RawKeyPress ||
-        ev->any.type == ET_RawKeyRelease ||
-        ev->any.type == ET_RawButtonPress ||
-        ev->any.type == ET_RawButtonRelease ||
-        ev->any.type == ET_RawMotion)
-    {
-        DeliverRawEvent(&ev->raw_event, device);
-        return;
-    }
-
     if (IsPointerDevice(device))
     {
-        kbd = GetPairedDevice(device);
+        kbd = GetMaster(device, KEYBOARD_OR_FLOAT);
         mouse = device;
         if (!kbd->key) /* can happen with floating SDs */
             kbd = NULL;
     } else
     {
-        mouse = GetPairedDevice(device);
+        mouse = GetMaster(device, POINTER_OR_FLOAT);
         kbd = device;
         if (!mouse->valuator || !mouse->button) /* may be float. SDs */
             mouse = NULL;
     }
 
-    /* State needs to be assembled BEFORE the device is updated. */
-    state = (kbd && kbd->key) ? XkbStateFieldFromRec(&kbd->key->xkbInfo->state) : 0;
-    state |= (mouse && mouse->button) ? (mouse->button->state) : 0;
-
-    for (i = 0; mouse && mouse->button && i < mouse->button->numButtons; i++)
-        if (BitIsOn(mouse->button->down, i))
-            SetBit(event->buttons, mouse->button->map[i]);
-
-    if (kbd && kbd->key)
-    {
-        XkbStatePtr state;
-        /* we need the state before the event happens */
-        if (event->type == ET_KeyPress || event->type == ET_KeyRelease)
-            state = &kbd->key->xkbInfo->prev_state;
-        else
-            state = &kbd->key->xkbInfo->state;
-
-        event->mods.base = state->base_mods;
-        event->mods.latched = state->latched_mods;
-        event->mods.locked = state->locked_mods;
-        event->mods.effective = state->mods;
-
-        event->group.base = state->base_group;
-        event->group.latched = state->latched_group;
-        event->group.locked = state->locked_group;
-        event->group.effective = state->group;
-    }
+    corestate = event_get_corestate(mouse, kbd);
+    event_set_state(mouse, kbd, event);
 
     ret = UpdateDeviceState(device, event);
     if (ret == DONT_PROCESS)
         return;
 
-    v = device->valuator;
     b = device->button;
-    k = device->key;
 
     if (IsMaster(device) || IsFloating(device))
         CheckMotion(event, device);
@@ -973,7 +1625,7 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
             event->root_x = rootX;
             event->root_y = rootY;
             NoticeEventTime((InternalEvent*)event);
-            event->corestate = state;
+            event->corestate = corestate;
             key = event->detail.key;
             break;
         default:
@@ -1004,17 +1656,13 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
         case ET_KeyRelease:
             if (grab && device->deviceGrab.fromPassiveGrab &&
                 (key == device->deviceGrab.activatingKey) &&
-                (device->deviceGrab.grab->type == KeyPress ||
-                 device->deviceGrab.grab->type == DeviceKeyPress ||
-                 device->deviceGrab.grab->type == XI_KeyPress))
+                GrabIsKeyboardGrab(device->deviceGrab.grab))
                 deactivateDeviceGrab = TRUE;
             break;
         case ET_ButtonPress:
-            event->detail.button = b->map[key];
-            if (!event->detail.button) { /* there's no button 0 */
-                event->detail.button = key;
+            if (b->map[key] == 0) /* there's no button 0 */
                 return;
-            }
+            event->detail.button = b->map[key];
             if (!grab && CheckDeviceGrabs(device, event, 0))
             {
                 /* if a passive grab was activated, the event has been sent
@@ -1023,16 +1671,12 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
             }
             break;
         case ET_ButtonRelease:
-            event->detail.button = b->map[key];
-            if (!event->detail.button) { /* there's no button 0 */
-                event->detail.button = key;
+            if (b->map[key] == 0) /* there's no button 0 */
                 return;
-            }
+            event->detail.button = b->map[key];
             if (grab && !b->buttonsDown &&
                 device->deviceGrab.fromPassiveGrab &&
-                (device->deviceGrab.grab->type == ButtonPress ||
-                 device->deviceGrab.grab->type == DeviceButtonPress ||
-                 device->deviceGrab.grab->type == XI_ButtonPress))
+                GrabIsPointerGrab(device->deviceGrab.grab))
                 deactivateDeviceGrab = TRUE;
         default:
             break;
@@ -1041,7 +1685,7 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
 
     if (grab)
         DeliverGrabbedEvent((InternalEvent*)event, device, deactivateDeviceGrab);
-    else if (device->focus && !IsPointerEvent((InternalEvent*)ev))
+    else if (device->focus && !IsPointerEvent(ev))
         DeliverFocusedEvent(device, (InternalEvent*)event,
                             GetSpriteWindow(device));
     else
@@ -1053,6 +1697,206 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
     event->detail.key = key;
 }
 
+/**
+ * Main device event processing function.
+ * Called from when processing the events from the event queue.
+ *
+ */
+void
+ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
+{
+    verify_internal_event(ev);
+
+    switch(ev->any.type)
+    {
+        case  ET_RawKeyPress:
+        case  ET_RawKeyRelease:
+        case  ET_RawButtonPress:
+        case  ET_RawButtonRelease:
+        case  ET_RawMotion:
+        case  ET_RawTouchBegin:
+        case  ET_RawTouchUpdate:
+        case  ET_RawTouchEnd:
+            DeliverRawEvent(&ev->raw_event, device);
+            break;
+        case  ET_TouchBegin:
+        case  ET_TouchUpdate:
+        case  ET_TouchOwnership:
+        case  ET_TouchEnd:
+            ProcessTouchEvent(ev, device);
+            break;
+        default:
+            ProcessDeviceEvent(ev, device);
+            break;
+    }
+}
+
+static int
+DeliverTouchBeginEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
+                       TouchListener *listener, ClientPtr client,
+                       WindowPtr win, GrabPtr grab, XI2Mask *xi2mask)
+{
+    enum TouchListenerState state;
+    int rc = Success;
+    Bool has_ownershipmask;
+
+    if (listener->type == LISTENER_POINTER_REGULAR ||
+        listener->type == LISTENER_POINTER_GRAB)
+    {
+        rc = DeliverTouchEmulatedEvent(dev, ti, ev, listener, client, win,
+                                       grab, xi2mask);
+        goto out;
+    }
+
+
+    has_ownershipmask = xi2mask_isset(xi2mask, dev, XI_TouchOwnership);
+
+    if (TouchResourceIsOwner(ti, listener->listener) || has_ownershipmask)
+        rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev);
+    if (!TouchResourceIsOwner(ti, listener->listener))
+    {
+        if (has_ownershipmask)
+            state = LISTENER_AWAITING_OWNER;
+        else
+            state = LISTENER_AWAITING_BEGIN;
+    } else
+    {
+        if (has_ownershipmask)
+            TouchSendOwnershipEvent(dev, ti, 0, listener->listener);
+        state = LISTENER_IS_OWNER;
+    }
+    listener->state = state;
+
+out:
+    return rc;
+}
+
+static int
+DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
+                     TouchListener *listener, ClientPtr client,
+                     WindowPtr win, GrabPtr grab, XI2Mask *xi2mask)
+{
+    int rc = Success;
+
+    if (listener->type == LISTENER_POINTER_REGULAR ||
+        listener->type == LISTENER_POINTER_GRAB)
+    {
+        rc = DeliverTouchEmulatedEvent(dev, ti, ev, listener, client, win,
+                                       grab, xi2mask);
+        goto out;
+    }
+
+    /* Event in response to reject */
+    if (ev->device_event.flags & TOUCH_REJECT)
+    {
+        if (listener->state != LISTENER_HAS_END)
+            rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev);
+        listener->state = LISTENER_HAS_END;
+    } else if (TouchResourceIsOwner(ti, listener->listener))
+    {
+        /* FIXME: what about early acceptance */
+        if (!(ev->device_event.flags & TOUCH_ACCEPT))
+        {
+            if (listener->state != LISTENER_HAS_END)
+                rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev);
+            listener->state = LISTENER_HAS_END;
+        }
+        if ((ti->num_listeners > 1 ||
+             (listener->type == LISTENER_GRAB &&
+              xi2mask_isset(xi2mask, dev, XI_TouchOwnership))) &&
+            (ev->device_event.flags & (TOUCH_ACCEPT|TOUCH_REJECT)) == 0)
+        {
+            ev->any.type = ET_TouchUpdate;
+            ev->device_event.flags |= TOUCH_PENDING_END;
+            ti->pending_finish = TRUE;
+        }
+    }
+
+out:
+    return rc;
+}
+
+static int
+DeliverTouchEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
+                  TouchListener *listener, ClientPtr client,
+                  WindowPtr win, GrabPtr grab, XI2Mask *xi2mask)
+{
+    Bool has_ownershipmask = FALSE;
+    int rc = Success;
+
+    if (xi2mask)
+        has_ownershipmask = xi2mask_isset(xi2mask, dev, XI_TouchOwnership);
+
+    if (ev->any.type == ET_TouchOwnership)
+    {
+        ev->touch_ownership_event.deviceid = dev->id;
+        if (!TouchResourceIsOwner(ti, listener->listener))
+            goto out;
+        rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev);
+        listener->state = LISTENER_IS_OWNER;
+    } else
+        ev->device_event.deviceid = dev->id;
+
+    if (ev->any.type == ET_TouchBegin)
+    {
+        rc = DeliverTouchBeginEvent(dev, ti, ev, listener, client, win, grab, xi2mask);
+    } else if (ev->any.type == ET_TouchUpdate)
+    {
+        if (listener->type == LISTENER_POINTER_REGULAR ||
+            listener->type == LISTENER_POINTER_GRAB)
+            DeliverTouchEmulatedEvent(dev, ti, ev, listener, client, win, grab, xi2mask);
+        else if (TouchResourceIsOwner(ti, listener->listener) || has_ownershipmask)
+            rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev);
+    } else if (ev->any.type == ET_TouchEnd)
+        rc = DeliverTouchEndEvent(dev, ti, ev, listener, client, win, grab, xi2mask);
+
+out:
+    return rc;
+}
+
+/**
+ * Delivers a touch events to all interested clients.  For TouchBegin events,
+ * will update ti->listeners, ti->num_listeners, and ti->num_grabs.
+ * May also mutate ev (type and flags) upon successful delivery.  If
+ * @resource is non-zero, will only attempt delivery to the owner of that
+ * resource.
+ *
+ * @return TRUE if the event was delivered at least once, FALSE otherwise
+ */
+void
+DeliverTouchEvents(DeviceIntPtr dev, TouchPointInfoPtr ti,
+                   InternalEvent *ev, XID resource)
+{
+    int i;
+
+    if (ev->any.type == ET_TouchBegin &&
+        !(ev->device_event.flags & (TOUCH_CLIENT_ID|TOUCH_REPLAYING)))
+        TouchSetupListeners(dev, ti, ev);
+
+    TouchEventHistoryPush(ti, &ev->device_event);
+
+    for (i = 0; i < ti->num_listeners; i++)
+    {
+        GrabPtr grab = NULL;
+        ClientPtr client;
+        WindowPtr win;
+        XI2Mask *mask;
+        TouchListener *listener = &ti->listeners[i];
+
+        if (resource && listener->listener != resource)
+            continue;
+
+        if (!RetrieveTouchDeliveryData(dev, ti, ev, listener, &client, &win,
+                                       &grab, &mask))
+            continue;
+
+        DeliverTouchEvent(dev, ti, ev, listener, client, win, grab, mask);
+    }
+
+    if (ti->emulate_pointer)
+        UpdateDeviceState(dev, &ev->device_event);
+}
+
 int
 InitProximityClassDeviceStruct(DeviceIntPtr dev)
 {
@@ -1076,16 +1920,16 @@ InitProximityClassDeviceStruct(DeviceIntPtr dev)
  *
  * @see InitValuatorClassDeviceStruct
  */
-void
+Bool
 InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval, int maxval,
                       int resolution, int min_res, int max_res, int mode)
 {
     AxisInfoPtr ax;
 
-    if (!dev || !dev->valuator || minval > maxval)
-        return;
+    if (!dev || !dev->valuator || (minval > maxval && mode == Absolute))
+        return FALSE;
     if (axnum >= dev->valuator->numAxes)
-        return;
+        return FALSE;
 
     ax = dev->valuator->axes + axnum;
 
@@ -1099,6 +1943,68 @@ InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval, int
 
     if (mode & OutOfProximity)
         dev->proximity->in_proximity = FALSE;
+
+    return SetScrollValuator(dev, axnum, SCROLL_TYPE_NONE, 0, SCROLL_FLAG_NONE);
+}
+
+/**
+ * Set the given axis number as a scrolling valuator.
+ */
+Bool
+SetScrollValuator(DeviceIntPtr dev, int axnum, enum ScrollType type, double increment, int flags)
+{
+    AxisInfoPtr ax;
+    int *current_ax;
+    InternalEvent dce;
+    DeviceIntPtr master;
+
+    if (!dev || !dev->valuator || axnum >= dev->valuator->numAxes)
+        return FALSE;
+
+    switch (type)
+    {
+        case SCROLL_TYPE_VERTICAL:
+            current_ax = &dev->valuator->v_scroll_axis;
+            break;
+        case SCROLL_TYPE_HORIZONTAL:
+            current_ax = &dev->valuator->h_scroll_axis;
+            break;
+        case SCROLL_TYPE_NONE:
+            ax = &dev->valuator->axes[axnum];
+            ax->scroll.type = type;
+            return TRUE;
+        default:
+            return FALSE;
+    }
+
+    if (increment == 0.0)
+        return FALSE;
+
+    if (*current_ax != -1 && axnum != *current_ax)
+    {
+        ax = &dev->valuator->axes[*current_ax];
+        if (ax->scroll.type == type &&
+            (flags & SCROLL_FLAG_PREFERRED) && (ax->scroll.flags & SCROLL_FLAG_PREFERRED))
+            return FALSE;
+    }
+    *current_ax = axnum;
+
+    ax = &dev->valuator->axes[axnum];
+    ax->scroll.type = type;
+    ax->scroll.increment = increment;
+    ax->scroll.flags = flags;
+
+    master = GetMaster(dev, MASTER_ATTACHED);
+    CreateClassesChangedEvent(&dce, master, dev, DEVCHANGE_POINTER_EVENT | DEVCHANGE_DEVICE_CHANGE);
+    XISendDeviceChangedEvent(dev, &dce.changed_event);
+
+    /* if the current slave is us, update the master. If not, we'll update
+     * whenever the next slave switch happens anyway. CMDC sends the event
+     * for us */
+    if (master && master->lastSlave == dev)
+        ChangeMasterDeviceClasses(master, &dce.changed_event);
+
+    return TRUE;
 }
 
 static void
@@ -1338,26 +2244,28 @@ DeviceFocusEvent(DeviceIntPtr dev, int type, int mode, int detail,
 int
 CheckGrabValues(ClientPtr client, GrabParameters* param)
 {
-    if (param->grabtype != GRABTYPE_CORE &&
-        param->grabtype != GRABTYPE_XI &&
-        param->grabtype != GRABTYPE_XI2)
+    if (param->grabtype != CORE &&
+        param->grabtype != XI &&
+        param->grabtype != XI2)
     {
         ErrorF("[Xi] grabtype is invalid. This is a bug.\n");
         return BadImplementation;
     }
 
     if ((param->this_device_mode != GrabModeSync) &&
-       (param->this_device_mode != GrabModeAsync)) {
+       (param->this_device_mode != GrabModeAsync) &&
+        (param->this_device_mode != XIGrabModeTouch)) {
        client->errorValue = param->this_device_mode;
        return BadValue;
     }
     if ((param->other_devices_mode != GrabModeSync) &&
-       (param->other_devices_mode != GrabModeAsync)) {
+       (param->other_devices_mode != GrabModeAsync) &&
+        (param->other_devices_mode != XIGrabModeTouch)) {
        client->errorValue = param->other_devices_mode;
        return BadValue;
     }
 
-    if (param->grabtype != GRABTYPE_XI2 && (param->modifiers != AnyModifier) &&
+    if (param->grabtype != XI2 && (param->modifiers != AnyModifier) &&
         (param->modifiers & ~AllModifiersMask)) {
        client->errorValue = param->modifiers;
        return BadValue;
@@ -1372,7 +2280,7 @@ CheckGrabValues(ClientPtr client, GrabParameters* param)
 
 int
 GrabButton(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device,
-           int button, GrabParameters *param, GrabType grabtype,
+           int button, GrabParameters *param, enum InputLevel grabtype,
           GrabMask *mask)
 {
     WindowPtr pWin, confineTo;
@@ -1412,9 +2320,9 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device,
     if (rc != Success)
        return rc;
 
-    if (grabtype == GRABTYPE_XI)
+    if (grabtype == XI)
         type = DeviceButtonPress;
-    else if (grabtype == GRABTYPE_XI2)
+    else if (grabtype == XI2)
         type = XI_ButtonPress;
 
     grab = CreateGrab(client->index, dev, modifier_device, pWin, grabtype,
@@ -1425,12 +2333,12 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device,
 }
 
 /**
- * Grab the given key. If grabtype is GRABTYPE_XI, the key is a keycode. If
- * grabtype is GRABTYPE_XI2, the key is a keysym.
+ * Grab the given key. If grabtype is XI, the key is a keycode. If
+ * grabtype is XI2, the key is a keysym.
  */
 int
 GrabKey(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device,
-        int key, GrabParameters *param, GrabType grabtype, GrabMask *mask)
+        int key, GrabParameters *param, enum InputLevel grabtype, GrabMask *mask)
 {
     WindowPtr pWin;
     GrabPtr grab;
@@ -1443,7 +2351,7 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device,
         return rc;
     if ((dev->id != XIAllDevices && dev->id != XIAllMasterDevices) && k == NULL)
        return BadMatch;
-    if (grabtype == GRABTYPE_XI)
+    if (grabtype == XI)
     {
         if ((key > k->xkbInfo->desc->max_key_code ||
                     key < k->xkbInfo->desc->min_key_code)
@@ -1452,7 +2360,7 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device,
             return BadValue;
         }
         type = DeviceKeyPress;
-    } else if (grabtype == GRABTYPE_XI2)
+    } else if (grabtype == XI2)
         type = XI_KeyPress;
 
     rc = dixLookupWindow(&pWin, param->grabWindow, client, DixSetAttrAccess);
@@ -1507,7 +2415,7 @@ GrabWindow(ClientPtr client, DeviceIntPtr dev, int type,
     if (rc != Success)
        return rc;
 
-    grab = CreateGrab(client->index, dev, dev, pWin, GRABTYPE_XI2,
+    grab = CreateGrab(client->index, dev, dev, pWin, XI2,
                       mask, param, (type == XIGrabtypeEnter) ? XI_Enter : XI_FocusIn,
                       0, NULL, cursor);
 
@@ -1517,6 +2425,34 @@ GrabWindow(ClientPtr client, DeviceIntPtr dev, int type,
     return AddPassiveGrabToList(client, grab);
 }
 
+/* Touch grab */
+int
+GrabTouch(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr mod_dev,
+          GrabParameters *param, GrabMask *mask)
+{
+    WindowPtr pWin;
+    GrabPtr grab;
+    int rc;
+
+    rc = CheckGrabValues(client, param);
+    if (rc != Success)
+        return rc;
+
+    rc = dixLookupWindow(&pWin, param->grabWindow, client, DixSetAttrAccess);
+    if (rc != Success)
+       return rc;
+    rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixGrabAccess);
+    if (rc != Success)
+       return rc;
+
+    grab = CreateGrab(client->index, dev, mod_dev, pWin, XI2,
+                      mask, param, XI_TouchBegin, 0, NullWindow, NullCursor);
+    if (!grab)
+        return BadAlloc;
+
+    return AddPassiveGrabToList(client, grab);
+}
+
 int
 SelectForWindow(DeviceIntPtr dev, WindowPtr pWin, ClientPtr client,
                Mask mask, Mask exclusivemasks)
@@ -1574,6 +2510,20 @@ SelectForWindow(DeviceIntPtr dev, WindowPtr pWin, ClientPtr client,
     return Success;
 }
 
+static void
+FreeInputClient(InputClientsPtr *other)
+{
+    xi2mask_free(&(*other)->xi2mask);
+    free(*other);
+    *other = NULL;
+}
+
+static InputClientsPtr
+AllocInputClient(void)
+{
+    return calloc(1, sizeof(InputClients));
+}
+
 int
 AddExtensionClient(WindowPtr pWin, ClientPtr client, Mask mask, int mskidx)
 {
@@ -1581,11 +2531,14 @@ AddExtensionClient(WindowPtr pWin, ClientPtr client, Mask mask, int mskidx)
 
     if (!pWin->optional && !MakeWindowOptional(pWin))
        return BadAlloc;
-    others = calloc(1, sizeof(InputClients));
+    others = AllocInputClient();
     if (!others)
        return BadAlloc;
     if (!pWin->optional->inputMasks && !MakeInputMasks(pWin))
        goto bail;
+    others->xi2mask = xi2mask_new();
+    if (!others->xi2mask)
+        goto bail;
     others->mask[mskidx] = mask;
     others->resource = FakeClientID(client->index);
     others->next = pWin->optional->inputMasks->inputClients;
@@ -1595,7 +2548,7 @@ AddExtensionClient(WindowPtr pWin, ClientPtr client, Mask mask, int mskidx)
     return Success;
 
 bail:
-    free(others);
+    FreeInputClient(&others);
     return BadAlloc;
 }
 
@@ -1607,30 +2560,41 @@ MakeInputMasks(WindowPtr pWin)
     imasks = calloc(1, sizeof(struct _OtherInputMasks));
     if (!imasks)
        return FALSE;
+    imasks->xi2mask = xi2mask_new();
+    if (!imasks->xi2mask)
+    {
+        free(imasks);
+        return FALSE;
+    }
     pWin->optional->inputMasks = imasks;
     return TRUE;
 }
 
+static void
+FreeInputMask(OtherInputMasks **imask)
+{
+    xi2mask_free(&(*imask)->xi2mask);
+    free(*imask);
+    *imask = NULL;
+}
+
 void
 RecalculateDeviceDeliverableEvents(WindowPtr pWin)
 {
     InputClientsPtr others;
     struct _OtherInputMasks *inputMasks;       /* default: NULL */
     WindowPtr pChild, tmp;
-    int i, j;
+    int i;
 
     pChild = pWin;
     while (1) {
        if ((inputMasks = wOtherInputMasks(pChild)) != 0) {
-            for (i = 0; i < EMASKSIZE; i++)
-                memset(inputMasks->xi2mask[i], 0, sizeof(inputMasks->xi2mask[i]));
+            xi2mask_zero(inputMasks->xi2mask, -1);
            for (others = inputMasks->inputClients; others;
                 others = others->next) {
                for (i = 0; i < EMASKSIZE; i++)
                    inputMasks->inputEvents[i] |= others->mask[i];
-                for (i = 0; i < EMASKSIZE; i++)
-                    for (j = 0; j < XI2MASKSIZE; j++)
-                        inputMasks->xi2mask[i][j] |= others->xi2mask[i][j];
+                xi2mask_merge(inputMasks->xi2mask, others->xi2mask);
            }
            for (i = 0; i < EMASKSIZE; i++)
                inputMasks->deliverableEvents[i] = inputMasks->inputEvents[i];
@@ -1667,14 +2631,15 @@ InputClientGone(WindowPtr pWin, XID id)
        if (other->resource == id) {
            if (prev) {
                prev->next = other->next;
-               free(other);
+               FreeInputClient(&other);
            } else if (!(other->next)) {
                if (ShouldFreeInputMasks(pWin, TRUE)) {
-                   wOtherInputMasks(pWin)->inputClients = other->next;
-                   free(wOtherInputMasks(pWin));
+                   OtherInputMasks *mask = wOtherInputMasks(pWin);
+                   mask->inputClients = other->next;
+                   FreeInputMask(&mask);
                    pWin->optional->inputMasks = (OtherInputMasks *) NULL;
                    CheckWindowOptionalNeed(pWin);
-                   free(other);
+                   FreeInputClient(&other);
                } else {
                    other->resource = FakeClientID(0);
                    if (!AddResource(other->resource, RT_INPUTCLIENT,
@@ -1683,7 +2648,7 @@ InputClientGone(WindowPtr pWin, XID id)
                }
            } else {
                wOtherInputMasks(pWin)->inputClients = other->next;
-               free(other);
+               FreeInputClient(&other);
            }
            RecalculateDeviceDeliverableEvents(pWin);
            return Success;
@@ -1693,6 +2658,36 @@ InputClientGone(WindowPtr pWin, XID id)
     FatalError("client not on device event list");
 }
 
+/**
+ * Search for window in each touch trace for each device. Remove the window
+ * and all its subwindows from the trace when found. The initial window
+ * order is preserved.
+ */
+void WindowGone(WindowPtr win)
+{
+    DeviceIntPtr dev;
+
+    for (dev = inputInfo.devices; dev; dev = dev->next) {
+        TouchClassPtr t = dev->touch;
+        int i;
+
+        if (!t)
+            continue;
+
+        for (i = 0; i < t->num_touches; i++) {
+            SpritePtr sprite = &t->touches[i].sprite;
+            int j;
+
+            for (j = 0; j < sprite->spriteTraceGood; j++) {
+                if (sprite->spriteTrace[j] == win) {
+                    sprite->spriteTraceGood = j;
+                    break;
+                }
+            }
+        }
+    }
+}
+
 int
 SendEvent(ClientPtr client, DeviceIntPtr d, Window dest, Bool propagate,
          xEvent * ev, Mask mask, int count)
@@ -1949,20 +2944,25 @@ CheckDeviceGrabAndHintWindow(WindowPtr pWin, int type,
        dev->valuator->motionHintWindow = pWin;
     else if ((type == DeviceButtonPress) && (!grab) &&
             (deliveryMask & DeviceButtonGrabMask)) {
-       GrabRec tempGrab;
+       GrabPtr tempGrab;
 
-       tempGrab.device = dev;
-       tempGrab.resource = client->clientAsMask;
-       tempGrab.window = pWin;
-       tempGrab.ownerEvents =
+       tempGrab = AllocGrab();
+       if (!tempGrab)
+           return;
+
+       tempGrab->device = dev;
+       tempGrab->resource = client->clientAsMask;
+       tempGrab->window = pWin;
+       tempGrab->ownerEvents =
            (deliveryMask & DeviceOwnerGrabButtonMask) ? TRUE : FALSE;
-       tempGrab.eventMask = deliveryMask;
-       tempGrab.keyboardMode = GrabModeAsync;
-       tempGrab.pointerMode = GrabModeAsync;
-       tempGrab.confineTo = NullWindow;
-       tempGrab.cursor = NullCursor;
-        tempGrab.next = NULL;
-       (*dev->deviceGrab.ActivateGrab) (dev, &tempGrab, currentTime, TRUE);
+       tempGrab->eventMask = deliveryMask;
+       tempGrab->keyboardMode = GrabModeAsync;
+       tempGrab->pointerMode = GrabModeAsync;
+       tempGrab->confineTo = NullWindow;
+       tempGrab->cursor = NullCursor;
+       tempGrab->next = NULL;
+       (*dev->deviceGrab.ActivateGrab) (dev, tempGrab, currentTime, TRUE);
+       FreeGrab(tempGrab);
     }
 }
 
@@ -2108,14 +3108,12 @@ XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
        for (others = wOtherInputMasks(win)->inputClients; others;
             others = others->next) {
            if (SameClient(others, client)) {
-                memset(others->xi2mask[dev->id], 0,
-                       sizeof(others->xi2mask[dev->id]));
+                xi2mask_zero(others->xi2mask, dev->id);
                 break;
             }
         }
     }
 
-    len = min(len, sizeof(others->xi2mask[dev->id]));
 
     if (len && !others)
     {
@@ -2124,11 +3122,14 @@ XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
         others= wOtherInputMasks(win)->inputClients;
     }
 
-    if (others)
-        memset(others->xi2mask[dev->id], 0, sizeof(others->xi2mask[dev->id]));
+    if (others) {
+        xi2mask_zero(others->xi2mask, dev->id);
+        len = min(len, xi2mask_mask_size(others->xi2mask));
+    }
 
-    if (len)
-        memcpy(others->xi2mask[dev->id], mask, len);
+    if (len) {
+        xi2mask_set_one_mask(others->xi2mask, dev->id, mask, len);
+    }
 
     RecalculateDeviceDeliverableEvents(win);
 
index 0ce4e060b879c9d26f65748d8ef7076d38c53f00..0d7b88fbef00a0234448555e232be2faa2a2f7a7 100644 (file)
@@ -853,6 +853,24 @@ static void SRawEvent(xXIRawEvent *from, xXIRawEvent *to)
     swaps(&to->valuators_len, n);
 }
 
+static void STouchOwnershipEvent(xXITouchOwnershipEvent *from,
+                                 xXITouchOwnershipEvent *to)
+{
+    char n;
+
+    *to = *from;
+    swaps(&to->sequenceNumber, n);
+    swapl(&to->length, n);
+    swaps(&to->evtype, n);
+    swaps(&to->deviceid, n);
+    swapl(&to->time, n);
+    swaps(&to->sourceid, n);
+    swapl(&to->touchid, n);
+    swapl(&to->flags, n);
+    swapl(&to->root, n);
+    swapl(&to->event, n);
+    swapl(&to->child, n);
+}
 
 /** Event swapping function for XI2 events. */
 void
@@ -882,13 +900,23 @@ XI2EventSwap(xGenericEvent *from, xGenericEvent *to)
         case XI_KeyRelease:
         case XI_ButtonPress:
         case XI_ButtonRelease:
+        case XI_TouchBegin:
+        case XI_TouchUpdate:
+        case XI_TouchEnd:
             SDeviceEvent((xXIDeviceEvent*)from, (xXIDeviceEvent*)to);
             break;
+        case XI_TouchOwnership:
+            STouchOwnershipEvent((xXITouchOwnershipEvent*)from,
+                                 (xXITouchOwnershipEvent*)to);
+            break;
         case XI_RawMotion:
         case XI_RawKeyPress:
         case XI_RawKeyRelease:
         case XI_RawButtonPress:
         case XI_RawButtonRelease:
+        case XI_RawTouchBegin:
+        case XI_RawTouchUpdate:
+        case XI_RawTouchEnd:
             SRawEvent((xXIRawEvent*)from, (xXIRawEvent*)to);
             break;
         default:
index 925c9a6d2631cfa72150f037a3741b4ad00605db..eeeada70cce9806eb2f7c5d323abb24465b2c2eb 100644 (file)
@@ -132,7 +132,7 @@ ProcXGrabDevice(ClientPtr client)
     rc = GrabDevice(client, dev, stuff->other_devices_mode,
                     stuff->this_device_mode, stuff->grabWindow,
                    stuff->ownerEvents, stuff->time,
-                   &mask, GRABTYPE_XI, None, None,
+                   &mask, XI, None, None,
                    &rep.status);
 
     if (rc != Success)
index e235f5313ea3fa1a931c65eed1a499426e847e67..2d6431766028fe2b88d341d7e6faf4f610d04952 100644 (file)
@@ -139,7 +139,7 @@ ProcXGrabDeviceButton(ClientPtr client)
        return ret;
 
     memset(&param, 0, sizeof(param));
-    param.grabtype = GRABTYPE_XI;
+    param.grabtype = XI;
     param.ownerEvents = stuff->ownerEvents;
     param.this_device_mode = stuff->this_device_mode;
     param.other_devices_mode = stuff->other_devices_mode;
@@ -148,7 +148,7 @@ ProcXGrabDeviceButton(ClientPtr client)
     mask.xi = tmp[stuff->grabbed_device].mask;
 
     ret = GrabButton(client, dev, mdev, stuff->button, &param,
-                     GRABTYPE_XI, &mask);
+                     XI, &mask);
 
     return ret;
 }
index b34867b5fb7b88a99257ec9fa5ae7f4ac2c2abcc..675ae1d1a06126d7d45a3c473d6dd7de31d4f73c 100644 (file)
@@ -137,7 +137,7 @@ ProcXGrabDeviceKey(ClientPtr client)
 
 
     memset(&param, 0, sizeof(param));
-    param.grabtype = GRABTYPE_XI;
+    param.grabtype = XI;
     param.ownerEvents = stuff->ownerEvents;
     param.this_device_mode = stuff->this_device_mode;
     param.other_devices_mode = stuff->other_devices_mode;
@@ -145,7 +145,7 @@ ProcXGrabDeviceKey(ClientPtr client)
     param.modifiers = stuff->modifiers;
     mask.xi = tmp[stuff->grabbed_device].mask;
 
-    ret = GrabKey(client, dev, mdev, stuff->key, &param, GRABTYPE_XI, &mask);
+    ret = GrabKey(client, dev, mdev, stuff->key, &param, XI, &mask);
 
     return ret;
 }
index a09c3d024656e0b58f0dff7f3924d528ca7e9fac..7bd4acb73e88e91d85f2bf5996358062c5d7282d 100644 (file)
@@ -104,7 +104,7 @@ ProcXUngrabDevice(ClientPtr client)
     time = ClientTimeToServerTime(stuff->time);
     if ((CompareTimeStamps(time, currentTime) != LATER) &&
        (CompareTimeStamps(time, dev->deviceGrab.grabTime) != EARLIER) &&
-       (grab) && SameClient(grab, client) && grab->grabtype == GRABTYPE_XI)
+       (grab) && SameClient(grab, client) && grab->grabtype == XI)
        (*dev->deviceGrab.DeactivateGrab) (dev);
     return Success;
 }
index 4e93f1ae35e873c2bb26115d66c280775a3343c0..241224d4f1e1235e17836610dfd15d14fafaabd4 100644 (file)
@@ -98,7 +98,7 @@ ProcXUngrabDeviceButton(ClientPtr client)
     DeviceIntPtr dev;
     DeviceIntPtr mdev;
     WindowPtr pWin;
-    GrabRec temporaryGrab;
+    GrabPtr temporaryGrab;
     int rc;
 
     REQUEST(xUngrabDeviceButtonReq);
@@ -128,17 +128,23 @@ ProcXUngrabDeviceButton(ClientPtr client)
        (stuff->modifiers & ~AllModifiersMask))
        return BadValue;
 
-    temporaryGrab.resource = client->clientAsMask;
-    temporaryGrab.device = dev;
-    temporaryGrab.window = pWin;
-    temporaryGrab.type = DeviceButtonPress;
-    temporaryGrab.grabtype = GRABTYPE_XI;
-    temporaryGrab.modifierDevice = mdev;
-    temporaryGrab.modifiersDetail.exact = stuff->modifiers;
-    temporaryGrab.modifiersDetail.pMask = NULL;
-    temporaryGrab.detail.exact = stuff->button;
-    temporaryGrab.detail.pMask = NULL;
-
-    DeletePassiveGrabFromList(&temporaryGrab);
+    temporaryGrab = AllocGrab();
+    if (!temporaryGrab)
+        return BadAlloc;
+
+    temporaryGrab->resource = client->clientAsMask;
+    temporaryGrab->device = dev;
+    temporaryGrab->window = pWin;
+    temporaryGrab->type = DeviceButtonPress;
+    temporaryGrab->grabtype = XI;
+    temporaryGrab->modifierDevice = mdev;
+    temporaryGrab->modifiersDetail.exact = stuff->modifiers;
+    temporaryGrab->modifiersDetail.pMask = NULL;
+    temporaryGrab->detail.exact = stuff->button;
+    temporaryGrab->detail.pMask = NULL;
+
+    DeletePassiveGrabFromList(temporaryGrab);
+
+    FreeGrab(temporaryGrab);
     return Success;
 }
index 3b4d6260ee17a4cf84de159bf6013dd27da73a80..6b9f7c24b546c05ced10353c3b10b36374bb83cb 100644 (file)
@@ -100,7 +100,7 @@ ProcXUngrabDeviceKey(ClientPtr client)
     DeviceIntPtr dev;
     DeviceIntPtr mdev;
     WindowPtr pWin;
-    GrabRec temporaryGrab;
+    GrabPtr temporaryGrab;
     int rc;
 
     REQUEST(xUngrabDeviceKeyReq);
@@ -135,17 +135,22 @@ ProcXUngrabDeviceKey(ClientPtr client)
        (stuff->modifiers & ~AllModifiersMask))
        return BadValue;
 
-    temporaryGrab.resource = client->clientAsMask;
-    temporaryGrab.device = dev;
-    temporaryGrab.window = pWin;
-    temporaryGrab.type = DeviceKeyPress;
-    temporaryGrab.grabtype = GRABTYPE_XI;
-    temporaryGrab.modifierDevice = mdev;
-    temporaryGrab.modifiersDetail.exact = stuff->modifiers;
-    temporaryGrab.modifiersDetail.pMask = NULL;
-    temporaryGrab.detail.exact = stuff->key;
-    temporaryGrab.detail.pMask = NULL;
-
-    DeletePassiveGrabFromList(&temporaryGrab);
+    temporaryGrab = AllocGrab();
+    if (!temporaryGrab)
+        return BadAlloc;
+
+    temporaryGrab->resource = client->clientAsMask;
+    temporaryGrab->device = dev;
+    temporaryGrab->window = pWin;
+    temporaryGrab->type = DeviceKeyPress;
+    temporaryGrab->grabtype = XI;
+    temporaryGrab->modifierDevice = mdev;
+    temporaryGrab->modifiersDetail.exact = stuff->modifiers;
+    temporaryGrab->modifiersDetail.pMask = NULL;
+    temporaryGrab->detail.exact = stuff->key;
+    temporaryGrab->detail.pMask = NULL;
+
+    DeletePassiveGrabFromList(temporaryGrab);
+    FreeGrab(temporaryGrab);
     return Success;
 }
index 3077e1a44b8f8a1eecc8017a1daf0717023ea549..207c5cb07a8c1178f1668801bb11038837a8888a 100644 (file)
@@ -35,6 +35,8 @@
 
 #include "inputstr.h"  /* DeviceIntPtr      */
 #include "windowstr.h" /* window structure  */
+#include "mi.h"
+#include "eventstr.h"
 #include <X11/extensions/XI2.h>
 #include <X11/extensions/XI2proto.h>
 
@@ -51,10 +53,53 @@ SProcXIAllowEvents(ClientPtr client)
     swaps(&stuff->length, n);
     swaps(&stuff->deviceid, n);
     swapl(&stuff->time, n);
+    /* FIXME swap touchid */
+    /* FIXME swap window */
 
     return ProcXIAllowEvents(client);
 }
 
+static int
+AllowTouch(ClientPtr client, DeviceIntPtr dev, int mode, uint32_t touchid, XID *error)
+{
+    TouchPointInfoPtr ti;
+    int nev, i;
+    InternalEvent *events = InitEventList(GetMaximumEventsNum());
+
+    if (!events)
+        return BadAlloc;
+
+    if (!dev->touch)
+    {
+        *error = dev->id;
+        return BadDevice;
+    }
+
+    /* FIXME window is unhandled */
+
+    ti = TouchFindByClientID(dev, touchid);
+    if (!ti)
+    {
+        *error = touchid;
+        return BadValue;
+    }
+
+    /* FIXME: Allow for early accept */
+    if (ti->num_listeners == 0 || CLIENT_ID(ti->listeners[0].listener) != client->index)
+        return BadAccess;
+
+    nev = GetTouchOwnershipEvents(events, dev, ti, mode, ti->listeners[0].listener, 0);
+    if (nev == 0)
+        return BadAlloc;
+    for (i = 0; i < nev; i++)
+        mieqProcessDeviceEvent(dev, events + i, NULL);
+
+    ProcessInputEvents();
+
+    FreeEventList(events, GetMaximumEventsNum());
+    return Success;
+}
+
 int
 ProcXIAllowEvents(ClientPtr client)
 {
@@ -63,7 +108,7 @@ ProcXIAllowEvents(ClientPtr client)
     int ret = Success;
 
     REQUEST(xXIAllowEventsReq);
-    REQUEST_SIZE_MATCH(xXIAllowEventsReq);
+    /* FIXME: check request length, 12 for XI 2.0+, 20 for XI 2.2+ */
 
     ret = dixLookupDevice(&dev, stuff->deviceid, client, DixGetAttrAccess);
     if (ret != Success)
@@ -93,6 +138,12 @@ ProcXIAllowEvents(ClientPtr client)
         if (IsMaster(dev))
             AllowSome(client, time, dev, THAWED_BOTH);
        break;
+    case XIRejectTouch:
+    case XIAcceptTouch:
+        ret = AllowTouch(client, dev,
+                         stuff->mode, stuff->touchid,
+                         &client->errorValue);
+        break;
     default:
        client->errorValue = stuff->mode;
        ret = BadValue;
index 0adc8787dd2d95fb0b47960ba5e8037c6c9ea0d6..23ccf8c2c4023c319d28ddf89cfa084cdc3a2364 100644 (file)
@@ -41,6 +41,7 @@
 #include "exglobals.h" /* BadDevice */
 #include "exevents.h"
 #include "xigrabdev.h"
+#include "inpututils.h"
 
 int
 SProcXIGrabDevice(ClientPtr client)
@@ -66,7 +67,7 @@ ProcXIGrabDevice(ClientPtr client)
     xXIGrabDeviceReply rep;
     int ret = Success;
     uint8_t status;
-    GrabMask mask;
+    GrabMask mask = { 0 };
     int mask_len;
 
     REQUEST(xXIGrabDeviceReq);
@@ -83,9 +84,13 @@ ProcXIGrabDevice(ClientPtr client)
                                stuff->mask_len * 4) != Success)
         return BadValue;
 
-    mask_len = min(sizeof(mask.xi2mask[stuff->deviceid]), stuff->mask_len * 4);
-    memset(mask.xi2mask, 0, sizeof(mask.xi2mask));
-    memcpy(mask.xi2mask, (char*)&stuff[1], mask_len);
+    mask.xi2mask = xi2mask_new();
+    if (!mask.xi2mask)
+        return BadAlloc;
+
+    mask_len = min(xi2mask_mask_size(mask.xi2mask), stuff->mask_len * 4);
+    /* FIXME: I think the old code was broken here */
+    xi2mask_set_one_mask(mask.xi2mask, dev->id, (unsigned char*)&stuff[1], mask_len);
 
     ret = GrabDevice(client, dev, stuff->grab_mode,
                      stuff->paired_device_mode,
@@ -93,11 +98,13 @@ ProcXIGrabDevice(ClientPtr client)
                      stuff->owner_events,
                      stuff->time,
                      &mask,
-                     GRABTYPE_XI2,
+                     XI2,
                      stuff->cursor,
                      None /* confineTo */,
                      &status);
 
+    xi2mask_free(&mask.xi2mask);
+
     if (ret != Success)
         return ret;
 
@@ -145,7 +152,7 @@ ProcXIUngrabDevice(ClientPtr client)
     time = ClientTimeToServerTime(stuff->time);
     if ((CompareTimeStamps(time, currentTime) != LATER) &&
        (CompareTimeStamps(time, dev->deviceGrab.grabTime) != EARLIER) &&
-       (grab) && SameClient(grab, client) && grab->grabtype == GRABTYPE_XI2)
+       (grab) && SameClient(grab, client) && grab->grabtype == XI2)
        (*dev->deviceGrab.DeactivateGrab) (dev);
 
     return Success;
index af46282c8e3ba786528ec0db6e9e218bbb5ed707..d91170241e34cb78f65cd344c8234ff37b934d31 100644 (file)
@@ -44,6 +44,7 @@
 #include "xipassivegrab.h"
 #include "dixgrabs.h"
 #include "misc.h"
+#include "inpututils.h"
 
 int
 SProcXIPassiveGrabDevice(ClientPtr client)
@@ -81,10 +82,9 @@ ProcXIPassiveGrabDevice(ClientPtr client)
     DeviceIntPtr dev, mod_dev;
     xXIPassiveGrabDeviceReply rep;
     int i, ret = Success;
-    uint8_t status;
     uint32_t *modifiers;
     xXIGrabModifierInfo *modifiers_failed;
-    GrabMask mask;
+    GrabMask mask = { 0 };
     GrabParameters param;
     void *tmp;
     int mask_len;
@@ -110,26 +110,39 @@ ProcXIPassiveGrabDevice(ClientPtr client)
     if (stuff->grab_type != XIGrabtypeButton &&
         stuff->grab_type != XIGrabtypeKeycode &&
         stuff->grab_type != XIGrabtypeEnter &&
-        stuff->grab_type != XIGrabtypeFocusIn)
+        stuff->grab_type != XIGrabtypeFocusIn &&
+        stuff->grab_type != XIGrabtypeTouchBegin)
     {
         client->errorValue = stuff->grab_type;
         return BadValue;
     }
 
     if ((stuff->grab_type == XIGrabtypeEnter ||
-         stuff->grab_type == XIGrabtypeFocusIn) && stuff->detail != 0)
+         stuff->grab_type == XIGrabtypeFocusIn ||
+         stuff->grab_type == XIGrabtypeTouchBegin) && stuff->detail != 0)
     {
         client->errorValue = stuff->detail;
         return BadValue;
     }
 
+    if (stuff->grab_type == XIGrabtypeTouchBegin &&
+        (stuff->grab_mode != XIGrabModeTouch ||
+         stuff->paired_device_mode != GrabModeAsync))
+    {
+        client->errorValue = stuff->grab_mode;
+        return BadValue;
+    }
+
     if (XICheckInvalidMaskBits(client, (unsigned char*)&stuff[1],
                                stuff->mask_len * 4) != Success)
         return BadValue;
 
-    mask_len = min(sizeof(mask.xi2mask[stuff->deviceid]), stuff->mask_len * 4);
-    memset(mask.xi2mask, 0, sizeof(mask.xi2mask));
-    memcpy(mask.xi2mask[stuff->deviceid], &stuff[1], mask_len * 4);
+    mask.xi2mask = xi2mask_new();
+    if (!mask.xi2mask)
+        return BadAlloc;
+
+    mask_len = min(xi2mask_mask_size(mask.xi2mask), stuff->mask_len * 4);
+    xi2mask_set_one_mask(mask.xi2mask, stuff->deviceid, (unsigned char*)&stuff[1], mask_len * 4);
 
     rep.repType = X_Reply;
     rep.RepType = X_XIPassiveGrabDevice;
@@ -138,7 +151,7 @@ ProcXIPassiveGrabDevice(ClientPtr client)
     rep.num_modifiers = 0;
 
     memset(&param, 0, sizeof(param));
-    param.grabtype = GRABTYPE_XI2;
+    param.grabtype = XI2;
     param.ownerEvents = stuff->owner_events;
     param.grabWindow = stuff->grab_window;
     param.cursor = stuff->cursor;
@@ -153,48 +166,55 @@ ProcXIPassiveGrabDevice(ClientPtr client)
 
     if (stuff->cursor != None)
     {
-        status = dixLookupResourceByType(&tmp, stuff->cursor,
-                                         RT_CURSOR, client, DixUseAccess);
-       if (status != Success)
-       {
-           client->errorValue = stuff->cursor;
-           return status;
-       }
+        ret = dixLookupResourceByType(&tmp, stuff->cursor,
+                                      RT_CURSOR, client, DixUseAccess);
+        if (ret != Success)
+        {
+            client->errorValue = stuff->cursor;
+            goto out;
+        }
     }
 
-    status = dixLookupWindow((WindowPtr*)&tmp, stuff->grab_window, client, DixSetAttrAccess);
-    if (status != Success)
-       return status;
+    ret = dixLookupWindow((WindowPtr*)&tmp, stuff->grab_window, client, DixSetAttrAccess);
+    if (ret != Success)
+        goto out;
 
-    status = CheckGrabValues(client, &param);
-    if (status != Success)
-        return status;
+    ret = CheckGrabValues(client, &param);
+    if (ret != Success)
+        goto out;
 
     modifiers = (uint32_t*)&stuff[1] + stuff->mask_len;
     modifiers_failed = calloc(stuff->num_modifiers, sizeof(xXIGrabModifierInfo));
-    if (!modifiers_failed)
-        return BadAlloc;
+    if (!modifiers_failed) {
+        ret = BadAlloc;
+        goto out;
+    }
 
     mod_dev = (IsFloating(dev)) ? dev : GetMaster(dev, MASTER_KEYBOARD);
 
     for (i = 0; i < stuff->num_modifiers; i++, modifiers++)
     {
+        uint8_t status = Success;
+
         param.modifiers = *modifiers;
         switch(stuff->grab_type)
         {
             case XIGrabtypeButton:
                 status = GrabButton(client, dev, mod_dev, stuff->detail,
-                                    &param, GRABTYPE_XI2, &mask);
+                                    &param, XI2, &mask);
                 break;
             case XIGrabtypeKeycode:
                 status = GrabKey(client, dev, mod_dev, stuff->detail,
-                                 &param, GRABTYPE_XI2, &mask);
+                                 &param, XI2, &mask);
                 break;
             case XIGrabtypeEnter:
             case XIGrabtypeFocusIn:
                 status = GrabWindow(client, dev, stuff->grab_type,
                                     &param, &mask);
                 break;
+            case XIGrabtypeTouchBegin:
+                status = GrabTouch(client, dev, mod_dev, &param, &mask);
+                break;
         }
 
         if (status != GrabSuccess)
@@ -216,6 +236,8 @@ ProcXIPassiveGrabDevice(ClientPtr client)
         WriteToClient(client, rep.length * 4, (char*)modifiers_failed);
 
     free(modifiers_failed);
+out:
+    xi2mask_free(&mask.xi2mask);
     return ret;
 }
 
@@ -260,7 +282,7 @@ ProcXIPassiveUngrabDevice(ClientPtr client)
 {
     DeviceIntPtr dev, mod_dev;
     WindowPtr win;
-    GrabRec tempGrab;
+    GrabPtr tempGrab;
     uint32_t* modifiers;
     int i, rc;
 
@@ -300,29 +322,36 @@ ProcXIPassiveUngrabDevice(ClientPtr client)
 
     mod_dev = (IsFloating(dev)) ? dev : GetMaster(dev, MASTER_KEYBOARD);
 
-    tempGrab.resource = client->clientAsMask;
-    tempGrab.device = dev;
-    tempGrab.window = win;
+
+    tempGrab = AllocGrab();
+    if (!tempGrab)
+        return BadAlloc;
+
+    tempGrab->resource = client->clientAsMask;
+    tempGrab->device = dev;
+    tempGrab->window = win;
     switch(stuff->grab_type)
     {
-        case XIGrabtypeButton:  tempGrab.type = XI_ButtonPress; break;
-        case XIGrabtypeKeycode:  tempGrab.type = XI_KeyPress;    break;
-        case XIGrabtypeEnter:   tempGrab.type = XI_Enter;       break;
-        case XIGrabtypeFocusIn: tempGrab.type = XI_FocusIn;     break;
+        case XIGrabtypeButton:  tempGrab->type = XI_ButtonPress; break;
+        case XIGrabtypeKeycode:  tempGrab->type = XI_KeyPress;    break;
+        case XIGrabtypeEnter:   tempGrab->type = XI_Enter;       break;
+        case XIGrabtypeFocusIn: tempGrab->type = XI_FocusIn;     break;
     }
-    tempGrab.grabtype = GRABTYPE_XI2;
-    tempGrab.modifierDevice = mod_dev;
-    tempGrab.modifiersDetail.pMask = NULL;
-    tempGrab.detail.exact = stuff->detail;
-    tempGrab.detail.pMask = NULL;
+    tempGrab->grabtype = XI2;
+    tempGrab->modifierDevice = mod_dev;
+    tempGrab->modifiersDetail.pMask = NULL;
+    tempGrab->detail.exact = stuff->detail;
+    tempGrab->detail.pMask = NULL;
 
     modifiers = (uint32_t*)&stuff[1];
 
     for (i = 0; i < stuff->num_modifiers; i++, modifiers++)
     {
-        tempGrab.modifiersDetail.exact = *modifiers;
-        DeletePassiveGrabFromList(&tempGrab);
+        tempGrab->modifiersDetail.exact = *modifiers;
+        DeletePassiveGrabFromList(tempGrab);
     }
 
+    FreeGrab(tempGrab);
+
     return Success;
 }
index 83ce930147e6680e185a66dea7f9fb82702aec1b..3061283d65ee39377a85cc652316a557c37c0c00 100644 (file)
@@ -52,11 +52,14 @@ static struct dev_properties
 } dev_properties[] = {
     {0, XI_PROP_ENABLED},
     {0, XI_PROP_XTEST_DEVICE},
+
     {0, XATOM_FLOAT},
+
     {0, ACCEL_PROP_PROFILE_NUMBER},
     {0, ACCEL_PROP_CONSTANT_DECELERATION},
     {0, ACCEL_PROP_ADAPTIVE_DECELERATION},
     {0, ACCEL_PROP_VELOCITY_SCALING},
+
     {0, AXIS_LABEL_PROP},
     {0, AXIS_LABEL_PROP_REL_X},
     {0, AXIS_LABEL_PROP_REL_Y},
@@ -68,6 +71,8 @@ static struct dev_properties
     {0, AXIS_LABEL_PROP_REL_DIAL},
     {0, AXIS_LABEL_PROP_REL_WHEEL},
     {0, AXIS_LABEL_PROP_REL_MISC},
+    {0, AXIS_LABEL_PROP_REL_VSCROLL},
+    {0, AXIS_LABEL_PROP_REL_HSCROLL},
     {0, AXIS_LABEL_PROP_ABS_X},
     {0, AXIS_LABEL_PROP_ABS_Y},
     {0, AXIS_LABEL_PROP_ABS_Z},
@@ -381,7 +386,7 @@ change_property(ClientPtr client, DeviceIntPtr dev, Atom property, Atom type,
  * If name is NULL, None is returned.
  */
 Atom
-XIGetKnownProperty(char *name)
+XIGetKnownProperty(const char *name)
 {
     int i;
 
@@ -701,7 +706,7 @@ XIDeleteDeviceProperty (DeviceIntPtr device, Atom property, Bool fromClient)
 int
 XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
                         int format, int mode, unsigned long len,
-                        const pointer value, Bool sendevent)
+                        const void *value, Bool sendevent)
 {
     XIPropertyPtr               prop;
     int                         size_in_bytes;
index a768d499c88d4d46e3bef06525b03275cadbfc2e..cd6005693e145acb67fa1273104914adf9c7b614 100644 (file)
@@ -41,6 +41,7 @@
 #include "xserver-properties.h"
 #include "exevents.h"
 #include "xace.h"
+#include "inpututils.h"
 
 #include "xiquerydevice.h"
 
@@ -233,7 +234,18 @@ SizeDeviceClasses(DeviceIntPtr dev)
     }
 
     if (dev->valuator)
-        len += sizeof(xXIValuatorInfo) * dev->valuator->numAxes;
+    {
+        int i;
+        len += (sizeof(xXIValuatorInfo)) * dev->valuator->numAxes;
+
+        for (i = 0; i < dev->valuator->numAxes; i++) {
+            if (dev->valuator->axes[i].scroll.type != SCROLL_TYPE_NONE)
+                len += sizeof(xXIScrollInfo);
+        }
+    }
+
+    if (dev->touch)
+        len += sizeof(xXITouchInfo);
 
     return len;
 }
@@ -348,8 +360,7 @@ ListValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo* info, int axisnumber,
     info->min.frac = 0;
     info->max.integral = v->axes[axisnumber].max_value;
     info->max.frac = 0;
-    info->value.integral = (int)v->axisVal[axisnumber];
-    info->value.frac = (int)(v->axisVal[axisnumber] * (1 << 16) * (1 << 16));
+    info->value = double_to_fp3232(v->axisVal[axisnumber]);
     info->resolution = v->axes[axisnumber].resolution;
     info->number = axisnumber;
     info->mode = valuator_get_mode(dev, axisnumber);
@@ -376,6 +387,84 @@ SwapValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo* info)
     swaps(&info->sourceid, n);
 }
 
+int
+ListScrollInfo(DeviceIntPtr dev, xXIScrollInfo *info, int axisnumber)
+{
+    ValuatorClassPtr v = dev->valuator;
+    AxisInfoPtr axis = &v->axes[axisnumber];
+
+    if (axis->scroll.type == SCROLL_TYPE_NONE)
+        return 0;
+
+    info->type = XIScrollClass;
+    info->length = sizeof(xXIScrollInfo)/4;
+    info->number = axisnumber;
+    switch(axis->scroll.type)
+    {
+        case SCROLL_TYPE_VERTICAL:
+            info->scroll_type = XIScrollTypeVertical;
+            break;
+        case SCROLL_TYPE_HORIZONTAL:
+            info->scroll_type = XIScrollTypeHorizontal;
+            break;
+        default:
+            ErrorF("[Xi] Unknown scroll type %d. This is a bug.\n", axis->scroll.type);
+            break;
+    }
+    info->increment = double_to_fp3232(axis->scroll.increment);
+    info->sourceid = v->sourceid;
+
+    info->flags = 0;
+
+    if (axis->scroll.flags & SCROLL_FLAG_DONT_EMULATE)
+        info->flags |= XIScrollFlagNoEmulation;
+    if (axis->scroll.flags & SCROLL_FLAG_PREFERRED)
+        info->flags |= XIScrollFlagPreferred;
+
+    return info->length * 4;
+}
+
+static void
+SwapScrollInfo(DeviceIntPtr dev, xXIScrollInfo* info)
+{
+    char n;
+
+    swaps(&info->type, n);
+    swaps(&info->length, n);
+    swaps(&info->number, n);
+    swaps(&info->sourceid, n);
+    swaps(&info->scroll_type, n);
+    swapl(&info->increment.integral, n);
+    swapl(&info->increment.frac, n);
+}
+
+/**
+ * List multitouch information
+ *
+ * @return The number of bytes written into info.
+ */
+int
+ListTouchInfo(DeviceIntPtr dev, xXITouchInfo *touch)
+{
+    touch->type = XITouchClass;
+    touch->length = sizeof(xXITouchInfo) >> 2;
+    touch->sourceid = touch->sourceid;
+    touch->mode = dev->touch->mode;
+    touch->num_touches = dev->touch->num_touches;
+
+    return touch->length << 2;
+}
+
+static void
+SwapTouchInfo(DeviceIntPtr dev, xXITouchInfo* touch)
+{
+    char n;
+
+    swaps(&touch->type, n);
+    swaps(&touch->length, n);
+    swaps(&touch->sourceid, n);
+}
+
 int GetDeviceUse(DeviceIntPtr dev, uint16_t *attachment)
 {
     DeviceIntPtr master = GetMaster(dev, MASTER_ATTACHED);
@@ -465,6 +554,23 @@ ListDeviceClasses(ClientPtr client, DeviceIntPtr dev,
         total_len += len;
     }
 
+    for (i = 0; dev->valuator && i < dev->valuator->numAxes; i++)
+    {
+        len = ListScrollInfo(dev, (xXIScrollInfo*)any, i);
+        if (len)
+            (*nclasses)++;
+        any += len;
+        total_len += len;
+    }
+
+    if (dev->touch)
+    {
+        (*nclasses)++;
+        len = ListTouchInfo(dev, (xXITouchInfo*)any);
+        any += len;
+        total_len += len;
+    }
+
     return total_len;
 }
 
@@ -492,6 +598,13 @@ SwapDeviceInfo(DeviceIntPtr dev, xXIDeviceInfo* info)
             case XIValuatorClass:
                 SwapValuatorInfo(dev, (xXIValuatorInfo*)any);
                 break;
+            case XIScrollClass:
+                SwapScrollInfo(dev, (xXIScrollInfo*)any);
+                break;
+            case XITouchClass:
+                SwapTouchInfo(dev, (xXITouchInfo*)any);
+                break;
+
         }
 
         any += len * 4;
index 02f06591e651eb1a0cc1df8cf4d1b6a4c393c782..632c42eebcb5da056664c138863a7423cfae7e15 100644 (file)
@@ -44,4 +44,6 @@ int ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo* info, Bool reportState);
 int ListKeyInfo(DeviceIntPtr dev, xXIKeyInfo* info);
 int ListValuatorInfo(DeviceIntPtr dev, xXIValuatorInfo* info,
                     int axisnumber, Bool reportState);
+int ListScrollInfo(DeviceIntPtr dev, xXIScrollInfo* info, int axisnumber);
+int ListTouchInfo(DeviceIntPtr dev, xXITouchInfo* info);
 #endif /* QUERYDEV_H */
index 51317994b0c67d4bf524a0938eeb3149f6d7e246..efc778209a86be31632ef84037d6310e5614540f 100644 (file)
@@ -111,7 +111,7 @@ ProcXIQueryPointer(ClientPtr client)
         MaybeStopHint(pDev, client);
 
     if (IsMaster(pDev))
-        kbd = GetPairedDevice(pDev);
+        kbd = GetMaster(pDev, MASTER_KEYBOARD);
     else
         kbd = (pDev->key) ? pDev : NULL;
 
index 22fbaf5e7398cd854f4fb815266645c5b25671db..c667999bee2408445048d8fb401aa86248b30a9d 100644 (file)
@@ -33,6 +33,7 @@
 #include "exglobals.h"
 #include "exevents.h"
 #include <X11/extensions/XI2proto.h>
+#include "inpututils.h"
 
 #include "xiselectev.h"
 
@@ -145,13 +146,59 @@ ProcXISelectEvents(ClientPtr client)
                 BitIsOn(bits, XI_RawKeyRelease) ||
                 BitIsOn(bits, XI_RawButtonPress) ||
                 BitIsOn(bits, XI_RawButtonRelease) ||
-                BitIsOn(bits, XI_RawMotion))
+                BitIsOn(bits, XI_RawMotion) ||
+                BitIsOn(bits, XI_RawTouchBegin) ||
+                BitIsOn(bits, XI_RawTouchUpdate) ||
+                BitIsOn(bits, XI_RawTouchEnd))
             {
                 client->errorValue = XI_RawKeyPress;
                 return BadValue;
             }
         }
 
+        if (evmask->mask_len >= 1)
+        {
+            unsigned char *bits = (unsigned char*)&evmask[1];
+
+            /* All three touch events must be selected at once */
+            if ((BitIsOn(bits, XI_TouchBegin) ||
+                 BitIsOn(bits, XI_TouchUpdate) ||
+                 BitIsOn(bits, XI_TouchOwnership) ||
+                 BitIsOn(bits, XI_TouchEnd)) &&
+                (!BitIsOn(bits, XI_TouchBegin) ||
+                 !BitIsOn(bits, XI_TouchUpdate) ||
+                 !BitIsOn(bits, XI_TouchEnd)))
+            {
+                client->errorValue = XI_TouchBegin;
+                return BadValue;
+            }
+
+            /* Only one client per window may select for touch events on the
+             * same devices, including master devices.
+             * XXX: This breaks if a device goes from floating to attached. */
+            if (BitIsOn(bits, XI_TouchBegin))
+            {
+                OtherInputMasks *inputMasks = wOtherInputMasks(win);
+                InputClients *iclient = NULL;
+                if (inputMasks)
+                    iclient = inputMasks->inputClients;
+                for (; iclient; iclient = iclient->next)
+                {
+                    DeviceIntPtr dummy;
+
+                    if (CLIENT_ID(iclient->resource) == client->index)
+                        continue;
+
+                    dixLookupDevice(&dummy, evmask->deviceid, serverClient, DixReadAccess);
+                    if (!dummy)
+                        return BadImplementation; /* this shouldn't happen */
+
+                    if (xi2mask_isset(iclient->xi2mask, dummy, XI_TouchBegin))
+                        return BadAccess;
+                }
+            }
+        }
+
         if (XICheckInvalidMaskBits(client, (unsigned char*)&evmask[1],
                                    evmask->mask_len * 4) != Success)
             return BadValue;
@@ -253,7 +300,7 @@ ProcXIGetSelectedEvents(ClientPtr client)
     for (i = 0; i < MAXDEVICES; i++)
     {
         int j;
-        unsigned char *devmask = others->xi2mask[i];
+        const unsigned char *devmask = xi2mask_get_one_mask(others->xi2mask, i);
 
         if (i > 2)
         {
@@ -263,7 +310,7 @@ ProcXIGetSelectedEvents(ClientPtr client)
         }
 
 
-        for (j = XI2MASKSIZE - 1; j >= 0; j--)
+        for (j = xi2mask_mask_size(others->xi2mask) - 1; j >= 0; j--)
         {
             if (devmask[j] != 0)
             {
index a463ab94de2da0539f5e0287d55ed64940c48e23..a9e34420f2e0b22661d7856fd24d21fc87b8d8f4 100644 (file)
@@ -192,8 +192,6 @@ ProcXIWarpPointer(ClientPtr client)
     /* if we don't update the device, we get a jump next time it moves */
     pDev->last.valuators[0] = x;
     pDev->last.valuators[1] = y;
-    pDev->last.remainder[0] = 0;
-    pDev->last.remainder[1] = 0;
     miPointerUpdateSprite(pDev);
 
     /* FIXME: XWarpPointer is supposed to generate an event. It doesn't do it
index 0a2a22af06c31707c238c12ada246fee95c8dea4..0d36d7208a4fd3f138354bec160d77ee9cf649f2 100644 (file)
@@ -30,7 +30,7 @@
 
 void remove_devices(const char *backend, const char *config_info);
 BOOL device_is_duplicate(const char *config_info);
-void add_option(InputOption **options, const char *key, const char *value);
+InputOption* add_option(InputOption **options, const char *key, const char *value);
 
 #ifdef CONFIG_UDEV
 int config_udev_init(void);
index d86f7c649165fe865d0c908189e608805e19ba31..af8f4f9b21d823f3b5026fcee51a97cf4c1fb20a 100644 (file)
@@ -122,18 +122,25 @@ device_is_duplicate(const char *config_info)
     return FALSE;
 }
 
-void
+/**
+ * Allocate a new option and append to the list.
+ *
+ * @return A pointer to the newly allocated InputOption struct.
+ */
+InputOption*
 add_option(InputOption **options, const char *key, const char *value)
 {
     if (!value || *value == '\0')
-        return;
+        return NULL;
 
     for (; *options; options = &(*options)->next)
         ;
     *options = calloc(sizeof(**options), 1);
     if (!*options) /* Yeesh. */
-        return;
+        return NULL;
     (*options)->key = strdup(key);
     (*options)->value = strdup(value);
     (*options)->next = NULL;
+
+    return *options;
 }
diff --git a/config/dbus-api b/config/dbus-api
new file mode 100644 (file)
index 0000000..018e986
--- /dev/null
@@ -0,0 +1,40 @@
+D-BUS Configuration API v2
+----------------------------
+
+The X server will register the bus name org.x.config.displayN, and the 
+object /org/x/config/N, where N is the display number.
+
+Currently only hotplugging of input devices is supported.
+
+org.x.config.input:
+    org.x.config.input.version:
+        Returns one unsigned int32, which is the API version.
+
+    org.x.config.input.add:
+        Takes an argument of key/value option pairs in arrays, e.g.:
+         [ss][ss][ss][ss]
+        is the signature for four options.  These options will be passed
+        to the input driver as with any others.
+        Option names beginning with _ are not allowed; they are reserved
+        for internal use.
+
+        Returns a number of signed int32s.  Positive integers are the
+        device IDs of new devices; negative numbers are X error codes,
+        as defined in X.h.  BadMatch will be returned if the options
+        given do not match any device.  BadValue is returned for a malformed
+        message.  (Example: 8 is new device ID 8; -8 is BadMatch.)
+
+        Notably, BadAlloc is never returned: the server internally signals
+        to D-BUS that the attempt failed for lack of memory.
+
+    org.x.config.input.remove:
+        Takes one uint32 argument, which is the device ID to remove, i.e.:
+         u
+        is the signature.
+
+        Returns one signed int32 which represents an X status as defined in
+        X.h. See org.x.config.input.add. Error codes are negative numbers.
+
+    org.x.config.input.listDevices:
+        Lists the currently active devices. No argument. 
+        Return value is sequence of [<id> <name>] [<id> <name>] ..., i.e. [us].
index 34e3caade9a0405b4442724ced00d4081ce8c47e..41eca998aadbde28f00b7111552b426469fa6a3d 100644 (file)
@@ -80,15 +80,7 @@ add_device(DBusMessage *message, DBusMessage *reply, DBusError *error)
         MALFORMED_MESSAGE();
     }
 
-    options = calloc(sizeof(*options), 1);
-    if (!options) {
-        ErrorF("[config/dbus] couldn't allocate option\n");
-        return BadAlloc;
-    }
-
-    options->key = strdup("_source");
-    options->value = strdup("client/dbus");
-    if (!options->key || !options->value) {
+    if (!add_option(&options, "_source", "client/dbus")) {
         ErrorF("[config/dbus] couldn't allocate first key/value pair\n");
         ret = BadAlloc;
         goto unwind;
index a4141d552129882bd60b67b461dabca22d6641d1..d010b7c9ac04e05af347ba7f49bdfa51e5152b22 100644 (file)
@@ -205,15 +205,7 @@ device_added(LibHalContext *hal_ctx, const char *udi)
         free(parent);
     }
 
-    options = calloc(sizeof(*options), 1);
-    if (!options){
-        LogMessage(X_ERROR, "config/hal: couldn't allocate space for input options!\n");
-        goto unwind;
-    }
-
-    options->key = strdup("_source");
-    options->value = strdup("server/hal");
-    if (!options->key || !options->value) {
+    if (!add_option(&options, "_source", "server/hal")) {
         LogMessage(X_ERROR, "config/hal: couldn't allocate first key/value pair\n");
         goto unwind;
     }
index 42713e92dc4653a80d4b29095cc88b6bd3f5ccca..8ba5bee1872c961710a30f3c5372e7ed6671a893 100644 (file)
@@ -81,13 +81,7 @@ device_added(struct udev_device *udev_device)
         return;
     }
 
-    options = calloc(sizeof(*options), 1);
-    if (!options)
-        return;
-
-    options->key = strdup("_source");
-    options->value = strdup("server/udev");
-    if (!options->key || !options->value)
+    if (!add_option(&options, "_source", "server/udev"))
         goto unwind;
 
     parent = udev_device_get_parent(udev_device);
index 7a13c4f27deadf792ae82ba0ca74ce482c06294e..6c83be9829c5127d8ea550bf732f7c8ad8e6154b 100644 (file)
@@ -26,8 +26,8 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.11.4, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2012-01-27"
+AC_INIT([xorg-server], 1.11.3, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2011-12-16"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE
@@ -45,7 +45,7 @@ XORG_WITH_XMLTO(0.0.20)
 XORG_WITH_FOP
 XORG_WITH_XSLTPROC
 XORG_ENABLE_UNIT_TESTS
-XORG_LD_WRAP
+XORG_LD_WRAP([optional])
 
 m4_ifndef([XORG_FONT_MACROS_VERSION], [m4_fatal([must install fontutil 1.1 or later before running autoconf/autogen])])
 XORG_FONT_MACROS_VERSION(1.1)
@@ -785,7 +785,7 @@ WINDOWSWMPROTO="windowswmproto"
 APPLEWMPROTO="applewmproto >= 1.4"
 
 dnl Core modules for most extensions, et al.
-SDK_REQUIRED_MODULES="[xproto >= 7.0.22] [randrproto >= 1.2.99.3] [renderproto >= 0.11] [xextproto >= 7.1.99] [inputproto >= 1.9.99.902] [kbproto >= 1.0.3] fontsproto"
+SDK_REQUIRED_MODULES="[xproto >= 7.0.22] [randrproto >= 1.2.99.3] [renderproto >= 0.11] [xextproto >= 7.1.99] [inputproto >= 2.1.99.5] [kbproto >= 1.0.3] fontsproto"
 # Make SDK_REQUIRED_MODULES available for inclusion in xorg-server.pc
 AC_SUBST(SDK_REQUIRED_MODULES)
 
diff --git a/debian/README.source b/debian/README.source
new file mode 100644 (file)
index 0000000..f33e314
--- /dev/null
@@ -0,0 +1,66 @@
+------------------------------------------------------
+Quick Guide To Patching This Package For The Impatient
+------------------------------------------------------
+
+1. Make sure you have quilt installed
+2. Unpack the package as usual with "dpkg-source -x"
+3. Run the "patch" target in debian/rules
+4. Create a new patch with "quilt new" (see quilt(1))
+5. Edit all the files you want to include in the patch with "quilt edit"
+   (see quilt(1)).
+6. Write the patch with "quilt refresh" (see quilt(1))
+7. Run the "clean" target in debian/rules
+
+Alternatively, instead of using quilt directly, you can drop the patch in to
+debian/patches and add the name of the patch to debian/patches/series.
+
+------------------------------------
+Guide To The X Strike Force Packages
+------------------------------------
+
+The X Strike Force team maintains X packages in git repositories on
+git.debian.org in the pkg-xorg subdirectory. Most upstream packages
+are actually maintained in git repositories as well, so they often
+just need to be pulled into git.debian.org in a "upstream-*" branch.
+Otherwise, the upstream sources are manually installed in the Debian
+git repository.
+
+The .orig.tar.gz upstream source file could be generated using this
+"upstream-*" branch in the Debian git repository but it is actually
+copied from upstream tarballs directly.
+
+Due to X.org being highly modular, packaging all X.org applications
+as their own independent packages would have created too many Debian
+packages. For this reason, some X.org applications have been grouped
+into larger packages: xutils, xutils-dev, x11-apps, x11-session-utils,
+x11-utils, x11-xfs-utils, x11-xkb-utils, x11-xserver-utils.
+Most packages, including the X.org server itself and all libraries
+and drivers are, however maintained independently.
+
+The Debian packaging is added by creating the "debian-*" git branch
+which contains the aforementioned "upstream-*" branch plus the debian/
+repository files.
+When a patch has to be applied to the Debian package, two solutions
+are involved:
+* If the patch is available in one of the upstream branches, it
+  may be git'cherry-picked into the Debian repository. In this
+  case, it appears directly in the .diff.gz.
+* Otherwise, the patch is added to debian/patches/ which is managed
+  with quilt as documented in /usr/share/doc/quilt/README.source.
+
+----------------------------------------------
+Updating xorg-server to a new upstream release
+----------------------------------------------
+
+* The abibumpcheck target helps us notice any ABI bump:
+  - A major ABI bump means drivers have to be rebuilt.
+  - A minor ABI bump means the version in serverminver has to be
+    bumped.
+  Reference documentation about dependencies is available at:
+    http://pkg-xorg.alioth.debian.org/reference/dependencies.html
+* We have to keep track of the SDK_REQUIRED_MODULES variable in
+  configure.ac. It is used to determine xorg-server.pc's dependencies
+  so xserver-xorg-dev's dependencies have to be adjusted when this
+  variable changes. This variable is set to a list of modules, but is
+  updated a few times. It's probably a good idea to use:
+    git grep SDK_REQUIRED_MODULES= -- configure.ac
diff --git a/debian/changelog b/debian/changelog
new file mode 100644 (file)
index 0000000..5eb231c
--- /dev/null
@@ -0,0 +1,6653 @@
+xorg-server (2:1.11.4-0ubuntu3) precise; urgency=low
+
+  * Fix touch class memory corruption
+    - Add 612-Fix-vcp-touches-corruption.patch
+    - Add 613-Keep-vcp-touch-class.patch
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Mon, 13 Feb 2012 15:54:04 -0800
+
+xorg-server (2:1.11.4-0ubuntu2) precise; urgency=low
+
+  * Fix crash when punting a touch to a non-existent owner
+    - Add 611-Fix-touch-punt-crash.patch
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Mon, 13 Feb 2012 12:10:02 -0800
+
+xorg-server (2:1.11.4-0ubuntu1) precise; urgency=low
+
+  [ Chase Douglas ]
+  * Allow for non-root config paths so xorg-gtest can be run without root
+    - Add 225_non-root_config_paths.patch backported from upstream
+
+  [ Alberto Milone]
+  * debian/patches/226_fall_back_to_autoconfiguration.patch:
+    - Fall back to autoconfiguration for graphics drivers in some cases
+      instead of letting X fail when configuration files are available.
+
+  [ Chase Douglas ]
+  * Update to 1.11.99.902 input stack
+  * Update to 1.11.4 for everything else
+  * Drop input patches that have been merged upstream:
+    - 220_dont_scale_indirect.patch
+    - 221_pointer_motion_update_fix.patch
+    - 222_touch_valuators_absolute.patch
+    - 223_indirect_touch_x_y_valuators.patch
+  * Add reviewed input patches that have not been merged upstream yet:
+    - 600-Revert-dix-deduplicate-callers-of-DeliverDeviceEvent.patch
+    - 601-Store-window-pointer-in-touch-listener-record.patch
+    - 602-Factor-out-TouchEnd-generation-and-delivery.patch
+    - 603-Export-TouchEventRejected-as-TouchRejected.patch
+    - 604-Move-AllowTouch-to-dix-touch.c-and-rename-to-TouchAc.patch
+    - 605-Check-for-proper-window-ID-when-processing-touch-all.patch
+    - 606-Implement-early-touch-reject.patch
+    - 607-Implement-touch-early-accept.patch
+    - 608-dix-fix-an-out-of-memory-crash.patch
+    - 609-Xi-handle-new-XIAllowEvents-request-in-inputproto-2..patch
+    - 610-Fix-scrolling.patch (LP: #925785)
+  * Bump deps on x11proto-input-dev to 2.1.99.6
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 10 Feb 2012 16:27:25 -0800
+
+xorg-server (2:1.11.3-0ubuntu10) precise; urgency=low
+
+  * Drop 214_glx_dri_searchdirs.patch, drisearchdirs is no longer
+    exported in mesa's dri.pc because of multiarch and the only consumer
+    (dri-alternates) is no longer used.
+
+ -- Robert Hooker <sarvatt@ubuntu.com>  Thu, 02 Feb 2012 12:08:55 -0500
+
+xorg-server (2:1.11.3-0ubuntu9) precise; urgency=low
+
+  * debian/patches/500_pointer_barrier_thresholds.diff:
+    - Implement proposed XFIXES 6.0 protocol.  This protocol is subject to
+      change, use at own risk!
+  * debian/control:
+    - Bump build-dep on x11proto-fixes to pick up new protocol definition
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Fri, 27 Jan 2012 20:05:42 +1100
+
+xorg-server (2:1.11.3-0ubuntu8) precise; urgency=low
+
+  * debian/patches/224_return_BadWindow_not_BadMatch.diff:
+    - Fix the error values of a whole slew of window-related calls.
+      Fixes some gnome-settings-daemon aborts in XLib (LP: #903973)
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Mon, 23 Jan 2012 16:09:29 +1100
+
+xorg-server (2:1.11.3-0ubuntu7) precise; urgency=low
+
+  * Fixes for relative devices
+    - Add 220_dont_scale_indirect.patch
+    - Add 221_pointer_motion_update_fix.patch
+    - Add 222_touch_valuators_absolute.patch
+    - Add 223_indirect_touch_x_y_valuators.patch
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Thu, 19 Jan 2012 16:23:28 -0800
+
+xorg-server (2:1.11.3-0ubuntu6) precise; urgency=low
+
+  * Bump Build-Depends on x11proto-input-dev to 2.1.99.5
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Tue, 17 Jan 2012 22:22:57 +0100
+
+xorg-server (2:1.11.3-0ubuntu5) precise; urgency=low
+
+  * Add Breaks clause for XInput changes
+    - qt4-x11 < 4:4.8.0-1ubuntu2 (crashes due to XI ABI change)
+    - utouch-geis < 2.2.3 (infinite loop if utouch XCB backend is unavailable)
+    - utouch-frame < 2.1.0 (crashes due to XI ABI change)
+    - unity < 5.0.0 (crashes if utouch stack is unavailable)
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Tue, 17 Jan 2012 22:03:35 +0100
+
+xorg-server (2:1.11.3-0ubuntu4) precise; urgency=low
+
+  * Merge in input changes from upstream master through commit 954bb99
+  * Remove temporary patch 220_grab_event_time.patch
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Tue, 17 Jan 2012 19:52:04 +0100
+
+xorg-server (2:1.11.3-0ubuntu3) precise; urgency=low
+
+  * Add temporary patch for fixing grab time bug
+    - Add 220_grab_event_time.patch
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Wed, 11 Jan 2012 07:41:04 -0800
+
+xorg-server (2:1.11.3-0ubuntu2) precise; urgency=low
+
+  * Merge in input changes from upstream master through commit 8722ad6
+  * Remove temporary patch 220_test-loop.patch, merged upstream
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Tue, 10 Jan 2012 10:48:31 +0100
+
+xorg-server (2:1.11.3-0ubuntu1) precise; urgency=low
+
+  * New upstream bugfix release
+  * Merge in input changes from upstream master through commit e7df42a
+  * Bump input ABI
+  * Bump x11proto-input-dev build dependency version
+  * Add temporary patch for fixing a test case loop
+    - Add 220_test-loop.patch
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Thu, 22 Dec 2011 12:11:39 -0800
+
+xorg-server (2:1.11.2.902-1ubuntu1) precise; urgency=low
+
+  * Drop prototype XI multitouch patches
+  * Merge in input changes from upstream master through commit 7da7aa9
+  * Bump input ABI
+  * Refresh patches
+    - Drop 210_pixman_null_ptr_check.patch, merged upstream
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Wed, 14 Dec 2011 16:06:37 -0800
+
+xorg-server (2:1.11.2.902-1) unstable; urgency=low
+
+  [ Julien Cristau ]
+  * New upstream release candidate (1.11.3 RC2)
+
+ -- Cyril Brulebois <kibi@debian.org>  Sat, 10 Dec 2011 22:36:42 +0100
+
+xorg-server (2:1.11.2.901-1) unstable; urgency=low
+
+  * New upstream release candidate (1.11.3 RC1):
+    - As usual: Fixes for various crashes and correctness issues.
+    - In particular: Fix for crash when starting a game (in wine) twice
+      (Closes: #637448).
+    - Also: Fix crashes with server regeneration (Closes: #649420).
+  * Add some lintian overrides:
+    - xserver-xorg-core: breaks-without-version against virtual packages
+      is perfectly OK.
+  * Don't forget to ship xorg.conf.d(5) in xserver-xorg-core.
+
+ -- Cyril Brulebois <kibi@debian.org>  Tue, 29 Nov 2011 17:04:09 +0100
+
+xorg-server (2:1.11.1.902-1) unstable; urgency=low
+
+  * New upstream release candidate (1.11.2 RC2):
+    - Fixes for various crashes and correctness issues.
+
+ -- Cyril Brulebois <kibi@debian.org>  Wed, 02 Nov 2011 11:10:03 +0100
+
+xorg-server (2:1.11.1.901-2) unstable; urgency=high
+
+  * Merge from upstream to get CVEs fixed:
+    - Fix CVE-2011-4028: File disclosure vulnerability.
+    - Fix CVE-2011-4029: File permission change vulnerability.
+  * Set urgency to “high” accordingly.
+
+ -- Cyril Brulebois <kibi@debian.org>  Thu, 20 Oct 2011 15:04:53 +0200
+
+xorg-server (2:1.11.1.901-1) unstable; urgency=low
+
+  * New upstream release candidate (1.11.2 RC1)
+    + Disable check of double-aligned in test/input.c on Renesas SH
+      (closes: #636673)
+  * Use dpkg-buildflags to enable hardening with recent dpkg.
+  * Enable PIE with DEB_BUILD_MAINT_OPTIONS, but add -Bsymbolic to LDFLAGS to
+    reduce performance loss from PIE.
+  * Pass --disable-silent-rules to configure.
+  * Drop dh_testroot from clean target.
+  * Add dummy build-{arch,indep} targets depending on build.
+
+ -- Julien Cristau <jcristau@debian.org>  Sat, 15 Oct 2011 19:05:41 +0200
+
+xorg-server (2:1.11.1-1) unstable; urgency=high
+
+  [ Cyril Brulebois ]
+  * Bump glproto dependency for xserver-xorg-dev (Closes: #639651).
+  * Set urgency to “high” since there were no issues other than the libwfb
+    one (see below) in the last 4 weeks.
+
+  [ Julien Cristau ]
+  * New upstream bugfix release
+    - belatedly bump extension ABI major
+    - add missing fbFoo → wfbFoo renames for libwfb.so, fixing issues with the
+      nvidia driver (closes: #641344)
+
+ -- Cyril Brulebois <kibi@debian.org>  Sat, 24 Sep 2011 11:23:17 +0200
+
+xorg-server (2:1.11.0-1ubuntu1~prep1) oneiric; urgency=low
+
+  * Merge from Debian experimental.  Remaining Ubuntu changes
+    - Fill in later
+  * Drop all XI2.1 multitouch patches, pending Chase's rework.
+  * 217_revert_bgnonevisitwindow.patch:
+  * 219_fedora-pointer-barriers.diff:
+    - Drop; included in the new upstream release.
+
+ -- Christopher James Halse Rogers <chris@cooperteam.net>  Sat, 10 Sep 2011 21:26:49 -0700
+
+xorg-server (2:1.11.0-1) unstable; urgency=low
+
+  [ Julien Cristau ]
+  * Make xvfb, xnest, xserver-xephyr and xserver-xfbdev provide the xserver
+    virtual package again.
+
+  [ Cyril Brulebois ]
+  * New upstream release:
+    - Fix assertion failure when calling dixSetPrivate (Closes: #632549).
+      Thanks, Mohammed Sameer!
+    - Fix memcpy abuse in the fb layer (Closes: #626682).
+
+ -- Cyril Brulebois <kibi@debian.org>  Sun, 28 Aug 2011 12:53:06 +0200
+
+xorg-server (2:1.10.99.901+git20110731-1) experimental; urgency=low
+
+  [ Cyril Brulebois ]
+  * New upstream release candidate.
+  * Bump serverminver, as well as input and video ABI.
+  * Adapt 15-nouveau.diff to cope with the glxdricommon-ification of
+    GLX probing. Nouveau users might still see an error (EE) mentioning
+    the fallback to software rendering.
+  * Bump pixman build-dep/dep to 0.21.8.
+  * Bump xutils-dev build-dep for new macros.
+  * Drop libglib2.0-dev build-dep, no longer needed for unit tests.
+  * Bump x11proto-fixes-dev build-dep for pointer barriers support.
+
+  [ Julien Cristau ]
+  * Update to git HEAD.
+    + DIX: Set backgroundState correctly for root window (Closes: #632134)
+  * Bump xproto, dri2proto and glproto build-dependencies.
+  * Merge packaging changes from the 1.10.x branch:
+    + Bump libgl1-mesa-dri versioned Recommends to 7.10.2-4, to lower the
+      odds of having a server built against multiarched mesa, installed
+      along a pre-multiarch mesa. The Breaks in mesa packages take care of
+      the other way round already.
+    + And since the server's binNMU managed to migrate to testing way too
+      early, add a Breaks against pre-multiarch libgl1-mesa-dri and
+      libgl1-mesa-dri-experimental.
+    + Bump Standards-Version to 3.9.2 (no changes).
+    + Add Breaks on drivers abandoned between lenny and squeeze.  This helps
+      apt decide to remove them instead of removing all of X.  Thanks, David
+      Kalnischkies!
+  * Drop obsolete 20-workaround-36986.diff.
+  * Fix patch stamp dependency.
+
+ -- Julien Cristau <jcristau@debian.org>  Sun, 31 Jul 2011 22:15:07 +0200
+
+xorg-server (2:1.10.4-1ubuntu1) oneiric; urgency=low
+
+  [ Christopher James Halse Rogers ]
+  * Drop i8xx-disablement patch.  2.6.39 and later kernels contain a patch
+    which alledgedly fixes the cache-incoherency problems. (LP: #817814)
+
+  [ Ricardo Salveti de Araujo ]
+  * debian/patches/112_armel-pvr-drv.patch:
+    - Include support for the pvr driver available on OMAP 4 (LP: #828494)
+
+  [ Timo Aaltonen ]
+  * Merge from Debian unstable.
+    - Fixes Xephyr assert failure in dixGetPrivateAddr (LP: #821090)
+  * debian/rules: Modify the patch stampdir creation.
+  * Update patch 500_xi2.1.patch to apply.
+  * Refresh patches.
+  * debian/rules: Add PATH for the xvfb-run check, otherwise Xvfb is not found.
+  * debian/rules: Shift the xvfb-run test to be run later, to ensure that the
+    binaries are installed.
+
+  [ Bryce Harrington ]
+  * debian/rules: Add check target invoking xvfb-run to test that it works
+  * debian/control: Add build dependency on xauth, required by xvfb-run
+
+  [ Chase Douglas ]
+  * Add fixes for touch grab handling, courtesy of Carlos Garnacho
+    - 505_Xi_ensure_replayed_touch_events_have_devices.patch
+    - 506_Xi_ensure_touch_events_update_currentTime.patch
+    - 507_dix_Ensure_touch_events_are_delivered_to_next_client.patch
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Fri, 09 Sep 2011 14:13:07 +0300
+
+xorg-server (2:1.10.4-1) unstable; urgency=low
+
+  [ Timo Aaltonen ]
+  * New upstream release.
+
+ -- Cyril Brulebois <kibi@debian.org>  Wed, 24 Aug 2011 10:44:42 +0200
+
+xorg-server (2:1.10.3-1) unstable; urgency=medium
+
+  [ Cyril Brulebois ]
+  * New upstream release (with just a version bump).
+  * Remove the Replaces: xdmx from xdmx-tools, that was before lenny.
+  * Add a Breaks: libgl1-mesa-dri-no-multiarch, to handle upgrades from
+    squeeze-backports (without multiarch) to wheezy (with multiarch).
+  * Set urgency to “medium” to speed things up. Migration to testing is
+    a prerequisite for squeeze backports.
+
+  [ Julien Cristau ]
+  * Merge packaging changes lost from the 1.7 (squeeze) branch:
+    + Add Breaks on drivers abandoned between lenny and squeeze.  This helps
+      apt decide to remove them instead of removing all of X.  Thanks, David
+      Kalnischkies!
+    + Set default xkb rules to evdev on linux, to work around a wrong default in
+      configure.ac and an Xorg issue where it reverts to the default on reset.
+      Thanks to Bastian Blank for the report.
+
+ -- Cyril Brulebois <kibi@debian.org>  Sun, 07 Aug 2011 19:35:07 +0200
+
+xorg-server (2:1.10.2.902-1ubuntu3) oneiric; urgency=low
+
+  * debian/patches/220_xi21_always_deliver_raw_events.diff:
+    - Backport patch from the mailing list to deliver raw events regardless of
+      grab state.  Bon appétit, DX!
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Mon, 11 Jul 2011 10:03:26 +1000
+
+xorg-server (2:1.10.2.902-1ubuntu2) oneiric; urgency=low
+
+  [ Bryce Harrington ]
+  * rules:  patch needs to depend on stampdir, else it doesn't get created,
+    and 'debian/rules patch' malfunctions.
+
+  [ Chase Douglas ]
+  * Fix event handling when neither X nor Y coordinates are set (LP: #806256)
+    - Added 504_fix_no_coords.patch
+
+  [ Christopher James Halse Rogers ]
+  * rules: Add both /usr/lib/xorg/extra-modules and
+    /usr/lib/$MULTIARCH/xorg/extra-modules for extra modules.
+    Fixes GLX for the proprietary drivers after a mesa upgrade (LP: #807209)
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Fri, 08 Jul 2011 13:16:59 +1000
+
+xorg-server (2:1.10.2.902-1ubuntu1) oneiric; urgency=low
+
+  * Merge from Debian unstable. (LP: #441653)
+    - Update 500_xi2.1.patch to apply.
+    - Drop patch 218_randr-check-rotated-virtual-size-limits-correctly.diff,
+      fixed upstream.
+  * Update the crtc confinement patch with one that should work, with
+    further fixes from upstream. (LP: #389519)
+  * Dropped a bunch of old Breaks from xserver-xorg-core.
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Tue, 05 Jul 2011 16:22:23 +0300
+
+xorg-server (2:1.10.2.902-1) unstable; urgency=low
+
+  * New upstream release (1.10.3 rc2):
+    - DIX: Set backgroundState correctly for root window (Closes: #632134).
+  * Drop 20-workaround-36986.diff, fixed upstream.
+  * Bump Standards-Version to 3.9.2 (no changes).
+
+ -- Cyril Brulebois <kibi@debian.org>  Sat, 02 Jul 2011 11:58:58 +0200
+
+xorg-server (2:1.10.2-2) unstable; urgency=low
+
+  * Bump libgl1-mesa-dri versioned Recommends to 7.10.2-4, to lower the
+    odds of having a server built against multiarched mesa, installed
+    along a pre-multiarch mesa. The Breaks in mesa packages take care of
+    the other way round already.
+  * And since the server's binNMU managed to migrate to testing way too
+    early, add a Breaks against pre-multiarch libgl1-mesa-dri and
+    libgl1-mesa-dri-experimental.
+
+ -- Cyril Brulebois <kibi@debian.org>  Fri, 17 Jun 2011 18:09:36 +0200
+
+xorg-server (2:1.10.2-1ubuntu1) oneiric; urgency=low
+
+  [ Timo Aaltonen ]
+  * Merge from Debian unstable, remaining changes:
+     - rules:
+      + Disable SELinux, libaudit-dev is not in main yet. (LP #406226)
+      + Add --with-extra-module-dir to support GL alternatives.
+      + Mention Ubuntu support in builderstring rather than package uploader's
+        email address.
+      + Enable multitouch gestures.
+    - control:
+      + Xvfb depends on xauth, x11-xkb-utils, recommends libgl1-mesa-dri.
+        (LP #500102)
+      + Add breaks for incompatible drivers. (LP #614993)
+      + Drop libaudit-dev from build-deps.
+      + Build-depend on newer mesa to pick up DRI search paths variable.
+      + Bump dependency on x11proto-input-dev for Xi 2.1
+      + Drop linux-any specifier to make pbuilder less narky.
+    - local/xvfb-run*: Add correct docs about error codes. (LP #328205)
+    - debian/patches:
+      + 100_rethrow_signals.patch:
+        When aborting, re-raise signals for apport
+      + 105_nvidia_fglrx_autodetect.patch:
+        Load proprietary drivers automatically when installed.
+      + 109_fix-swcursor-crash.patch:
+        Avoid dereferencing null pointer while reloading cursors during
+        resume. (LP #371405)
+      + 111_armel-drv-fallbacks.patch:
+        Add support for armel driver fallbacks.
+      + 122_xext_fix_card32_overflow_in_xauth.patch:
+        Fix server crash when “xauth generate” is called with large timeout.
+      + 157_check_null_modes.patch, 162_null_crtc_in_rotation.patch,
+        166_nullptr_xinerama_keyrepeat.patch, 167_nullptr_xisbread.patch
+        172_cwgetbackingpicture_nullptr_check.patch:
+        Fix various segfaults in xserver by checking pointers for NULL
+        values before dereferencing them.
+      + 165_man_xorg_conf_no_device_ident.patch
+        Correct man page
+      + 168_glibc_trace_to_stderr.patch:
+        Report abort traces to stderr instead of terminal
+      + 188_default_primary_to_first_busid.patch:
+        Pick the first device and carry on (LP #459512)
+      + 190_cache-xkbcomp_output_for_fast_start_up.patch:
+        Cache keyboard settings.
+      + 191-Xorg-add-an-extra-module-path.patch:
+        Add support for the alternative module path.
+      + 198_nohwaccess.patch:
+        Adds a -nohwaccess argument to make X not access the hardware
+        ports directly.
+      + 200_randr-null.patch:
+        Clarify a pointer initialization.
+      + 206_intel_8xx_default_to_fbdev.patch:
+        Makes 8xx class intel GPUs default to fbdev for stability. (LP #633593)
+      + 208_switch_on_release.diff:
+        Switch keyboard layouts on key-release rather than key-press
+       (LP #36812)
+      + 209_add_legacy_bgnone_option.patch:
+        Add -nr as a synonym for -background none until all ?DM are updated for
+       the new option.
+      + 210_pixman_null_ptr_check.patch:
+        Catch NULL pointer access after pixman_image_create_bits() failure
+       (LP #705078)
+      + 214_glx_dri_searchdirs.patch:
+        Search in same paths as mesa for DRI drivers for AIGLX so we can handle
+        UMS fallback for radeon gracefully.
+      + 217_revert_bgnonevisitwindow.patch:
+        Revert a commit that causes brief graphical corruption. (LP: 726807)
+      + 218_randr-check-rotated-virtual-size-limits-correctly.diff:
+        Fix rotation with nvidia driver. (LP: 740933)
+      + 500_xi2.1.patch,
+        501_xf86CoordinatesToWindow.patch,
+        502_gestures-extension.patch:
+        Add Xi 2.1 and Gesture extension support.
+      + 503_fix_masked_transformed_valuators.patch:
+        Fix masked transformed valuator handling (LP #774938)
+  * Drop patch 215_glx_drawable_refcounting.diff, similar fix included
+    upstream.
+  * Drop patch 121_only_switch_vt_when_active.diff, doesn't seem to
+    work anymore.
+  * videoabiver, inputabiver, xserver-xorg-dev.install:
+    Drop changes that are obsolete post-natty.
+  * Add 219_fedora-pointer-barrier.diff:
+    Pointer barrier and cursor confinement patch backported to 1.10.
+
+  [ Christopher James Halse Rogers ]
+  * debian/control:
+    Bump mesa-common-dev build-dep to pick up multiarch DRI paths.
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Wed, 15 Jun 2011 10:51:18 +1000
+
+xorg-server (2:1.10.2-1) unstable; urgency=low
+
+  * New upstream release.
+  * Add 20-workaround-36986.diff to avoid test failures on *i386.
+  * On GNU/kFreeBSD, enable HAL support for the main build, but disable it
+    for the udeb build, thanks to Robert Millan (Closes: #596586).
+
+ -- Cyril Brulebois <kibi@debian.org>  Mon, 30 May 2011 11:37:37 +0200
+
+xorg-server (2:1.10.1.901-1) experimental; urgency=low
+
+  * New upstream release (1.10.2 rc1):
+    - Comes with some Xi fixes.
+    - Comes with many GLX fixes.
+
+ -- Cyril Brulebois <kibi@debian.org>  Sat, 07 May 2011 13:27:28 +0200
+
+xorg-server (2:1.10.1-2) unstable; urgency=low
+
+  * Build xserver-xorg-core-udeb on hurd-i386.  Thanks, Samuel Thibault!
+  * Upload to unstable.
+
+ -- Julien Cristau <jcristau@debian.org>  Thu, 28 Apr 2011 13:28:58 +0200
+
+xorg-server (2:1.10.1-1ubuntu3) oneiric; urgency=low
+
+  * Add 218_randr-check-rotated-virtual-size-limits-correctly.diff
+    - Fix rotation with nvidia driver. (LP: #740933)
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Fri, 20 May 2011 00:07:11 +0300
+
+xorg-server (2:1.10.1-1ubuntu2) oneiric; urgency=low
+
+  * Fix masked transformed valuator handling (LP: #774938)
+    - Added debian/patches/503_fix_masked_transformed_valuators.patch
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Tue, 17 May 2011 14:44:58 -0700
+
+xorg-server (2:1.10.1-1ubuntu1) natty; urgency=low
+
+  * Merge from Debian experimental (LP: #757972)
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Tue, 19 Apr 2011 16:12:14 +0300
+
+xorg-server (2:1.10.1-1) experimental; urgency=low
+
+  * New upstream release.
+
+ -- Cyril Brulebois <kibi@debian.org>  Tue, 19 Apr 2011 03:08:08 +0200
+
+xorg-server (2:1.10.0.902-1ubuntu1) natty; urgency=low
+
+  * Merge from Debian experimental.
+    - dropped patches, included upstream:
+      213_xichangehierarchy-check-oom.patch
+      216_fix_sdksyms_build.diff, included upstream.
+      218_getValuatorEvents_cleanup.patch
+      219_xi1_handle_noncontinuous_valuator_data.patch
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Mon, 11 Apr 2011 09:51:56 +0300
+
+xorg-server (2:1.10.0.902-1) experimental; urgency=low
+
+  * New upstream release (1.10.1 rc2).
+
+ -- Cyril Brulebois <kibi@debian.org>  Sat, 09 Apr 2011 04:18:28 +0200
+
+xorg-server (2:1.10.0.901-1) experimental; urgency=low
+
+  * New upstream release (1.10.1 rc1).
+  * Relax build-dep and dep on x11proto-randr-dev since the XRandR 1.4
+    bits were finally reverted upstream.
+  * Remove patch: 16-construct-paths-in-doxygen.conf.diff (merged
+    upstream).
+  * Pass --enable-xcsecurity to the main build to restore the XC-SECURITY
+    extension, thanks to Stefan Fritsch's report (Closes: #599657).
+
+ -- Cyril Brulebois <kibi@debian.org>  Wed, 30 Mar 2011 02:22:56 +0200
+
+xorg-server (2:1.10.0-0ubuntu3) natty; urgency=low
+
+  [ Bryce Harrington ]
+  * patches/111_armel-drv-fallbacks.patch: Always fallback to -fbdev,
+    not just when no other X driver matches. (Thanks jcristau)
+
+  [ Chase Douglas ]
+  * Fix jumpy cursor in XI 1.x applications.
+    (LP: #736500)
+    - Added 218_getValuatorEvents_cleanup.patch
+    - Added 219_xi1_handle_noncontinuous_valuator_data.patch
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Thu, 31 Mar 2011 23:58:07 -0700
+
+xorg-server (2:1.10.0-0ubuntu2) natty; urgency=low
+
+  [ Chase Douglas ]
+  * patches/500_xi2.1.patch: Process ownership properly when activating an
+    async passive grab.
+    (LP: #733483)
+
+  [ Bryce Harrington ]
+  * 217_revert_bgnonevisitwindow.patch: Cherrypick from upstream.  Drops
+    recent change that inhibits drawing backfill for non-bg-None windows.
+    This causes a regression on -ati (at least) where menus and other
+    windows display graphical corruption briefly.
+    (LP: #726807)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Thu, 24 Mar 2011 15:27:40 -0700
+
+xorg-server (2:1.10.0-0ubuntu1) natty; urgency=low
+
+  * Update to new upstream final release.
+    + Drop 16-construct-paths-in-doxygen.conf.diff; included in new upstream.
+  * debian/patches/216_fix_sdksyms_build.diff:
+    + Cherry-pick from 1.10 branch, fixing the stale sdksyms.c file picked up
+      in the udeb build, causing the udeb build to fail with missing symbols.
+  * Merge from unreleased Debian experimental.  Remaining Ubuntu changes:
+    - rules:
+      + Disable SELinux, libaudit-dev is not in main yet. (LP #406226)
+      + Enable xcsecurity. (LP #247537)
+      + Add --with-extra-module-dir to support GL alternatives.
+      + Mention Ubuntu support in builderstring rather than package uploader's
+        email address.
+    - control:
+      + Xvfb depends on xauth, x11-xkb-utils. (LP #500102)
+      + Add breaks for incompatible drivers. (LP #614993)
+      + Drop libaudit-dev from build-deps.
+      + Build-depend on newer mesa to pick up DRI search paths variable.
+      + Bump dependency on x11proto-input-dev for Xi 2.1
+      + Drop linux-any specifier to make pbuilder less narky.
+      + Bump build-depends on mesa-common-dev to pick up dri.pc DRI search
+        paths change for 214_glx_dri_searchdirs.patch
+    - local/xvfb-run*: Add correct docs about error codes. (LP #328205)
+    - debian/patches:
+      + 100_rethrow_signals.patch:
+        When aborting, re-raise signals for apport
+      + 105_nvidia_fglrx_autodetect.patch:
+        Load proprietary drivers automatically when installed.
+      + 109_fix-swcursor-crash.patch:
+        Avoid dereferencing null pointer while reloading cursors during
+        resume. (LP #371405)
+      + 111_armel-drv-fallbacks.patch:
+        Add support for armel driver fallbacks.
+      + 121_only_switch_vt_when_active.diff:
+        Add a check to prevent the X server from changing the VT when killing
+        GDM from the console.
+      + 122_xext_fix_card32_overflow_in_xauth.patch:
+        Fix server crash when “xauth generate” is called with large timeout.
+      + 157_check_null_modes.patch, 162_null_crtc_in_rotation.patch,
+        166_nullptr_xinerama_keyrepeat.patch, 167_nullptr_xisbread.patch
+        172_cwgetbackingpicture_nullptr_check.patch:
+        Fix various segfaults in xserver by checking pointers for NULL
+        values before dereferencing them.
+      + 165_man_xorg_conf_no_device_ident.patch
+        Correct man page
+      + 168_glibc_trace_to_stderr.patch:
+        Report abort traces to stderr instead of terminal
+      + 184_virtual_devices_autodetect.patch:
+        Use vesa for qemu device, which is not supported by cirrus
+      + 188_default_primary_to_first_busid.patch:
+        Pick the first device and carry on (LP #459512)
+      + 190_cache-xkbcomp_output_for_fast_start_up.patch:
+      + 191-Xorg-add-an-extra-module-path.patch:
+        Add support for the alternatives module path.
+      + 198_nohwaccess.patch:
+        Adds a -nohwaccess argument to make X not access the hardware
+        ports directly.
+      + 200_randr-null.patch:
+        Clarify a pointer initialization.
+      + 206_intel_8xx_default_to_fbdev.patch:
+        Makes 8xx class intel GPUs default to fbdev for stability. (LP #633593)
+      + 208_switch_on_release.diff:
+        Switch keyboard layouts on key-release rather than key-press
+       (LP #36812)
+      + 209_add_legacy_bgnone_option.patch:
+        Add -nr as a synonym for -background none until all ?DM are updated for
+       the new option.
+      + 210_pixman_null_ptr_check.patch:
+        Catch NULL pointer access after pixman_image_create_bits() failure
+       (LP #705078)
+      + 213_xichangehierarchy-check-oom.patch:
+        Add NULL pointer check for out-of-memory conditions. (LP #720445)
+      + 214_glx_dri_searchdirs.patch:
+        Search in same paths as mesa for DRI drivers for AIGLX so we can handle
+        UMS fallback for radeon gracefully.
+      + 215_glx_drawable_refcounting.diff:
+        Prevents segfault on logout and server regenerate, and possibly other
+        times. (LP #711422)
+      + 500_xi2.1.patch,
+        501_xf86CoordinatesToWindow.patch,
+        502_gestures-extension.patch:
+        Add Xi 2.1 and Gesture extension support.
+  * debian/serverminver:
+    - Bump to 1.10.0-0ubuntu1~ for Xi 2.1 ABI
+  * New upstream release fixes crash in Record, trigerred by x11vnc
+    (LP: #525066)
+  * Refresh 500_xi2.1.patch for new upstream version
+  * debian/videoabiver:
+    - Bump to 10 for XRandR 1.4 revert.
+
+ -- Cyril Brulebois <kibi@debian.org>  Wed, 30 Mar 2011 02:22:56 +0200
+
+
+xorg-server (2:1.9.99.903-1) experimental; urgency=low
+
+  * New upstream release candidate (1.10 rc3).
+  * Remove patch: 17-fix-ftbfs-on-sparc.diff (merged upstream).
+  * Remove patch: 20-update-gpu-pitch.diff (merged upstream).
+  * Refresh patch: 07-xfree86-fix-build-with-xv-disabled.diff
+  * Replace patch fixing out-of-tree-build:
+    - 16-oot-build.diff (dirty local hack).
+    + 16-construct-paths-in-doxygen.conf.diff (from upstream,
+      without the gitignore hunk to get patching working).
+  * Bump video ABI version, and serverminver accordingly.
+
+ -- Cyril Brulebois <kibi@debian.org>  Fri, 25 Feb 2011 15:22:39 +0100
+
+xorg-server (2:1.9.99.902-3) experimental; urgency=low
+
+  * Merge from master up to 93a7399370.
+  * New patch: 17-fix-ftbfs-on-sparc.diff; let's try it for real before
+    asking for its being merged upstream.
+  * Refresh all patches.
+
+ -- Cyril Brulebois <kibi@debian.org>  Wed, 23 Feb 2011 13:36:13 +0100
+
+xorg-server (2:1.9.99.902-2ubuntu2) natty; urgency=low
+
+  [ Timo Aaltonen ]
+  * Remove 169_mipointer_nullptr_checks.patch, fixed in another way
+    upstream since 1.6.1.901.
+
+  [ Chase Douglas ]
+  * Cancel touch clients if emulated button press is delivered.
+    (LP: #725191)
+  * Check slave device touch selection mask during implicit grab.
+    (LP: #725241)
+  * Cancel slave touch selections when attached to master device.
+    (LP: #723904)
+  * Check for touch selections only when there are active clients.
+    (LP: #723900)
+  * Prevent pointer motion when more than one touch on touchpad.
+    (LP: #730881)
+
+  [ Bryce Harrington ]
+  * Drop specification for linux-any.  Breaks pbuilder test builds.
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Mon, 07 Mar 2011 14:28:02 -0500
+
+xorg-server (2:1.9.99.902-2ubuntu1) natty; urgency=low
+
+  [ Christopher James Halse Rogers ]
+  * Merge from Debian experimental.  Remaining Ubuntu changes:
+    - rules:
+      + Disable SELinux, libaudit-dev is not in main yet. (LP #406226)
+      + Enable xcsecurity. (LP #247537)
+      + Add --with-extra-module-dir to support GL alternatives.
+      + Mention Ubuntu support in builderstring rather than package uploader's
+        email address.
+    - control:
+      + Xvfb depends on xauth, x11-xkb-utils. (LP #500102)
+      + Add breaks for incompatible drivers. (LP #614993)
+      + Drop libaudit-dev from build-deps.
+      + Build-depend on newer mesa to pick up DRI search paths variable.
+    - local/xvfb-run*: Add correct docs about error codes. (LP #328205)
+    - debian/patches:
+      + 100_rethrow_signals.patch:
+        When aborting, re-raise signals for apport
+      + 105_nvidia_fglrx_autodetect.patch:
+        Load proprietary drivers automatically when installed.
+      + 109_fix-swcursor-crash.patch:
+        Avoid dereferencing null pointer while reloading cursors during
+        resume. (LP: #371405)
+      + 111_armel-drv-fallbacks.patch:
+        Add support for armel driver fallbacks.
+      + 121_only_switch_vt_when_active.diff:
+        Add a check to prevent the X server from changing the VT when killing
+        GDM from the console.
+      + 122_xext_fix_card32_overflow_in_xauth.patch:
+        Fix server crash when “xauth generate” is called with large timeout.
+      + 157_check_null_modes.patch, 162_null_crtc_in_rotation.patch,
+        166_nullptr_xinerama_keyrepeat.patch, 167_nullptr_xisbread.patch
+        169_mipointer_nullptr_checks.patch,
+        172_cwgetbackingpicture_nullptr_check.patch:
+        Fix various segfaults in xserver by checking pointers for NULL
+        values before dereferencing them.
+      + 165_man_xorg_conf_no_device_ident.patch
+        Correct man page
+      + 168_glibc_trace_to_stderr.patch:
+        Report abort traces to stderr instead of terminal
+      + 184_virtual_devices_autodetect.patch:
+        Use vesa for qemu device, which is not supported by cirrus
+      + 188_default_primary_to_first_busid.patch:
+        Pick the first device and carry on (LP: #459512)
+      + 190_cache-xkbcomp_output_for_fast_start_up.patch:
+      + 191-Xorg-add-an-extra-module-path.patch:
+        Add support for the alternatives module path.
+      + 198_nohwaccess.patch:
+        Adds a -nohwaccess argument to make X not access the hardware
+        ports directly.
+      + 200_randr-null.patch:
+        Clarify a pointer initialization.
+      + 206_intel_8xx_default_to_fbdev.patch:
+        Makes 8xx class intel GPUs default to fbdev for stability. (LP: #633593)
+      + 208_switch_on_release.diff:
+        Switch keyboard layouts on key-release rather than key-press
+       (LP #36812)
+      + 209_add_legacy_bgnone_option.patch:
+        Add -nr as a synonym for -background none until all ?DM are updated for
+       the new option.
+      + 210_pixman_null_ptr_check.patch:
+        Catch NULL pointer access after pixman_image_create_bits() failure
+       (LP #705078)
+      + 213_xichangehierarchy-check-oom.patch:
+        Add NULL pointer check for out-of-memory conditions. (LP #720445)
+      + 214_glx_dri_searchdirs.patch:
+        Search in same paths as mesa for DRI drivers for AIGLX so we can handle
+        UMS fallback for radeon gracefully.
+  * 211_glx_fix_bindtextimageext_length_check.patch:
+  * 212_fix_request_length_check_for_createglxpbuffersgix.patch:
+    - Drop; these cherry-picks are included in 1.10RC2
+  * 214_glx_dri_searchdirs.patch:
+    - Fix dlclose/free snafu. (LP: #722563)
+    - Fix nouveau check to downgrade missing DRI error messages to info.
+      We don't support nouveau's 3D, so let's not complain too strenuously
+      when it's not installed.
+  * 215_glx_drawable_refcounting.diff:
+    - Refcount GLXDrawables to avoid use-after-free crashes.  Patch from
+      xorg-devel mailing list.  Prevents segfault on logout and server
+      regenerate, and possibly other times. (LP: #711422)
+  * debian/inputabiver,
+    debian/videoabiver,
+    debian/xserver-xorg-dev.install
+    - Temporarily re-add these to xserver-xorg-dev so we don't need to merge
+      all the driver changes from Debian en masse.  These should be dropped
+      once all drivers have been merged from Debian, and certainly in Natty+1.
+  * debian/serverminver:
+    - Include 2ubuntu1 string; Xi 2.1 bumps the minor input ABI, so drivers
+      built against it need the Xi 2.1 patched server.
+
+  [ Timo Aaltonen ]
+  * debian/patches/216_dix-valuator-count-of-0-is-valid.diff:
+    - For all but motion and proximity events, having no valuators is ok.
+      Regression from 1.9, keyboard events are not converted to protocol
+      events. (LP: #714696)
+
+  [ 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
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Wed, 23 Feb 2011 09:40:07 +1100
+
+xorg-server (2:1.9.99.902-2) experimental; urgency=low
+
+  * Bump dependency on x11proto-randr-dev, needed since xorg-server.pc
+    pulls a newer randrproto version.
+  * Merge from debian-unstable (picking packaging updates from 2:1.9.4-3).
+  * Mention some basic checks to perform when updating to a new upstream
+    release, in README.source: ABI bumps and SDK_REQUIRED_MODULES updates.
+  * Accordingly:
+    - Bump the x11proto-xext-dev dependency.
+    - Don't bump the x11proto-kb-dev dependency (even etch had a
+      sufficient version).
+
+ -- Cyril Brulebois <kibi@debian.org>  Sun, 20 Feb 2011 07:02:20 +0100
+
+xorg-server (2:1.9.99.902-1) experimental; urgency=low
+
+  [ Christopher James Halse Rogers ]
+  * New upstream release (1.10 rc1)
+  * Drop 16-xaa-fbcomposite-fix-negative-size.diff, the mod macro that this
+    patch fixes is no longer used.
+  * debian/control:
+    - Bump x11proto-randr-dev and x11proto-xext-dev build-deps to 1.3.99 and
+      7.1.99 for new XRandR and XSync extension protocols.
+
+  [ Julien Cristau ]
+  * Bump serverminver and ABI versions.
+
+  [ Cyril Brulebois ]
+  * New upstream release (1.10 rc2).
+  * bug script: Report libGL-related diversions.
+  * Bump serverminver again, since ABI_XINPUT_VERSION was bumped from 12.0
+    to 12.2.
+  * Update debian/copyright from upstream COPYING.
+  * Add patch to work around out-of-tree issues: 16-oot-build.diff
+
+ -- Cyril Brulebois <kibi@debian.org>  Sat, 19 Feb 2011 15:29:54 +0100
+
+xorg-server (2:1.9.99.901+git20110131.be3be758-0ubuntu6) natty; urgency=low
+
+  * debian/patches/214_glx_dri_searchdirs.patch:
+    - Search for DRI drivers for AIGLX in the same set of directories as mesa.
+      Allows us to fall back to the classic radeon drivers when KMS is not
+      available.
+  * debian/rules:
+    - --disable-builddocs → --disable-devel-docs to match upstream rename.
+      Makes local builds faster and less prone to doxygen errors.
+  * debian/control:
+    - Bump build-depends on mesa to pick up new drisearchdirs variable in
+      dri.pc
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Fri, 18 Feb 2011 17:03:46 +1100
+
+xorg-server (2:1.9.99.901+git20110131.be3be758-0ubuntu5) natty; urgency=low
+
+  * Add 213_xichangehierarchy-check-oom.patch: Another NULL pointer check
+    for out-of-memory conditions, this time leading to a segfault in an
+    unchecked calloc in XISendDeviceHierarchyEvent().
+    (LP: #720445)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Wed, 16 Feb 2011 16:46:35 -0800
+
+xorg-server (2:1.9.99.901+git20110131.be3be758-0ubuntu4) natty; urgency=low
+
+  * Add 211_glx_fix_bindtextimageext_length_check.patch,
+    212_fix_request_length_check_for_createglxpbuffersgix.patch:
+    - Correct wrong request size match for xGLXCreateGLXPbufferSGIXReq.
+      This can result in some invalid BadLength errors.
+      (LP: #714280)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Mon, 14 Feb 2011 12:07:45 -0800
+
+xorg-server (2:1.9.99.901+git20110131.be3be758-0ubuntu3) natty; urgency=low
+
+  * Restore 208_switch_on_release.diff - the patch does not appear to be
+    upstream actually.  Users confirm the fix regressed without it.
+    (LP: #711842)
+  * Add 210_pixman_null_ptr_check.patch: pixman_image_create_bits() can
+    return NULL under a variety of circumstances, thus needs checked
+    before dereferencing it in the pixman_image_set_has_client_clip()
+    call.
+    (LP: #705078, deb: 596155, fdo: 28882)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Thu, 03 Feb 2011 22:42:52 -0800
+
+xorg-server (2:1.9.99.901+git20110131.be3be758-0ubuntu1) natty; urgency=low
+
+  * Merge from (unreleased) debian-experimental.  Remaining Ubuntu changes:
+    - rules:
+      + Disable SELinux, libaudit-dev is not in main yet. (LP: #406226)
+      + Enable xcsecurity. (LP: #247537)
+      + Add --with-extra-module-dir to support GL alternatives.
+    - control:
+      + Xvfb depends on xauth, x11-xkb-utils. (LP: #500102)
+      + Add breaks for incompatible drivers. (LP: #614993)
+      + Drop libaudit-dev from build-deps.
+    - local/xvfb-run*: Add correct docs about error codes. (LP #328205)
+    - debian/patches:
+      + 100_rethrow_signals.patch:
+        When aborting, re-raise signals for apport
+      + 109_fix-swcursor-crash.patch:
+        Avoid dereferencing null pointer while reloading cursors during
+        resume. (LP: #371405)
+      + 111_armel-drv-fallbacks.patch:
+        Add support for armel driver fallbacks.
+      + 121_only_switch_vt_when_active.diff:
+        Add a check to prevent the X server from changing the VT when killing
+        GDM from the console.
+      + 122_xext_fix_card32_overflow_in_xauth.patch:
+        Fix server crash when “xauth generate” is called with large timeout.
+      + 157_check_null_modes.patch, 162_null_crtc_in_rotation.patch,
+        166_nullptr_xinerama_keyrepeat.patch, 167_nullptr_xisbread.patch
+        169_mipointer_nullptr_checks.patch,
+        172_cwgetbackingpicture_nullptr_check.patch:
+        Fix various segfaults in xserver by checking pointers for NULL
+        values before dereferencing them.
+      + 165_man_xorg_conf_no_device_ident.patch
+        Correct man page
+      + 168_glibc_trace_to_stderr.patch:
+        Report abort traces to stderr instead of terminal
+      + 184_virtual_devices_autodetect.patch:
+        Use vesa for qemu device, which is not supported by cirrus
+      + 188_default_primary_to_first_busid.patch:
+        Pick the first device and carry on (LP: #459512)
+      + 190_cache-xkbcomp_output_for_fast_start_up.patch:
+      + 191-Xorg-add-an-extra-module-path.patch:
+        Add support for the alternatives module path.
+      + 198_nohwaccess.patch:
+        Adds a -nohwaccess argument to make X not access the hardware
+        ports directly.
+      + 200_randr-null.patch:
+        Clarify a pointer initialization.
+      + 206_intel_8xx_default_to_fbdev.patch:
+        Makes 8xx class intel GPUs default to fbdev for stability. (LP: #633593)
+  * Refresh 121_only_switch_vt_when_active.diff for new upstream.
+  * Drop 187_edid_quirk_hp_nc8430.patch; upstream.
+  * Drop 189_xserver_1.5.0_bg_none_root.patch; functionality now upstream.
+  * Refresh 190_cache-xkbcomp_output_for_fast_start_up.patch for new upstream.
+  * Drop 197_xvfb-randr.patch:
+    - miRandR, which this used, has been removed from the server.
+  * Drop 204_fix-neg-sync-transition.patch; upstream.
+  * Drop 207_dga_master_device.patch; upstream.
+  * Drop 208_switch_on_release.diff; upstream.
+  * debian/patches/209_add_legacy_bgnone_option.patch:
+    - Add "-nr" as a synonym for "-background none" to ease the transition from
+      the old 189_xserver_1.5.0_bg_none_root.patch patch.  Can be dropped once
+      all the ?DM have been updated to use the new option.
+  * debian/control:
+    - Add Breaks: to xserver-xorg-video-8 and current fglrx.  These proprietary
+      drivers don't yet have appropriate dependency information, so manually
+      handle them here to prevent broken upgrades.
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Mon, 31 Jan 2011 19:45:19 +1100
+
+xorg-server (2:1.9.4-3) unstable; urgency=low
+
+  * Maintainer script clean-up:
+    - xserver-xorg-core.preinst.in: Remove, 1.5 is long gone.
+    - xserver-xorg-core.postinst.in: Remove, 1.5 is long gone, and 1.7.4
+      was between lenny and squeeze.
+    - xserver-xorg-core.postrm.in: Rename as xserver-xorg-core.postrm,
+      handling upgrades from 1.5 is no longer needed, only keep the logs
+      removal and the #DEBHELPER# placeholder.
+  * Move remaining xsfbs bits to debian/rules:
+    - Create/clean stampdir/.
+    - Use quilt.make, $(QUILT_STAMPFN), unpatch.
+    - Define SOURCE_NAME and SOURCE_VERSION.
+  * Remove debian/xsfbs accordingly.
+  * Remove reference to xsfbs in README.source accordingly.
+  * Add patch: 20-update-gpu-pitch.diff (from upstream bug 33929), fixing
+    issues with the radeon driver (Closes: #613957).
+
+ -- Cyril Brulebois <kibi@debian.org>  Sun, 20 Feb 2011 05:35:50 +0100
+
+xorg-server (2:1.9.4-2) unstable; urgency=low
+
+  * Put an end to the dependency hell! Now that we have proper
+    dependencies between drivers and the server, remove xserver-xorg from
+    xserver-xorg-core's Depends (Closes: #362313). In a nutshell, one may
+    want to choose between installing:
+    - xserver-xorg-core: the server itself, with no strings attached.
+    - xserver-xorg: pulls the server and drivers, contains the X wrapper
+      and some documentation.
+    - xorg: pulls xserver-xorg as well as various X11 clients and fonts.
+  * bug script: Report KMS configuration files and their contents.
+  * bug script: Keep only one lspci call (with proper filtering), which
+    makes PCI IDs come back.
+  * bug script: Report libGL-related diversions.
+  * Stop providing xorg-input-abi-11.0 and xorg-video-abi-8.0 now that
+    drivers have reached unstable.
+  * Merge server-1.9-branch up to 0a4b0de9af.
+
+ -- Cyril Brulebois <kibi@debian.org>  Wed, 16 Feb 2011 23:17:07 +0100
+
+xorg-server (2:1.9.4-1) unstable; urgency=low
+
+  * The “squeeze is released, target sid!” upload.
+  * New upstream release.
+  * Unfuzzy all patches.
+  * Get rid of long obsolete NEWS file.
+  * Replace “--remaining-packages” with “-Nfoo -Nbar” in the “dh_strip -s”
+    call, to avoid non-stripped binaries if the build is resumed.
+  * Use “dh_prep” instead of deprecated “dh_clean -k”.
+  * Bump debhelper build-dep accordingly.
+  * Introduce dh_xsf_substvars, to be used in driver packages to set
+    appropriate substitution variables for Depends and Provides, before
+    calling dh_gencontrol. Ship it in xserver-xorg-dev.
+  * Also ship a debhelper sequence: xsf.pm, to insert dh_xsf_substvars
+    before dh_gencontrol. Usage: “dh $@ --with xsf” when using dh.
+  * Get rid of inputabiver and videoabiver files, they've been deprecated
+    for a while, and drivers should all have switched by now.
+  * rules: Only read the first line of debian/serverminver to set the
+    serverminver variable, used to prepare xinputdep and videodrvdep
+    files.
+  * rules: Keep only the major ABI version from pkg-config's output to
+    build xorg-{input,video}-abi-$ABI. To handle minor ABI versions, we
+    have the serverminver mechanism.
+  * To avoid having to binNMU all drivers to update their Depends from
+    xorg-*-abi-$MAJOR-$MINOR to xorg-*-abi-$MAJOR, add xorg-video-abi-8.0
+    and xorg-input-abi-11.0 to the server's Provides temporarily (until
+    the next ABI bump).
+  * Add ${videoabi}, ${inputabi} to the udeb's Provides. There's no reason
+    for udebs to have loose dependencies.
+  * Accordingly, copy server's substvars as udeb's substvars once the
+    videoabi/inputabi variables are computed.
+  * Add an abibumpcheck target which checks for xinput and videodrv ABI
+    updates, based on the versions stored in debian/serverminver; make
+    clean depend on it to make sure such an update is noticed at the very
+    beginning of the build.
+  * Add current versions to debian/serverminver accordingly.
+  * Remove “xserver” from Provides, it's deprecated.
+  * Use architecture wildcards for build-deps.
+  * Make xserver-xfbdev linux-any; add armhf and powerpcspe to the udeb
+    (Closes: #585697, #605764).
+  * Cherry-pick, thanks to Samuel Thibault (Closes: #590715):
+    - xserver: enable TLS even if AIGLX is not enabled
+  * Update Uploaders list. Thanks, David & Steve & Brice!
+  * Bump Standards-Version to 3.9.1 (no changes needed).
+
+ -- Cyril Brulebois <kibi@debian.org>  Sat, 05 Feb 2011 10:40:55 +0100
+
+xorg-server (2:1.9.3.902-1) experimental; urgency=low
+
+  * New upstream release (1.9.4 rc2).
+  * Improve bug script:
+    - Stop reporting about roster and checksum for config file and server
+      symlink, they are no longer used.
+    - Replace printf with echo everywhere, it's slightly more readable and
+      all lines are newline-terminated anyway.
+    - Also use a “pecho” (pretty echo) function to underline some strings,
+      making the output slightly more readable.
+    - Fix listing xorg.conf.d's contents. Previously, that was only done
+      if xorg.conf existed.
+    - Check for local libraries by running ldd on the server.
+    - Check for obsolete libraries in the same way (/usr/X11R6/lib might
+      still exist in some cases, and be referenced in /etc/ld.so.conf, so
+      using ldd is sufficient to find out, see #546836 for an example).
+
+ -- Cyril Brulebois <kibi@debian.org>  Mon, 31 Jan 2011 14:00:41 +0100
+
+xorg-server (2:1.9.3.901-1) experimental; urgency=low
+
+  * New upstream release (1.9.4 rc1).
+
+ -- Cyril Brulebois <kibi@debian.org>  Sun, 09 Jan 2011 03:10:13 +0100
+
+xorg-server (2:1.9.2.902-1) experimental; urgency=low
+
+  * New upstream release (1.9.3 rc2).
+  * Drop 06_dont_trap_access_to_timer_and_keyboard.diff, merged upstream.
+
+ -- Cyril Brulebois <kibi@debian.org>  Sun, 05 Dec 2010 02:16:14 +0100
+
+xorg-server (2:1.9.2-1) experimental; urgency=low
+
+  * New upstream release.
+
+ -- Cyril Brulebois <kibi@debian.org>  Wed, 10 Nov 2010 00:10:19 +0100
+
+xorg-server (2:1.9.0.902-1ubuntu4) natty; urgency=low
+
+  * Add 208_switch_on_release.diff: Perform keyboard layout switches on
+    key-release rather than key-press events.  This solves a very
+    long-standing issue where e.g. <ctrl>+<shift>+<key> fails when
+    ctrl+shift is configured for layout switching.
+    (LP: #36812)
+2A
+ -- Bryce Harrington <bryce@ubuntu.com>  Thu, 06 Jan 2011 14:35:59 -0800
+
+xorg-server (2:1.9.0.902-1ubuntu3) natty; urgency=low
+
+  * Add 207_dga_master_device.patch: Cherrypick from upstream xserver git
+    to fix crash with a bluetooth keyboard when using XBMC full screen.
+    (LP: #597895)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Thu, 06 Jan 2011 12:17:16 -0800
+
+xorg-server (2:1.9.0.902-1ubuntu2) natty; urgency=low
+
+  [ Christopher James Halse Rogers ]
+  * Cherry-pick 3effb61e from server-1.9 branch.  Fixes a typo in Xinerama
+    support which caused Qt apps to crash X when using Xinerama multi-head
+    (LP: #650539)
+
+  [ Robert Hooker ]
+  * Add 105_nvidia_fglrx_autodetect.patch, enables fglrx and nvidia to work
+    without an xorg.conf.
+  * debian/local/64-xorg-xkb.rules, control: Use keyboard-configuration
+    information for keymaps (/etc/default/keyboard)
+
+ -- Robert Hooker <sarvatt@ubuntu.com>  Wed, 05 Jan 2011 11:29:17 -0500
+
+xorg-server (2:1.9.0.902-1ubuntu1) natty; urgency=low
+
+  * Merge from Debian experimental.  Remaining Ubuntu changes:
+    - rules:
+      + Disable SELinux, libaudit-dev is not in main yet. (LP: #406226)
+      + Enable xcsecurity. (LP: #247537)
+      + Add --with-extra-module-dir to support GL alternatives.
+    - control: 
+      + Xvfb depends on xauth, x11-xkb-utils. (LP: #500102)
+      + Add breaks for incompatible drivers. (LP: #614993)
+      + Drop libaudit-dev from build-deps.
+    - rules, local/64-xorg-xkb.rules: Don't use keyboard-configuration
+      until it's available.
+    - local/xvfb-run*: Add correct docs about error codes. (LP #328205)
+    - debian/patches:
+      + 100_rethrow_signals.patch:
+        When aborting, re-raise signals for apport
+      + 109_fix-swcursor-crash.patch:
+        Avoid dereferencing null pointer while reloading cursors during
+        resume. (LP: #371405)
+      + 111_armel-drv-fallbacks.patch:
+        Add support for armel driver fallbacks.
+      + 121_only_switch_vt_when_active.diff:
+        Add a check to prevent the X server from changing the VT when killing
+        GDM from the console.
+      + 122_xext_fix_card32_overflow_in_xauth.patch:
+        Fix server crash when “xauth generate” is called with large timeout.
+      + 157_check_null_modes.patch, 162_null_crtc_in_rotation.patch,
+        166_nullptr_xinerama_keyrepeat.patch, 167_nullptr_xisbread.patch
+        169_mipointer_nullptr_checks.patch,
+        172_cwgetbackingpicture_nullptr_check.patch:
+        Fix various segfaults in xserver by checking pointers for NULL
+        values before dereferencing them.
+      + 165_man_xorg_conf_no_device_ident.patch
+        Correct man page
+      + 168_glibc_trace_to_stderr.patch:
+        Report abort traces to stderr instead of terminal
+      + 184_virtual_devices_autodetect.patch:
+        Use vesa for qemu device, which is not supported by cirrus
+      + 187_edid_quirk_hp_nc8430.patch:
+        Quirk for another LPL monitor (LP: #380009)
+      + 188_default_primary_to_first_busid.patch:
+        Pick the first device and carry on (LP: #459512)
+      + 189_xserver_1.5.0_bg_none_root.patch:
+        Create a root window with no background.
+      + 190_cache-xkbcomp_output_for_fast_start_up.patch:
+      + 191-Xorg-add-an-extra-module-path.patch:
+        Add support for the alternatives module path.
+      + 197_xvfb-randr.patch:
+        Adds xrandr support to xvfb. (LP: #516123)
+      + 198_nohwaccess.patch:
+        Adds a -nohwaccess argument to make X not access the hardware
+        ports directly.
+      + 200_randr-null.patch:
+        Clarify a pointer initialization.
+      + 203_gestures-extension.patch:
+      + 202_xf86CoordinationsToWindows.patch:
+        Add gesture extension support (LP: #616678)
+      + 204_fix-neg-sync-transition.patch:
+        Fixes gnome screensaver fade being uninterruptable. (LP: #595555)
+      + 206_intel_8xx_default_to_fbdev.patch:
+        Makes 8xx class intel GPUs default to fbdev for stability. (LP: #633593)
+  * Drop 205_udev-product-ids.patch, merged upstream.
+
+ -- Robert Hooker <robert.hooker@canonical.com>  Mon, 18 Oct 2010 11:19:33 -0400
+
+xorg-server (2:1.9.0.902-1) experimental; urgency=low
+
+  * New upstream release (1.9.1 rc2).
+  * Drop 20-Revert-for-bug-30267.diff, merged upstream.
+
+ -- Cyril Brulebois <kibi@debian.org>  Sat, 16 Oct 2010 15:24:48 +0200
+
+xorg-server (2:1.9.0.901-1) experimental; urgency=low
+
+  [ Christopher James Halse Rogers ]
+  * New upstream release (1.9.0):
+    - Fixes crash in DamageUnregister on session close (LP: #343694)
+    - Fixes crash with extremely large windows exposed by xpdf (Closes: #320627)
+  * Drop 17-fix-DRI2-segfault-when-clientGone.diff: fixed upstream in more
+    generality.
+
+  [ Cyril Brulebois ]
+  * New upstream release (1.9.1 rc1).
+  * Add patch: 20-Revert-for-bug-30267.diff, to fix FTBFS due to test
+    failures, see https://bugs.freedesktop.org/show_bug.cgi?id=30267 for
+    reference.
+  * Bump xutils-dev build-dep for new macros.
+  * Remove --disable-multibuffer from configure flags, that extension is
+    gone for real now.
+
+ -- Cyril Brulebois <kibi@debian.org>  Tue, 12 Oct 2010 22:13:20 +0200
+
+xorg-server (2:1.9.0-0ubuntu6) maverick; urgency=low
+
+  [ Chase Douglas ] 
+  * Fix udev USB product ID parsing (LP: #628214)
+    - debian/patches:
+      + 205_udev-product-ids.patch
+
+  [ Christopher James Halse Rogers ]
+  * debian/patches/206_intel_8xx_default_to_fbdev.patch:
+    - Don't autoload the intel driver on i830, i845g and i855.  These are
+      still too unstable with KMS/GEM.  X will autoload the fbdev driver
+      (if using KMS) or the vesa driver instead.  (LP: #633593)
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Mon, 13 Sep 2010 18:48:54 +1000
+
+xorg-server (2:1.9.0-0ubuntu5) maverick; urgency=low
+
+  * debian/control:
+    - fix duplicated breaks for xserver-xorg-video-v4l
+
+ -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 08 Sep 2010 10:57:49 +0200
+
+xorg-server (2:1.9.0-0ubuntu4) maverick; urgency=low
+
+  * debian/control:
+    - add more "breaks" for leftover drivers that have no
+      xserver 1.9 abi version, thanks to Jean-Baptiste Lallement
+      (LP: #614993)
+
+ -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 31 Aug 2010 10:52:29 +0200
+
+xorg-server (2:1.9.0-0ubuntu3) maverick; urgency=low
+
+  * debian/control:
+    - add additional breaks for video drivers that have no ABI for
+      xserver 1.9 (LP: #614993)
+    - merge the "breaks" list from the debian git tree
+
+ -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 31 Aug 2010 10:04:01 +0200
+
+xorg-server (2:1.9.0-0ubuntu2) maverick; urgency=low
+
+  * debian/control:
+    - add explict breaks from xserver-xorg-core against 
+      xserver-xorg-video-v4l (<< 1:0.2.0-4ubuntu1) to ensure that
+      upgrades with universe disabled work (LP: #614993)
+
+ -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 30 Aug 2010 15:40:07 +0200
+
+xorg-server (2:1.9.0-0ubuntu1) maverick; urgency=low
+  
+  * Merge from (unreleased) Debian experimental.  Remaining Ubuntu changes:
+    - rules, control:
+      + Disable SELinux, libaudit-dev is not in main yet (LP 406226).
+        Drop libaudit-dev from build-deps.
+    - rules: Enable xcsecurity (LP 247537).
+    - local/xvfb-run*: Add correct docs about error codes (LP 328205)
+    - rules: Add --with-extra-module-dir to support GL alternatives.
+    - control: Xvfb depends on xauth, x11-xkb-utils. (LP 500102)
+    - rules, local/64-xorg-xkb.rules: Don't use keyboard-configuration
+      until it's available.
+    - control: Update some versioned Breaks for Ubuntu versions.
+    - debian/patches:
+      + 100_rethrow_signals.patch:
+        When aborting, re-raise signals for apport
+      + 109_fix-swcursor-crash.patch:
+        Avoid dereferencing null pointer while reloading cursors during
+        resume. (LP 371405)
+      + 111_armel-drv-fallbacks.patch:
+        Add support for armel driver fallbacks.
+      + 121_only_switch_vt_when_active.diff:
+        Add a check to prevent the X server from changing the VT when killing
+        GDM from the console.
+      + 122_xext_fix_card32_overflow_in_xauth.patch:
+        Fix server crash when “xauth generate” is called with large timeout.
+      + 157_check_null_modes.patch, 162_null_crtc_in_rotation.patch,
+        166_nullptr_xinerama_keyrepeat.patch, 167_nullptr_xisbread.patch
+        169_mipointer_nullptr_checks.patch,
+        172_cwgetbackingpicture_nullptr_check.patch:
+        Fix various segfaults in xserver by checking pointers for NULL
+        values before dereferencing them.
+      + 165_man_xorg_conf_no_device_ident.patch
+        Correct man page
+      + 168_glibc_trace_to_stderr.patch:
+        Report abort traces to stderr instead of terminal
+      + 184_virtual_devices_autodetect.patch:
+        Use vesa for qemu device, which is not supported by cirrus
+      + 187_edid_quirk_hp_nc8430.patch:
+        Quirk for another LPL monitor (LP 380009)
+      + 188_default_primary_to_first_busid.patch:
+        Pick the first device and carry on (LP 459512)
+      + 189_xserver_1.5.0_bg_none_root.patch:
+        Create a root window with no background.
+      + 190_cache-xkbcomp_output_for_fast_start_up.patch:
+        Cache keyboard settings.
+      + 191-Xorg-add-an-extra-module-path.patch:
+        Add support for the alternatives module path.
+      + 197_xvfb-randr.patch:
+        Adds xrandr support to xvfb. (LP 516123)
+      + 198_nohwaccess.patch:
+        Adds a -nohwaccess argument to make X not access the hardware
+        ports directly.
+      + 200_randr-null.patch:
+        Clarify a pointer initialization.  
+      + 203_gestures-extension.patch:
+      + 202_xf86CoordinationsToWindows.patch:
+        Add gesture extension support (LP: 616678)
+      + debian/serverminver:
+        Bump for gesture support
+  * New upstream release:
+    - Fixes crash in DamageUnregister on session close (LP: #343694)
+    - Fixes crash with extremely large windows exposed by xpdf (Closes: #320627)
+  * Drop 17-fix-DRI2-segfault-when-clientGone.diff: fixed upstream in more
+    generality.
+  * debian/patches/204_fix-neg-sync-transition.patch:
+    - Fix edge case in SYNC extension resulting in GNOME screensaver's 
+      fade-to-screensaver being uninteruptible.  (LP: #595555)
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Tue, 24 Aug 2010 15:44:10 +1000
+
+xorg-server (2:1.8.99.905-1ubuntu3) maverick; urgency=low
+
+  * Bump debian/serverminver for gesture support
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Fri, 20 Aug 2010 16:35:22 -0400
+
+xorg-server (2:1.8.99.905-1ubuntu2) maverick; urgency=low
+  
+    * Add in gesture support (LP: #616678)
+      - add debian/patches/203_gestures-extension.patch
+        and debian/patches/202_xf86CoordinationsToWindows.patch
+      - debian/rules:
+        - add configure option to enable gesture
+
+ -- Chase Douglas <chase.douglas@ubuntu.com>  Mon, 09 Aug 2010 14:33:40 +0000
+
+xorg-server (2:1.8.99.905-1ubuntu1) maverick; urgency=low
+
+  * Merge from (unreleased) Debian experimental.  Remaining Ubuntu changes:
+    - rules, control:
+      + Disable SELinux, libaudit-dev is not in main yet (LP 406226).
+        Drop libaudit-dev from build-deps.
+    - rules: Enable xcsecurity (LP 247537).
+    - local/xvfb-run*: Add correct docs about error codes (LP 328205)
+    - rules: Add --with-extra-module-dir to support GL alternatives.
+    - control: Xvfb depends on xauth, x11-xkb-utils. (LP 500102)
+    - rules, local/64-xorg-xkb.rules: Don't use keyboard-configuration
+      until it's available.
+    - control: Update some versioned Breaks for Ubuntu versions.
+    - debian/patches:
+      + 100_rethrow_signals.patch:
+        When aborting, re-raise signals for apport
+      + 109_fix-swcursor-crash.patch:
+        Avoid dereferencing null pointer while reloading cursors during
+        resume. (LP 371405)
+      + 111_armel-drv-fallbacks.patch:
+        Add support for armel driver fallbacks.
+      + 121_only_switch_vt_when_active.diff:
+        Add a check to prevent the X server from changing the VT when killing
+        GDM from the console.
+      + 122_xext_fix_card32_overflow_in_xauth.patch:
+        Fix server crash when “xauth generate” is called with large timeout.
+      + 157_check_null_modes.patch, 162_null_crtc_in_rotation.patch,
+        166_nullptr_xinerama_keyrepeat.patch, 167_nullptr_xisbread.patch
+        169_mipointer_nullptr_checks.patch,
+        172_cwgetbackingpicture_nullptr_check.patch:
+        Fix various segfaults in xserver by checking pointers for NULL
+        values before dereferencing them.
+      + 165_man_xorg_conf_no_device_ident.patch
+        Correct man page
+      + 168_glibc_trace_to_stderr.patch:
+        Report abort traces to stderr instead of terminal
+      + 184_virtual_devices_autodetect.patch:
+        Use vesa for qemu device, which is not supported by cirrus
+      + 187_edid_quirk_hp_nc8430.patch:
+        Quirk for another LPL monitor (LP 380009)
+      + 188_default_primary_to_first_busid.patch:
+        Pick the first device and carry on (LP 459512)
+      + 189_xserver_1.5.0_bg_none_root.patch:
+        Create a root window with no background.
+      + 190_cache-xkbcomp_output_for_fast_start_up.patch:
+        Cache keyboard settings.
+      + 191-Xorg-add-an-extra-module-path.patch:
+        Add support for the alternatives module path.
+      + 197_xvfb-randr.patch:
+        Adds xrandr support to xvfb. (LP 516123)
+      + 198_nohwaccess.patch:
+        Adds a -nohwaccess argument to make X not access the hardware
+        ports directly.
+      + 200_randr-null.patch:
+        Clarify a pointer initialization.
+  * Update changelog entries for 1.8.1.902-1 which became 1.8.99.904-1
+  * Drop 196_xvfbscreeninit-handling.patch: it's semantically empty, and now 
+    doesn't apply.  Merge remaining #include change into 197_xvfb-randr.patch
+  * New upstream version will start correctly when no outputs are connected,
+    as long as the video driver can dynamically resize the framebuffer
+    (true for all KMS drivers) (LP: #337889)
+  * New upstream version fixes crash on non-admin logout with KDE (LP: #569879)
+  * Refresh 111_armel-drv-fallbacks.patch to fix the build on armel
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Thu, 05 Aug 2010 11:25:14 +1000
+
+xorg-server (2:1.8.99.905-1) experimental; urgency=low
+
+  * Drop recommends on xbase-clients.
+  * Add xauth to xserver-common recommends.
+  * Bump Standards-Version to 3.9.0.
+  * Don't install serverminver, drivers shouldn't use this anymore.
+  * New upstream release candidate.
+
+ -- Julien Cristau <jcristau@debian.org>  Sat, 17 Jul 2010 11:13:32 +0100
+
+xorg-server (2:1.8.99.904-1) experimental; urgency=low
+
+  [ Julien Cristau ]
+  * Install the upstream changelog in xserver-common, instead of duplicating
+    its 1MB in all other packages.
+  * Stop repacking the tarball: the non-modifiable README.DRI was removed
+    upstream.
+  * Bump build-deps on x11proto-core-dev, x11proto-dri2-dev, libxfont-dev.
+  * Bump xserver-xorg-dev dependency on x11proto-core-dev and
+    x11proto-dri2-dev, add dependency on x11proto-xinerama-dev.
+  * Bump serverminver, videoabiver, inputabiver.
+
+  [ Christopher James Halse Rogers ]
+  * New upstream RC
+    - A number of DRI2 fixes.
+    - Fix for hanging OpenGL clients with multiple heads.
+  * 17-fix-DRI2-segfault-when-clientGone.diff:
+    - Pick up fix from https://bugs.freedesktop.org/show_bug.cgi?id=27497 to
+      fix server crash in DRI2SwapEvent handling (LP: #595182).
+
+ -- Julien Cristau <jcristau@debian.org>  Fri, 09 Jul 2010 12:45:09 +0100
+
+xorg-server (2:1.8.1.902-0ubuntu2) maverick; urgency=low
+
+  * debian/rules:
+    - Drop the upstream changelog harder.  We're scrabbling for CD space
+      and this is an easy 1MB saving.
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Wed, 30 Jun 2010 09:50:33 +1000
+
+xorg-server (2:1.8.1.902-0ubuntu1) maverick; urgency=low
+
+  * Merge from (unreleased) Debian experimental.  Remaining changes:  
+    - rules, control:
+      + Disable SELinux, libaudit-dev is not in main yet (LP 406226).
+        Drop libaudit-dev from build-deps.
+    - rules: Enable xcsecurity (LP 247537).
+    - local/xvfb-run*: Add correct docs about error codes (LP 328205)
+    - rules: Add --with-extra-module-dir to support GL alternatives.
+    - control: Xvfb depends on xauth, x11-xkb-utils. (LP 500102)
+    - rules, local/64-xorg-xkb.rules: Don't use keyboard-configuration
+      until it's available.
+    - control: Update some versioned Breaks for Ubuntu versions.
+    - debian/patches:
+      + 100_rethrow_signals.patch:
+        When aborting, re-raise signals for apport
+      + 109_fix-swcursor-crash.patch:
+        Avoid dereferencing null pointer while reloading cursors during
+        resume. (LP 371405)
+      + 111_armel-drv-fallbacks.patch:
+        Add support for armel driver fallbacks.
+      + 121_only_switch_vt_when_active.diff:
+        Add a check to prevent the X server from changing the VT when killing
+        GDM from the console.
+      + 122_xext_fix_card32_overflow_in_xauth.patch:
+        Fix server crash when “xauth generate” is called with large timeout.
+      + 157_check_null_modes.patch, 162_null_crtc_in_rotation.patch,
+        166_nullptr_xinerama_keyrepeat.patch, 167_nullptr_xisbread.patch
+        169_mipointer_nullptr_checks.patch,
+        172_cwgetbackingpicture_nullptr_check.patch:
+        Fix various segfaults in xserver by checking pointers for NULL
+        values before dereferencing them.
+      + 165_man_xorg_conf_no_device_ident.patch
+        Correct man page
+      + 168_glibc_trace_to_stderr.patch:
+        Report abort traces to stderr instead of terminal
+      + 184_virtual_devices_autodetect.patch:
+        Use vesa for qemu device, which is not supported by cirrus
+      + 187_edid_quirk_hp_nc8430.patch:
+        Quirk for another LPL monitor (LP 380009)
+      + 188_default_primary_to_first_busid.patch:
+        Pick the first device and carry on (LP 459512)
+      + 189_xserver_1.5.0_bg_none_root.patch:
+        Create a root window with no background.
+      + 190_cache-xkbcomp_output_for_fast_start_up.patch:
+        Cache keyboard settings.
+      + 191-Xorg-add-an-extra-module-path.patch:
+        Add support for the alternatives module path.
+      + 196_xvfb-fbscreeninit-handling.patch, 197_xvfb-randr.patch:
+        Adds xrandr support to xvfb. (LP 516123)
+      + 198_nohwaccess.patch:
+        Adds a -nohwaccess argument to make X not access the hardware
+        ports directly.
+      + 200_randr-null.patch:
+        Clarify a pointer initialization.
+  * Update changelog entries for previously unreleased Debian 1.8.1.901-1
+  
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Wed, 23 Jun 2010 11:19:49 +1000
+
+xorg-server (2:1.8.1.901-1ubuntu1) maverick; urgency=low
+
+  [ Timo Aaltonen ]
+  * Merged from Debian experimental, remaining changes:
+    - rules, control:
+      + Disable SELinux, libaudit-dev is not in main yet (LP 406226).
+        Drop libaudit-dev from build-deps.
+    - rules: Enable xcsecurity (LP 247537).
+    - local/xvfb-run*: Add correct docs about error codes (LP 328205)
+    - rules: Add --with-extra-module-dir to support GL alternatives.
+    - control: Xvfb depends on xauth, x11-xkb-utils, recommends
+      libgl1-mesa-dri. (LP 500102)
+    - rules, local/64-xorg-xkb.rules: Don't use keyboard-configuration
+      until it's available.
+    - debian/patches:
+      + 100_rethrow_signals.patch:
+        When aborting, re-raise signals for apport
+      + 109_fix-swcursor-crash.patch:
+        Avoid dereferencing null pointer while reloading cursors during
+        resume. (LP 371405)
+      + 111_armel-drv-fallbacks.patch:
+        Add support for armel driver fallbacks.
+      + 121_only_switch_vt_when_active.diff:
+        Add a check to prevent the X server from changing the VT when killing
+        GDM from the console.
+      + 122_xext_fix_card32_overflow_in_xauth.patch:
+      + 157_check_null_modes.patch, 162_null_crtc_in_rotation.patch,
+        166_nullptr_xinerama_keyrepeat.patch, 167_nullptr_xisbread.patch
+        169_mipointer_nullptr_checks.patch,
+        172_cwgetbackingpicture_nullptr_check.patch:
+        Fix various segfaults in xserver by checking pointers for NULL
+        values before dereferencing them.
+      + 165_man_xorg_conf_no_device_ident.patch
+        Correct man page
+      + 168_glibc_trace_to_stderr.patch:
+        Report abort traces to stderr instead of terminal
+      + 184_virtual_devices_autodetect.patch:
+        Use vesa for qemu device, which is not supported by cirrus
+      + 187_edid_quirk_hp_nc8430.patch:
+        Quirk for another LPL monitor (LP 380009)
+      + 188_default_primary_to_first_busid.patch:
+        Pick the first device and carry on (LP 459512)
+      + 189_xserver_1.5.0_bg_none_root.patch:
+        Create a root window with no background.
+      + 190_cache-xkbcomp_output_for_fast_start_up.patch:
+        Cache keyboard settings.
+      + 191-Xorg-add-an-extra-module-path.patch:
+        Add support for the alternatives module path.
+      + 196_xvfb-fbscreeninit-handling.patch, 197_xvfb-randr.patch:
+        Adds xrandr support to xvfb. (LP 516123)
+      + 198_nohwaccess.patch:
+        Adds a -nohwaccess argument to make X not access the hardware
+        ports directly.
+      + 200_randr-null.patch:
+        Clarify a pointer initialization.
+  * Dropped patches:
+    - 106_nouveau_autodetect.patch: obsoleted by 15-nouveau.diff
+    - 112_xaa-fbcomposite-fix-negative-size.patch: adopted by Debian
+    - 113_quell_nouveau_aiglx.patch: obsoleted by 15-nouveau.diff
+    - 115_xext_fix_cursor_ref_counting.patch: merged upstream
+    - 116_fix_typos_in_swap_functions.patch: merged upstream
+    - 118_xkb_fix_garbage_init.patch: merged upstream
+    - 123_exa_sys_ptr_nullpointer_check.patch: merged upstream
+    - 199_xfvb-help-typo.patch: merged upstream
+  * debian/xserver-xorg-core.preinst.in: Drop the removal of the wrong
+    alternative, obsolete by now.
+  * debian/control: Build the udeb and bump the relaxed build-deps.
+  * debian/local/xvfb-run: Don't disable composite, seems to run fine
+    with it nowadays.
+
+  [ Robert Hooker ]
+  * Fix 190_cache-xkbcomp_output_for_fast_start_up.patch so it works.
+  * Drop 164_trap-aspect-ratios.patch: obsolete.
+  * debian/rules: Adjust confflag targets so xcsecurity isn't enabled for udeb
+    with disabled xace.
+  * Drop 184_virtual_devices_autodetect.patch: It's a noop with todays autoconfig.
+  
+  [ Bryce Harrington ]
+  * debian/rules: Don't reference the package uploader for support; instead point
+    users to the standard Ubuntu support page.
+    (LP: #589811)
+
+  [ Christopher James Halse Rogers ]
+  * Add debian/gbp.conf pointing at ubuntu branch.
+  * Drop 109_fix-swcursor-crash.patch; merged upstream in 3a3edb2c.
+  * 122_xext_fix_card32_overflow_in_xauth.patch: Update to most recent patch
+    on patchwork.  This patch actually works! (tested with 
+    “xauth generate :0 . trusted timeout 99999999) (LP: #519049)
+  
+ -- Bryce Harrington <bryce@ubuntu.com>  Mon, 07 Jun 2010 14:50:49 -0700
+
+xorg-server (2:1.8.1.901-1) experimental; urgency=low
+
+  [ Julien Cristau ]
+  * New upstream release
+  * Merge changes from 2:1.7.7-2.
+
+  [ Christopher James Halse Rogers ]
+  * 16-xaa-fbcomposite-fix-negative-size.diff:
+    - mi hunk merged upstream.  Update to keep just the fbpict.c hunk.
+
+ -- Julien Cristau <jcristau@debian.org>  Mon, 07 Jun 2010 23:22:48 +0200
+
+xorg-server (2:1.8.1-1) experimental; urgency=low
+
+  * New upstream release
+    - 02_Add-libgcrypt-and-libnettle-as-options-for-sha1.diff: partly merged
+      upstream, rest renamed to 02_Add-libnettle-as-option-for-sha1.diff and
+      ported to new version
+    - 05_only_call_gamma_set_if_nonnull.diff: merged upstream
+    - 07-xfree86-fix-build-with-xv-disabled.diff: rediffed
+    - 08-config-xorg-conf-d.diff: merged upstream
+    - 09-inputclass-sans-abi9.diff: likewise
+    - 10-config-libudev-backend.diff: likewise
+    - 11-xfree86-fix-video-fallback.diff: likewise
+    - 12-xfree86-dont-complain-about-missing-coredevices.diff: likewise
+    - 13-unbreak-input-abi.diff: obsolete
+    - 14-tone-down-nidr-errors.diff: merged upstream
+    - 15-nouveau.diff: rediffed
+    - 17-xfree86-saner-conf-search-paths.diff: merged upstream
+    - 18-Add-10-evdev.conf.diff: likewise
+  * Bump xutils-dev build-dep for new macros.
+  * Add build-dep on xfonts-utils for fontutil.pc.
+  * Bump build-deps on mesa, glproto and dri2proto.
+  * Drop obsolete configure options --disable-xsdl and
+    --disable-null-root-cursor.
+  * --enable-werror has been replaced by --enable-strict-compilation, adjust
+    rules.
+  * xdmx-tools.install: xdmx was renamed to dmxinfo.
+  * Bump debian/serverminver and ABI versions.
+
+ -- Julien Cristau <jcristau@debian.org>  Wed, 12 May 2010 18:01:39 +0200
+
+xorg-server (2:1.7.7-2) unstable; urgency=low
+
+  * autoconfig: load the nouveau driver for nvidia hw.  Stolen from F13.
+  * Try to catch non-event devices when running udevadm info in the bug
+    script.
+  * Pull from upstream server-1.7-nominations branch
+    - dix: make DeviceEvent coordinates signed for Xinerama (closes: #581763)
+    - xfree86: dga needs to use the master keyboard state (closes: #576393)
+    - Fix null pointer dereference in xf86_reload_cursors (closes: #507916)
+
+ -- Julien Cristau <jcristau@debian.org>  Thu, 03 Jun 2010 17:00:18 +0200
+
+xorg-server (2:1.7.7-1) unstable; urgency=low
+
+  [ Timo Aaltonen ]
+  * Update patch 17; Add missing __datadir__ to cpprules.in.
+
+  [ Cyril Brulebois ]
+  * Add listing files under /etc/X11/xorg.conf.d in bug script.
+  * Fix typo in 10-mouse.conf: s/Mouse/Pointer/ (Closes: #579130).
+
+  [ Julien Cristau ]
+  * Drop the GLX 1.4 patches to fix server crashes with DRI2 (closes:
+    #567677).
+  * Change driver ABI Conflicts to Breaks.  Drop old Conflicts/Replaces on
+    pre-modular xserver packages.
+  * Unset PRERELEASE to avoid the prerelease warning in the log.
+  * New upstream release:
+    - fixes Xvfb crash with XI2 (closes: #575905)
+    - EXA: Check sys_ptr isn't NULL before passing it to the UploadToScreen
+      hook (closes: #576656)
+  * 19-exa-handle-pixmap-create-destroy-in-lower-layers.diff is now upstream,
+    remove it.
+  * Drop mention of input_id from debian/copyright since we stopped shipping
+    it a while back.
+
+ -- Julien Cristau <jcristau@debian.org>  Tue, 04 May 2010 15:17:59 +0200
+
+xorg-server (2:1.7.6.901-3) unstable; urgency=low
+
+  [ Julien Cristau ]
+  * On !linux, install mouse and kbd catchall snippets in the xorg.conf.d
+    directory.  Fixes FTBFS on those archs.
+
+  [ Cyril Brulebois ]
+  * Cherry-pick “exa: handle pixmap create/destroy in lower layers” which
+    fixes server crashes when pixmaps are created in the course of
+    software fallbacks (Closes: #576816). Many thanks to Arthur Marsh for
+    the tests!
+
+ -- Cyril Brulebois <kibi@debian.org>  Mon, 19 Apr 2010 15:26:15 +0200
+
+xorg-server (2:1.7.6.901-2) unstable; urgency=low
+
+  * Fix dependency generation: Replace PKG_CONFIG_DIR with PKG_CONFIG_PATH
+    (/usr/share/xserver-xorg/{videodrv,xinput}dep may lack a version
+    otherwise).
+
+ -- Cyril Brulebois <kibi@debian.org>  Sat, 17 Apr 2010 18:38:17 +0200
+
+xorg-server (2:1.7.6.901-1) unstable; urgency=low
+
+  * New upstream release candidate.
+    - Fix crash when all glyphs of a given depth are freed, but not all
+      glyphsets (closes: #568533)
+
+  [ Cyril Brulebois ]
+  * Steal patch 112_xaa-fbcomposite-fix-negative-size.patch from ubuntu,
+    and rename it 16-xaa-fbcomposite-fix-negative-size.diff as it's now
+    applied in Debian as well. It fixes arithmetic bugs in mod(); thanks to
+    Bryce Harrington.
+  * Merge 'xsfbs/debian-unstable' to fix target dependencies, which fixes
+    useless rebuilds.
+  * Add support for “noudeb” in DEB_BUILD_OPTIONS to disable building the
+    udeb flavour (even on architectures where udebs are supposed to be
+    built) to speed up debug builds. When this is used, the udeb is still
+    built, but rather empty…
+  * Modify bug script to include kernel version (from /proc/version) since
+    the uname in Xorg.*.log might not give enough details (like the Debian
+    revision).
+
+  [ Julien Cristau ]
+  * Remove from debian/rules an obsolete reference to
+    /usr/share/debhelper/dh_make/debianm/rules.
+  * Make xserver-xorg-core provide ABI-versioned virtual packages for drivers
+    to depend on.  This is a first step in making our ABI handling saner (see
+    #573371).
+  * xvfb-run: don't rely on /tmp/X$i-lock to bump $SERVERNUM in auto-servernum
+    mode (closes: #577195).  Thanks, Jozef Kutej!
+  * Bump serverminver for new handling of input config.
+  * Add Breaks on input drivers installing files in /usr/lib/X11/xorg.conf.d
+    since we're changing the path.
+  * Stop looking for x11_driver property in udev, since we're migrating the
+    drivers over to xorg.conf.d anyway.
+  * Install 10-evdev.conf in /usr/share/X11/xorg.conf.d (from upstream, patch
+    18-Add-10-evdev.conf.diff).
+
+  [ Timo Aaltonen ]
+  * Add 17-xfree86-saner-conf-search-paths.diff. Allows using another
+    xorg.conf.d directory for local changes.
+
+ -- Cyril Brulebois <kibi@debian.org>  Sat, 17 Apr 2010 16:55:39 +0200
+
+xorg-server (2:1.7.6-2ubuntu8) lucid-updates; urgency=low
+
+  [Bryce Harrington]
+  * Add 123_exa_sys_ptr_nullpointer_check.patch: Patch from upstream to
+    verify a pointer is not NULL before dereferencing it.  Fixes X
+    segfault in miCopyRegion which occurs while using firefox (e.g. typing
+    into fields in AOL).  Issue found by Jerry Lamos.
+    (LP: #539772)
+  * Add 19-exa-handle-pixmap-create-destroy-in-lower-layers.diff: Patch
+    from Debian to fix X segfault on mouse click in xfig, when pixmaps
+    are created in the course of software fallbacks.
+    (LP: #553647)
+
+  [Martin Pitt]
+  * debian/local/64-xorg-xkb.rules: Ignore XKBMODEL=="SKIP" and
+    XKBVARIANT=="U.S. English", which happen to get into
+    /etc/default/console-setup in some cases like the VMWare automatic
+    installer.
+    (LP: #548891)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Wed, 28 Apr 2010 13:10:44 -0700
+
+xorg-server (2:1.7.6-2ubuntu7) lucid; urgency=low
+
+  * Drop 117_fix_crash_with_createglyphset.patch
+    - Dupe of patch 110
+  * Drop 03_fedora_glx_versioning.diff, 04_fedora_glx14-swrast.diff
+    - These patches were brought in by Debian to provide glx 1.4 support
+      which Fedora backported from xserver 1.8, however testing in
+      Ubuntu showed they caused a crash when closing Clutter apps (#550218),
+      and graphics corruption when opening windows.  Dropping these patches
+      returns us to GLX 1.2, which has been found to be stable; Debian has
+      also dropped these two patches.
+      (Fixes #565903).
+  * Drop 114_dri2_make_sure_x_drawable_exists.patch
+    - This was an early attempt by upstream which fixed the aforementioned
+      Clutter crash, but which introduced a memory leak.
+      (Fixes #565981)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Thu, 22 Apr 2010 17:24:38 -0700
+
+xorg-server (2:1.7.6-2ubuntu6) lucid; urgency=low
+
+  * Add 122_xext_fix_card32_overflow_in_xauth.patch:  Prevent overflow
+    of a CARD32 variable millis by doing bounds checking.  This is a
+    patch currently in discussion at fdo #27134, so this patch can be
+    dropped in favor of whatever upstream decides to include.
+    (LP: #519049)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Thu, 15 Apr 2010 14:10:53 -0700
+
+xorg-server (2:1.7.6-2ubuntu5) lucid; urgency=low
+
+  * Update patches in previous upload to fix FTBS issue.
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Thu, 15 Apr 2010 11:03:01 -0700
+
+xorg-server (2:1.7.6-2ubuntu4) lucid; urgency=low
+
+  * Add several cherrypicks of fixes from upstream git tree which fix various
+    issues and that look safe with low or no risk of regression.
+    + 115_xext_fix_cursor_ref_counting.patch: Xext: Fix cursor reference
+      counting hazard.
+    + 116_fix_typos_in_swap_functions.patch: Fixes typos in several of the
+      glxcmdsswap routines.
+    + 117_fix_crash_with_createglyphset.patch:  Fixes crash introduced in
+      FindGlyphsByHash() if one client disconnects while a second is in
+      the middle of doing certain Glyph operations.
+    + 118_xkb_fix_garbage_init.patch: Fixes typo that can cause garbage
+      bits to get appended on the xkbControlsNotify changedControls mask
+      because it was uninitialized on the stack.
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Wed, 14 Apr 2010 18:49:56 -0700
+
+xorg-server (2:1.7.6-2ubuntu3) lucid; urgency=low
+
+  * add support for omapfb to 111_armel-drv-fallbacks.patch
+
+ -- Alexander Sack <asac@ubuntu.com>  Mon, 12 Apr 2010 14:43:42 +0200
+
+xorg-server (2:1.7.6-2ubuntu2) lucid; urgency=low
+
+  [Bryce Harrington]
+  * Add 113_quell_nouveau_aiglx.patch: Don't emit error message about
+    AIGLX on nouveau.  3D is not supported yet on -nouveau so this error
+    message serves only to confuse bug reporters.
+    (LP: #529590)
+
+  [Robert Sarvatt]
+  * Add 114_dri2_make_sure_x_drawable_exists.patch: Makes sure
+    a corresponding X drawable exists before trying to use it, fixing
+    xserver segfaults under DRI2 when closing down GLX apps.
+    (LP: #550218)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Wed, 31 Mar 2010 16:37:45 -0700
+
+xorg-server (2:1.7.6-2ubuntu1) lucid; urgency=low
+
+  [ Timo Aaltonen ]
+  * Merge from Debian unstable. (LP: #546933)
+
+  [ Michael Casadevall ]
+  * Updated 111_armel-drv-fallbacks.patch to also add support for finding
+    dovefb devices in addition to imx51 ones. (LP: #550701)
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Tue, 30 Mar 2010 22:01:12 +0300
+
+xorg-server (2:1.7.6-2) unstable; urgency=low
+
+  [ Timo Aaltonen ]
+  * Add 08-config-xorg-conf-d.diff, 09-inputclass-sans-abi9.diff,
+    10-config-libudev-backend.diff. Backport xorg.conf.d, inputclass
+    and libudev support from xserver 1.8. Replaces the patches we had
+    before. This allows us to migrate from a temporary udev based
+    input device configuration straight to the long term solution
+    introduced in 1.8.
+  * Add 11-xfree86-fix-video-fallback.diff from SUSE. Allows the video
+    fallback method to work when there's an xorg.conf around.
+  * Add 12-xfree86-dont-complain-about-missing-coredevices.diff.
+    No reason to complain about these, unless AEI is off.
+  * Add 13-unbreak-input-abi.diff. Keep the old NewInputDeviceRequest(),
+    rename the new as NIDR18() and call it from NIDR(). This way we
+    don't break the input ABI.
+  * Add 14-tone-down-nidr-errors.diff. Use X_INFO instead of X_ERROR.
+
+  [ Julien Cristau ]
+  * 15-keep-udev-x11-driver.diff: keep looking for the x11_driver udev
+    property as a transitional measure.  This should allow the new server to
+    work while drivers aren't transitioned to xorg.conf.d yet.
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Tue, 30 Mar 2010 21:32:52 +0300
+
+xorg-server (2:1.7.6-1ubuntu3) lucid; urgency=low
+
+  * Extend 112_xaa-fbcomposite-fix-negative-size.patch to also correct a
+    mod() definition in the mi code which suffers the same flaw.
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Mon, 29 Mar 2010 14:15:07 -0700
+
+xorg-server (2:1.7.6-1ubuntu2) lucid; urgency=low
+
+  * Add 112_xaa-fbcomposite-fix-negative-size.patch:  Prevent 3rd-party
+    controllable Xorg crash/exploit when XAA and compositing is in use.
+    Be more careful in sign-changes with mod().
+    (LP: #551193)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Mon, 29 Mar 2010 13:37:06 -0700
+
+xorg-server (2:1.7.6-1ubuntu1) lucid; urgency=low
+
+  [Timo Aaltonen]
+  * Merge from Debian unstable.
+  * Drop patch 107, included in Debian.
+  * Drop patch 108, included upstream.
+  * control: Drop the udeb, we don't need it for lucid.
+  * control: Relax/drop some build-deps caused by the udeb.
+
+  [Bryce Harrington]
+  * Add 110_findglyphbyhash-fix.patch from upstream to fix a sporadic
+    crash in FindGlyphByHash.
+    (LP: #401045)
+  * Renumber patch 201_armel-drv-fallbacks.patch to 111
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Wed, 24 Mar 2010 12:04:20 -0700
+
+xorg-server (2:1.7.6-1) unstable; urgency=low
+
+  [ Brice Goglin ]
+  * Add 06_dont_trap_access_to_timer_and_keyboard.diff,
+    thanks Samuel Thibault.
+
+  [ Timo Aaltonen ]
+  * New upstream release, closes: #574354.
+
+  [ Julien Cristau ]
+  * Don't build xserver-xorg-core-udeb on sparc.  The linker fails because
+    relocations have to be truncated when building statically against
+    libnettle.
+
+ -- Cyril Brulebois <kibi@debian.org>  Tue, 23 Mar 2010 16:59:08 +0100
+
+xorg-server (2:1.7.5.902-1) unstable; urgency=low
+
+  [ Julien Cristau ]
+  * config/udev: fix adding unnamed devices.
+  * Build two flavours, one for the main package and one for the udeb.
+  * Add patch to fix Xorg build with XV disabled.
+
+  [ Timo Aaltonen ]
+  * Add 16-config-dont-filter-input-subsys.diff so for instance serial
+    wacom devices are initialized by the udev backend (LP: #522318,
+    closes: #568236).
+
+  [ Brice Goglin ]
+  * New upstream release.
+    + Allow for missing or disabled compat_output, closes: #572268, #554450.
+    + Reenable RECORD extension, closes: #570680.
+    + dix: try to ring the bell even if the current device doesn't have one,
+      closes: #564200.
+  * Refresh patches.
+  * Fix typo in xvfb-run.1, thanks Joey Hess, closes: #527490.
+  * Add 06_dont_trap_access_to_timer_and_keyboard.diff,
+    thanks Samuel Thibault.
+
+  [ Cyril Brulebois ]
+  * Add udeb needed for the graphical installer: xserver-xorg-core-udeb.
+  * Version/Bump some B-D to make sure xserver-xorg-core-udeb gets its
+    dependencies on the (recently-added) udebs rather than on the
+    libraries:
+     - libpciaccess-dev
+     - libudev-dev
+     - libxau-dev
+     - libxfont-dev
+  * Replace 02_Add-libgcrypt-as-an-option-for-sha1.diff with
+    02_Add-libgcrypt-and-libnettle-as-options-for-sha1.diff so that it's
+    also possible to link against libnettle. Link (unconditionally)
+    statically against libnettle.a to avoid an extra udeb for a few bytes.
+  * Add nettle-dev to Build-Depends; and pass --with-sha1=libnettle for
+    the udeb build (and --with-sha1=libgcrypt for the main build).
+  * Add myself to Uploaders.
+  * Tweak builderstring to use the name of the person responsible for the
+    upload instead of an host-specific one (Closes: #574017).
+
+ -- Cyril Brulebois <kibi@debian.org>  Mon, 15 Mar 2010 22:19:01 +0100
+
+xorg-server (2:1.7.5-1ubuntu4) lucid; urgency=low
+
+  * 201_armel-drv-fallbacks.patch: use imx driver if available on
+    armel imx51 systems; the current test checks for mxc_gpu
+    devices listed in /sys/devices/platform and ensures that the
+    imx_drv module can be loaded; if both succeed, imx driver is
+    used instead of fbdev; note: the mxc_gpu device test should be
+    replaced with parsing output of /proc/fb once the mxc driver
+    provides reasonable content there.
+
+ -- Alexander Sack <asac@ubuntu.com>  Wed, 24 Mar 2010 13:03:41 +0100
+
+xorg-server (2:1.7.5-1ubuntu3) lucid; urgency=low
+
+  * Add 109_fix-swcursor-crash.patch: Avoid dereferencing null pointer
+    while reloading cursors during resume.
+    (LP: #371405)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Thu, 11 Mar 2010 17:16:12 -0800
+
+xorg-server (2:1.7.5-1ubuntu2) lucid; urgency=low
+
+  [ Bryce Harrington ]
+  [Timo Aaltonen]
+  * Add 107_dont_filter_input_subsys.diff so for instance serial wacom
+    devices are initialized by the udev backend (LP: #522318)
+
+  [Bryce Harrington]
+  * Add 108_reenable_record_ext.patch: Upstream patch to make the
+    record callback work with the new internal core/Xi events mechanism
+    instead of xEvents. With this fix, the record extension can be
+    re-enabled.
+    (LP: #315456)
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Tue, 02 Mar 2010 17:09:33 +0200
+
+xorg-server (2:1.7.5-1ubuntu1) lucid; urgency=low
+
+  [ Bryce Harrington ]
+  [Robert Hooker]
+  * Add 106_nouveau_autodetect.patch: makes nouveau the default driver
+    for supported cards when not explicitly named in xorg.conf.
+
+  [Timo Aaltonen]
+  * Merge from Debian unstable.
+  * Drop patch 101, included in Debian.
+
+  [Robert Collins]
+  * Add 199_xfvb-help-typo.patch to fix typo in help for xvfb (fdo #32990)
+  * Add 200_randr-null.patch to clarify a pointer initialization (fdo #26389)
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Fri, 19 Feb 2010 13:24:15 +0200
+
+xorg-server (2:1.7.5-1) unstable; urgency=low
+
+  [ Julien Cristau ]
+  * Remove myself from Uploaders
+
+  [ Brice Goglin ]
+  * New upstream release.
+    + Restore lastDeviceEventTime update in dixSaveScreens,
+      closes: #563816.
+    + Don't double-swap the RandR PropertyNotify event,
+      closes: #569036.
+    + Xi: reset the sli pointers after copying device classes,
+      closes: #566147.
+  * Bump Standards-Version to 3.8.4.
+
+ -- Brice Goglin <bgoglin@debian.org>  Tue, 16 Feb 2010 08:00:27 +0100
+
+xorg-server (2:1.7.4-2) unstable; urgency=low
+
+  [ Julien Cristau ]
+  * Rename the build directory to not include DEB_BUILD_GNU_TYPE for no
+    good reason.  Thanks, Colin Watson!
+
+  [ Brice Goglin ]
+  * Add 05_only_call_gamma_set_if_nonnull.diff to unbreak the nv driver,
+    closes: #564203.
+
+ -- Brice Goglin <bgoglin@debian.org>  Wed, 20 Jan 2010 23:51:26 +0100
+
+xorg-server (2:1.7.4-1) unstable; urgency=low
+
+  [ Timo Aaltonen ]
+  * New upstream release.
+
+  [ Julien Cristau ]
+  * Don't call config_init() until after InitInput() has initialized the event
+    queue, so that devices don't get enabled too early (closes: #564256,
+    #564324).
+
+ -- Julien Cristau <jcristau@debian.org>  Tue, 12 Jan 2010 10:49:22 +0000
+
+xorg-server (2:1.7.3.902-1ubuntu12) lucid; urgency=low
+
+  * Add 198_nohwaccess.patch: Needed for rootless X.  Adds a -nohwaccess
+    argument to make X not access the hardware ports directly.
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Fri, 05 Feb 2010 22:17:20 -0800
+
+xorg-server (2:1.7.3.902-1ubuntu11) lucid; urgency=low
+
+  * Add 196_xvfb-fbscreeninit-handling.patch and 197_xvfb-randr.patch:
+    Adds xrandr support to xvfb.  Thanks lifeless!
+    (LP: #516123)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Thu, 04 Feb 2010 10:56:12 -0800
+
+xorg-server (2:1.7.3.902-1ubuntu10) lucid; urgency=low
+
+  * 100_rethrow_signals.patch: Fix SigAbortServer to cleanly exit(1) on a
+    non-signal crash, as the original upstream code does. Not exiting leads to
+    continuing back into the code which threw the error, which eventually
+    leads to writing into the already closed log file and other operations
+    which cause segfaults.
+  * Re-enable 100_rethrow_signals.patch.  Hello apport.
+
+ -- Martin Pitt <martin.pitt@ubuntu.com>  Wed, 03 Feb 2010 17:29:53 -0800
+
+xorg-server (2:1.7.3.902-1ubuntu9) lucid; urgency=low
+
+  * Fully disable 100_rethrow_signals.patch as it seems to still cause
+    crashes.  Goodbye apport.
+    (LP: #506510)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Mon, 18 Jan 2010 23:31:08 -0800
+
+xorg-server (2:1.7.3.902-1ubuntu8) lucid; urgency=low
+
+  * Drop 160_log_timestamping.patch.  The bootup time objectives have been
+    met so this patch is no longer required.
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Sat, 16 Jan 2010 02:28:30 -0800
+
+xorg-server (2:1.7.3.902-1ubuntu7) lucid; urgency=low
+
+  * Update 100_rethrow_signals.patch: Don't log more error messages after
+    the log has been closed, else it causes a SIGSEGV (signal 11) crash
+    under several different conditions, including on even ordinary error
+    exits.
+    (LP: #506510, #507345, #506977, #504497, #507083)
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Fri, 15 Jan 2010 15:22:34 -0800
+
+xorg-server (2:1.7.3.902-1ubuntu6) lucid; urgency=low
+
+  * debian/xserver-xorg-core.preinst.in:
+    - Correct the name of the alternative that we need to remove.
+      Thanks to Steve Langasek for spotting the error.
+
+ -- Alberto Milone <alberto.milone@canonical.com>  Thu, 14 Jan 2010 12:50:19 +0100
+
+xorg-server (2:1.7.3.902-1ubuntu5) lucid; urgency=low
+
+  * debian/xserver-xorg-core.preinst.in:
+    - Make sure that the alternative which was previously provided by
+      xserver-xorg-core is removed.
+
+ -- Alberto Milone <alberto.milone@canonical.com>  Tue, 12 Jan 2010 11:37:49 +0100
+
+xorg-server (2:1.7.3.902-1ubuntu4) lucid; urgency=low
+
+  * debian/patches/191-Xorg-add-an-extra-module-path.patch:
+    - Patch from Mandriva to allow the use of an extra-modules-dir so that
+      the modules installed in this dir will override the ones in the
+      default directory.
+  * debian/rules:
+    - Remove alternatives stuff introduced in a previous upload.
+    - Configure with --with-extra-module-dir="/usr/lib/xorg/extra-modules".
+    - Do not install libglx.so and libdri.so in a different place any more.
+    - Do not install ld.so.conf file any more. Mesa will deal with this.
+  * debian/xserver-xorg-core.links:
+    - Do not create link to /usr/lib/xvmcconfig-standard/XvMCConfig.
+    - Remove links file.
+  * debian/xserver-xorg-core.postinst.in:
+    - Do not install an alternative any more. Mesa will deal with this.
+  * debian/xserver-xorg-core.prerm.in:
+    - Remove file.
+
+ -- Alberto Milone <alberto.milone@canonical.com>  Mon, 11 Jan 2010 14:48:35 +0100
+
+xorg-server (2:1.7.3.902-1ubuntu3) lucid; urgency=low
+
+  [ Julien Cristau ]
+  * Don't call config_init() until after InitInput() has initialized the event
+    queue, so that devices don't get enabled too early (closes: #564256,
+    #564324). (LP: #504254)
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Sat, 09 Jan 2010 19:34:30 +0200
+
+xorg-server (2:1.7.3.902-1ubuntu2) lucid; urgency=low
+
+  * debian/rules:
+    - Make sure that /usr/lib/standard-x11/ld.so.conf points to
+      the libraries provided by mesa.
+
+ -- Alberto Milone <alberto.milone@canonical.com>  Fri, 08 Jan 2010 18:55:52 +0100
+
+xorg-server (2:1.7.3.902-1ubuntu1) lucid; urgency=low
+
+  [ Timo Aaltonen ]
+  * Merge from Debian unstable.
+
+  [ Michael Vogt ]
+  * Add 101_nv-crash-fix.diff: Do not crash if gamma_set is NULL.
+    (LP: #494627)
+
+  [ Alberto Milone ]
+  * Install libglx.so and libdri.so in /usr/lib/standard-x11 as X
+    seems to prefer the file in /usr/lib/xorg/modules/extensions/standard/
+    over links in /usr/lib/xorg/modules/extensions/.
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Fri, 08 Jan 2010 14:21:15 +0200
+
+xorg-server (2:1.7.3.902-1) unstable; urgency=low
+
+  [ Timo Aaltonen ]
+  * Run udevadm trigger on postinst, and depend on udev [linux-any].
+
+  [ Julien Cristau ]
+  * Add xserver-common dependency on x11-xkb-utils for xkbcomp.
+  * Remove our copy of input_id, add Depends on new enough udev instead.
+  * New upstream release.
+  * Make xserver-common recommend xfonts-base, some clients don't work without
+    those.
+  * Upload to unstable.
+
+ -- Julien Cristau <jcristau@debian.org>  Wed, 06 Jan 2010 17:44:59 +0000
+
+xorg-server (2:1.7.3.901-1ubuntu5) lucid; urgency=low
+
+  * Use alternatives to make it easier to switch between X11 and 3rd
+    party modules.
+  * Add link to /usr/lib/xvmcconfig-standard/XvMCConfig and use it
+    for alternatives.
+
+ -- Alberto Milone <alberto.milone@canonical.com>  Mon, 04 Jan 2010 12:08:17 +0100
+
+xorg-server (2:1.7.3.901-1ubuntu4) lucid; urgency=low
+
+  * xvfb: Depend again on xauth. Depend on x11-xkb-utils. LP: #500102.
+
+ -- Matthias Klose <doko@ubuntu.com>  Thu, 24 Dec 2009 12:20:02 +0100
+
+xorg-server (2:1.7.3.901-1ubuntu3) lucid; urgency=low
+
+  * Update 100_rethrow_signals.patch to work with xserver 1.7
+
+ -- Bryce Harrington <bryce@ubuntu.com>  Fri, 18 Dec 2009 18:55:56 -0800
+
+xorg-server (2:1.7.3.901-1ubuntu2) lucid; urgency=low
+
+  [ Alberto Milone ]
+  * debian/patches/190_cache-xkbcomp_output_for_fast_start_up.patch:
+    Make the patch build again with xserver 1.7.
+
+  [ Timo Aaltonen ]
+  * Enable patch 190 now that it works.
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Tue, 15 Dec 2009 14:49:39 +0200
+
+xorg-server (2:1.7.3.901-1ubuntu1) lucid; urgency=low
+
+  * Merge from Debian experimental.
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Mon, 14 Dec 2009 11:34:33 +0200
+
+xorg-server (2:1.7.3.901-1) experimental; urgency=low
+
+  [ Julien Cristau ]
+  * Enable GLX 1.4 on DRI2 and swrast (from upstream, via F12).
+  * xserver-xorg-dev: add Depends on x11proto-kb-dev and libxkbfile-dev for
+    xkbsrv.h (closes: #559676).  Thanks, Ron!
+  * Update input_id to the version in udev 149.
+  * Update xserver-xorg-core bug script to run udevadm info instead of lshal.
+
+  [ Brice Goglin ]
+  * New upstream release.
+    + Refresh patches.
+
+ -- Brice Goglin <bgoglin@debian.org>  Sat, 12 Dec 2009 17:46:45 +0100
+
+xorg-server (2:1.7.2-2ubuntu2) lucid; urgency=low
+
+  * local/64-xorg-xkb.rules: Use "program" instead of "file" when
+    grepping the XKB settings from console-setup.
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Tue, 08 Dec 2009 13:17:04 +0200
+
+xorg-server (2:1.7.2-2ubuntu1) lucid; urgency=low
+
+  * Merge from Debian experimental. Remaining Ubuntu changes:
+    - debian/rules, debian/control:
+      + Disable SELinux, libaudit-dev is not in main yet (LP 406226).
+        Drop libaudit-dev from build-deps.
+    - debian/rules: Enable xcsecurity (LP 247537).
+    - local/xvfb-run*: Add correct docs about error codes (LP 328205)
+    - local/xvfb-run: Use "-extension Composite" to fix xvfb-run crashing.
+    - debian/patches:
+      + 121_only_switch_vt_when_active.diff:
+        Add a check to prevent the X server from changing the VT when killing
+        GDM from the console.
+      + 135_rethrow_signals.patch:
+        When aborting, re-raise signals for apport
+      + 157_check_null_modes.patch, 162_null_crtc_in_rotation.patch,
+        166_nullptr_xinerama_keyrepeat.patch, 167_nullptr_xisbread.patch
+        169_mipointer_nullptr_checks.patch,
+        172_cwgetbackingpicture_nullptr_check.patch:
+        Fix various segfaults in xserver by checking pointers for NULL
+        values before dereferencing them.
+      + 164_trap-aspect-ratios.patch:
+        Correct monitor EDIDs that have misreported aspect ratios.
+      + 165_man_xorg_conf_no_device_ident.patch
+        Correct man page
+      + 168_glibc_trace_to_stderr.patch:
+        Report abort traces to stderr instead of terminal
+      + 184_virtual_devices_autodetect.patch:
+        Use vesa for qemu device, which is not supported by cirrus
+      + 187_edid_quirk_hp_nc8430.patch:
+        Quirk for another LPL monitor (LP: #380009)
+      + 188_default_primary_to_first_busid.patch:
+        Pick the first device and carry on (LP 459512)
+      + 189_xserver_1.5.0_bg_none_root.patch:
+        Create a root window with no background.
+      + 190_cache-xkbcomp_output_for_fast_start_up.patch:
+        Cache keyboard settings.
+  * debian/control: Drop obsolete Conflicts/Breaks against -psb,
+    -synaptics and -evdev.
+  * debian/local/xserver-xephyr.1: Delete, upstream has Xephyr.1 now.
+  * Dropped patches:
+    - 101_fedora_xserver-1.3.0-document-fontpath-correctly.patch:
+      Upstream dropped it.
+    - 102_ubuntu_sharevts_load_cpu.patch: Upstream.
+    - 103_psb_auto.patch: Fallback to vesa done differently upstream.
+    - 110_fedora_no_move_damage.patch: Upstream dropped it.
+    - 140_quell_acpi_errmsgs.patch: Superseded.
+    - 153_make_dmx_compile.patch: Xdmx is fixed upstream.
+    - 156_exevents_copykeyclass_nullptrcheck.patch: No longer needed.
+      Appropriate checks are done on the pointers prior to CopyKeyClass
+      being called now.
+    - 158_raise_maxclients.patch: Breaks binary drivers.  We've had this
+      reverted for some time now, may as well just get rid of it entirely.
+    - 174_set_bg_pixmap_of_cow_to_none.patch: Upstream
+    - 177_animated_cursor_change_master.patch: Different fix upstream.
+    - 180_fedora_no_synaptics_mouse_synthesis.patch: Superseded.
+    - 181_fedora_log_proc_cmdline.patch: Upstream.
+    - 185_dix_badwindow.patch: Upstream.
+    - 186_autoconfig_geode.patch: Upstream.
+  * 189_xserver_1.5.0_bg_none_root.patch: Fetched a new version.
+  * 135_rethrow_signals.patch, 168_glibc_trace_to_stderr.patch:
+    Disabled until fixed to work with the current version.
+  * 160_log_timestamping.patch: Updated and re-enabled for boot speed
+    testing in Lucid.  This patch should be disabled by beta2.
+  * 169_mipointer_nullptr_checks.patch: Updated.  MIPOINTER() still
+    can return NULL under some circumstances, and its return values
+    are still being dereferenced without checking for NULL.
+  * 188_default_primary_to_first_busid.patch: Updated.  Still looks to be
+    relevant for certain multi-card systems.
+  * 190_cache-xkbcomp_output_for_fast_start_up.patch: Updated.
+  * control, local/64-xorg-xkb.rules: Don't depend on keyboard-configuration
+    until we have it.
+  * rules, local/64-xorg-xkb.rules: Use input_id from udev.
+
+ -- Timo Aaltonen <tjaalton@ubuntu.com>  Mon, 07 Dec 2009 15:30:18 +0200
+
+xorg-server (2:1.7.2-2) experimental; urgency=low
+
+  [ Julien Cristau ]
+  * debian/rules: upstream build system got fixed, no need to remove
+    configure-generated files.
+  * Steal input_id helper from udev, install it in /lib/xorg.  Thanks, Martin
+    Pitt!
+
+  [ Brice Goglin ]
+  * Cherry pick upstream commit to fix the ABI.
+
+ -- Brice Goglin <bgoglin@debian.org>  Mon, 30 Nov 2009 20:10:27 +0100
+
+xorg-server (2:1.7.2-1) experimental; urgency=low
+
+  * New upstream release
+    + Xorg sets umask to 022 (closes: #555308)
+  * Delete 09_debian_xserver_rtff.diff.  Was disabled since 1.3.99, and is not
+    necessary since the fall back to builtin fonts was added.
+  * Change the server's dependency on xserver-common to >= ${source:Version},
+    to allow installation of different versions of the various servers.
+  * Add build-dep on libglib2.0-dev, xkb-data and x11-xkb-utils for unit
+    tests, and run the tests unless nocheck is in DEB_BUILD_OPTIONS.
+  * Cherry-pick upstream commit to turn ModeDebug on during server startup,
+    replacing our Turn-on-ModeDebug-by-default.patch.
+  * Number our patches to make it easier to keep track of things.  Requested
+    by the Ubuntu folks.
+  * xvfb-run: retry a few times if Xvfb can't be started when using
+    --auto-servernum, to make concurrent invocations work (closes: #521075).
+    Thanks, Kees Cook!
+  * Use libudev instead of libhal for input hotplug on linux.
+  * Add udev rule to get keymap from /etc/default/keyboard.
+
+ -- Julien Cristau <jcristau@debian.org>  Sat, 28 Nov 2009 16:48:43 +0100
+
+xorg-server (2:1.7.0-1) experimental; urgency=low
+
+  * Add missing Conflicts on xserver-xorg-video-5 and xserver-xorg-input-4.
+  * Add xkb-data to xserver-common's Depends.  XKB is mandatory in 1.7.
+  * Make all servers depend on xserver-common (= ${source:Version}).
+  * New upstream release
+    + fixes Xvfb crashes (closes: #529927)
+    + fixes DGA init crash (closes: #548716)
+
+ -- Julien Cristau <jcristau@debian.org>  Sun, 04 Oct 2009 15:57:01 +0200
+
+xorg-server (2:1.6.99.903-1) experimental; urgency=low
+
+  * New upstream snapshot.
+    + doesn't fill log file with errors when acpid isn't running
+      (closes: #487904, #500583)
+    + adds autoconfig for geode variants (closes: #544988)
+    + fixes idle time computation (closes: #542064)
+    + Xnest uses the host's mouse acceleration and speed (closes: #325181)
+    + Xephyr now has a manpage (closes: #427121)
+    + Xdmx works again (closes: #541254)
+  * Update build deps
+  * Update patch stack:
+    - 20_hurd-i386.diff applied upstream
+    - fedora-bad-fbdev-thats-mine.patch applied upstream
+    - fedora-pci-primary.diff superseded upstream
+    - fedora-vboxvideo.diff applied upstream
+    - kfreebsd-ftbfs.diff applied upstream
+    - Add-libgcrypt-as-an-option-for-sha1.diff refreshed
+    - Turn-on-ModeDebug-by-default.patch refreshed
+  * Cleanup some libtool cruft in debian/rules clean.
+  * Bump serverminver, videoabiver and inputabiver.
+  * Bump debhelper compat level to 5:
+    - handle dh_strip behaviour change
+    - fix xserver-xorg-core.install