[arch-commits] CVS update of extra/x11/xorg-server (10 files)

Alexander Baldeck alexander at archlinux.org
Sun Dec 23 21:09:10 UTC 2007


    Date: Sunday, December 23, 2007 @ 16:09:10
  Author: alexander
    Path: /home/cvs-extra/extra/x11/xorg-server

   Added: 100_avoid_acpi_insanity.diff (1.1)
          101_fedora-apm-typedefs.patch (1.1)
          102_ubuntu_sharevts_load_cpu.patch (1.1)
          104_fedora_init_origins_fix.patch (1.1)
          120_fedora_xserver-xaa-evict-pixmaps.patch (1.1)
          142_fedora_xserver-1.3.0-no-pseudocolor-composite.patch (1.1)
          144_fedora_xserver-1.3.0-xnest-exposures.patch (1.1)
Modified: PKGBUILD (1.43 -> 1.44)
          xorg-redhat-die-ugly-pattern-die-die-die.patch (1.2 -> 1.3)
 Removed: xorg-server-1.4-mapping-changes-for-all.diff (1.1)

* readded ugly-pattern patch by public request
* more fixes importet from Ubuntu


---------------------------------------------------------+
 100_avoid_acpi_insanity.diff                            |   12 +
 101_fedora-apm-typedefs.patch                           |   40 +++
 102_ubuntu_sharevts_load_cpu.patch                      |   28 ++
 104_fedora_init_origins_fix.patch                       |   27 ++
 120_fedora_xserver-xaa-evict-pixmaps.patch              |   79 +++++++
 142_fedora_xserver-1.3.0-no-pseudocolor-composite.patch |   30 ++
 144_fedora_xserver-1.3.0-xnest-exposures.patch          |   20 +
 PKGBUILD                                                |   43 +++
 xorg-redhat-die-ugly-pattern-die-die-die.patch          |   16 +
 xorg-server-1.4-mapping-changes-for-all.diff            |  155 --------------
 10 files changed, 287 insertions(+), 163 deletions(-)


Index: extra/x11/xorg-server/100_avoid_acpi_insanity.diff
diff -u /dev/null extra/x11/xorg-server/100_avoid_acpi_insanity.diff:1.1
--- /dev/null	Sun Dec 23 16:09:11 2007
+++ extra/x11/xorg-server/100_avoid_acpi_insanity.diff	Sun Dec 23 16:09:10 2007
@@ -0,0 +1,12 @@
+diff -ur xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/linux/lnx_acpi.c xorg-server-1.3.0.0.dfsg.new/hw/xfree86/os-support/linux/lnx_acpi.c
+--- xorg-server-1.3.0.0.dfsg/hw/xfree86/os-support/linux/lnx_acpi.c	2006-11-16 18:01:25.000000000 +0000
++++ xorg-server-1.3.0.0.dfsg.new/hw/xfree86/os-support/linux/lnx_acpi.c	2007-08-26 16:14:34.000000000 +0100
+@@ -110,6 +110,8 @@
+ 		case ACPI_VIDEO_NOTIFY_PREV_OUTPUT:
+ 			break;
+ 		default:
++			/* If it's not a switch notification, send nothing */
++			return 0;
+ 			break;
+ 	}
+ 
Index: extra/x11/xorg-server/101_fedora-apm-typedefs.patch
diff -u /dev/null extra/x11/xorg-server/101_fedora-apm-typedefs.patch:1.1
--- /dev/null	Sun Dec 23 16:09:11 2007
+++ extra/x11/xorg-server/101_fedora-apm-typedefs.patch	Sun Dec 23 16:09:10 2007
@@ -0,0 +1,40 @@
+From 3fd969f08e4f550ac28fee3bbdbe55e9db872091 Mon Sep 17 00:00:00 2001
+From: Adam Jackson <ajax at redhat.com>
+Date: Mon, 3 Dec 2007 14:00:25 -0500
+Subject: [PATCH] apm_event_t workaround
+
+---
+ hw/kdrive/linux/linux.c               |    2 ++
+ hw/xfree86/os-support/linux/lnx_apm.c |    3 +++
+ 2 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/hw/kdrive/linux/linux.c b/hw/kdrive/linux/linux.c
+index 23cd8f5..2f9cb62 100644
+--- a/hw/kdrive/linux/linux.c
++++ b/hw/kdrive/linux/linux.c
+@@ -275,6 +275,8 @@ LinuxApmBlock (pointer blockData, OSTimePtr pTimeout, pointer pReadmask)
+ 
+ static Bool LinuxApmRunning;
+ 
++#define apm_event_t unsigned short
++
+ static void
+ LinuxApmWakeup (pointer blockData, int result, pointer pReadmask)
+ {
+diff --git a/hw/xfree86/os-support/linux/lnx_apm.c b/hw/xfree86/os-support/linux/lnx_apm.c
+index 16ac80d..6bcae47 100644
+--- a/hw/xfree86/os-support/linux/lnx_apm.c
++++ b/hw/xfree86/os-support/linux/lnx_apm.c
+@@ -39,6 +39,9 @@ static PMClose lnxAPMOpen(void);
+ static void lnxCloseAPM(void);
+ static pointer APMihPtr = NULL;
+ 
++/* XXX this is wrong, do not ever commit me upstream */
++#define apm_event_t unsigned short
++
+ static struct {
+     apm_event_t apmLinux;
+     pmEvent xf86;
+-- 
+1.5.2.4
+
Index: extra/x11/xorg-server/102_ubuntu_sharevts_load_cpu.patch
diff -u /dev/null extra/x11/xorg-server/102_ubuntu_sharevts_load_cpu.patch:1.1
--- /dev/null	Sun Dec 23 16:09:11 2007
+++ extra/x11/xorg-server/102_ubuntu_sharevts_load_cpu.patch	Sun Dec 23 16:09:10 2007
@@ -0,0 +1,28 @@
+Index: a/hw/xfree86/os-support/linux/lnx_init.c
+===================================================================
+--- a/hw/xfree86/os-support/linux/lnx_init.c	2007-01-23 07:39:16.000000000 +0200
++++ b/xfree86/os-support/linux/lnx_init.c	2007-02-08 15:44:03.000000000 +0200
+@@ -284,9 +284,7 @@
+ 	        FatalError("Unable to set screen info\n");
+ 	    close(fbfd);
+ #endif
+-        } else { /* ShareVTs */
+-            close(xf86Info.consoleFd);
+-        }
++	}
+ 	signal(SIGUSR2, xf86ReloadInputDevs);
+     } else { 	/* serverGeneration != 1 */
+         if (!ShareVTs && VTSwitch)
+@@ -315,7 +313,11 @@
+     int vtno = -1;
+ #endif
+ 
+-    if (ShareVTs) return;
++    if (ShareVTs)
++    {
++	    close(xf86Info.consoleFd);
++	    return;
++    }
+ 
+ #if defined(DO_OS_FONTRESTORE)
+     if (ioctl(xf86Info.consoleFd, VT_GETSTATE, &vts) < 0)
Index: extra/x11/xorg-server/104_fedora_init_origins_fix.patch
diff -u /dev/null extra/x11/xorg-server/104_fedora_init_origins_fix.patch:1.1
--- /dev/null	Sun Dec 23 16:09:11 2007
+++ extra/x11/xorg-server/104_fedora_init_origins_fix.patch	Sun Dec 23 16:09:10 2007
@@ -0,0 +1,27 @@
+Patch by krh at redhat.com:
+
+      In a multihead setup, if only the first screen can be
+      initialized, but the second screen is mentioned first in the
+      ServerLayout section, the xf86InitOrigins() function will crash
+      because the screen referred to in the e.g. "RightOf" part is
+      non-existent.
+
+Index: a/hw/xfree86/common/xf86Cursor.c
+===================================================================
+--- a/hw/xfree86/common/xf86Cursor.c.orig	2007-01-23 07:39:15.000000000 +0200
++++ a/hw/xfree86/common/xf86Cursor.c	2007-02-08 15:45:02.000000000 +0200
+@@ -569,6 +569,14 @@
+ 
+ 	    screen = &xf86ConfigLayout.screens[i];
+ 
++	    if (screen->refscreen != NULL &&
++		screen->refscreen->screennum >= xf86NumScreens) {
++		screensLeft &= ~(1 << i);
++	        xf86Msg(X_WARNING, "Not including screen \"%s\" in origins calculation.\n",
++			screen->screen->id);
++	        continue;
++	    }	      
++
+ 	    switch(screen->where) {
+ 	    case PosObsolete:
+ 		OldStyleConfig = TRUE;
Index: extra/x11/xorg-server/120_fedora_xserver-xaa-evict-pixmaps.patch
diff -u /dev/null extra/x11/xorg-server/120_fedora_xserver-xaa-evict-pixmaps.patch:1.1
--- /dev/null	Sun Dec 23 16:09:11 2007
+++ extra/x11/xorg-server/120_fedora_xserver-xaa-evict-pixmaps.patch	Sun Dec 23 16:09:10 2007
@@ -0,0 +1,79 @@
+From fb3008787193b79909fe922577794f7d4a656922 Mon Sep 17 00:00:00 2001
+From: Adam Jackson <ajax at redhat.com>
+Date: Thu, 1 Nov 2007 15:18:31 -0400
+Subject: [PATCH] Add pixmap eviction call for XAA.
+
+DRI drivers without zero-copy EXT_texture_from_pixmap need to copy the
+texture image out of video memory to bind it.  Ick.  Add a hack to
+evict XAA pixmaps and disable the pixmap cache when the first texture
+is bound.
+---
+ GL/glx/glxdri.c          |   16 ++++++++++++++++
+ hw/xfree86/xaa/xaaInit.c |   24 ++++++++++++++++++++++++
+ 2 files changed, 40 insertions(+), 0 deletions(-)
+
+diff --git a/GL/glx/glxdri.c b/GL/glx/glxdri.c
+index c0da07b..6c4faed 100644
+--- a/GL/glx/glxdri.c
++++ b/GL/glx/glxdri.c
+@@ -360,6 +360,22 @@ __glXDRIbindTexImage(__GLXcontext *baseContext,
+ 
+     pixmap = (PixmapPtr) glxPixmap->pDraw;
+ 
++    if (!screen->texOffsetStart) {
++         /* When the GLX_EXT_texture_from_pixmap is used, as it's
++          * implemented here, we want to pull pixmap out of video memory
++          * and into host memory. */
++         extern void XAAEvictPixmaps(void);
++         static int evictedPixmaps = 0;
++
++         if (!evictedPixmaps) {
++             __glXDRIenterServer(GL_FALSE);
++                 if (dlsym(RTLD_DEFAULT, "XAAEvictPixmaps"))
++                      XAAEvictPixmaps();
++             __glXDRIleaveServer(GL_FALSE);
++         evictedPixmaps = TRUE;
++         }
++    }
++
+     if (screen->texOffsetStart && screen->driScreen.setTexOffset) {
+         __GLXpixmap **texOffsetOverride = screen->texOffsetOverride;
+         int i, firstEmpty = 16, texname;
+diff --git a/hw/xfree86/xaa/xaaInit.c b/hw/xfree86/xaa/xaaInit.c
+index 4222425..602b525 100644
+--- a/hw/xfree86/xaa/xaaInit.c
++++ b/hw/xfree86/xaa/xaaInit.c
+@@ -88,6 +88,30 @@ XAADestroyInfoRec(XAAInfoRecPtr infoRec)
+     xfree(infoRec);
+ }
+ 
++void
++XAAEvictPixmaps(void)
++{
++    XAAScreenPtr pScreenPriv;
++    XAAInfoRecPtr infoRec;
++    ScreenPtr pScreen;
++    int i;
++
++    xf86MsgVerb(X_INFO, 3, "XAA: Evicting pixmaps\n");
++
++    for (i = 0; i < screenInfo.numScreens; i++) {
++	pScreen = screenInfo.screens[i];
++	infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
++
++	pScreenPriv = pScreen->devPrivates[XAAScreenIndex].ptr;
++	infoRec = pScreenPriv->AccelInfoRec;
++
++	infoRec->offscreenDepths = 0;
++	infoRec->Flags &= ~OFFSCREEN_PIXMAPS;
++
++	XAAMoveOutOffscreenPixmaps(pScreen);
++	XAAInvalidatePixmapCache(pScreen);
++    }
++}
+ 
+ Bool 
+ XAAInit(ScreenPtr pScreen, XAAInfoRecPtr infoRec)
+-- 
+1.5.3.4
+
Index: extra/x11/xorg-server/142_fedora_xserver-1.3.0-no-pseudocolor-composite.patch
diff -u /dev/null extra/x11/xorg-server/142_fedora_xserver-1.3.0-no-pseudocolor-composite.patch:1.1
--- /dev/null	Sun Dec 23 16:09:11 2007
+++ extra/x11/xorg-server/142_fedora_xserver-1.3.0-no-pseudocolor-composite.patch	Sun Dec 23 16:09:10 2007
@@ -0,0 +1,30 @@
+diff --git a/composite/compext.c b/composite/compext.c
+index 4c25cc7..af05b4a 100644
+--- a/composite/compext.c
++++ b/composite/compext.c
+@@ -678,6 +678,25 @@ CompositeExtensionInit (void)
+     ExtensionEntry  *extEntry;
+     int		    s;
+ 
++    for (s = 0; s < screenInfo.numScreens; s++) {
++	ScreenPtr pScreen = screenInfo.screens[s];
++	VisualPtr vis;
++
++	/* Composite on 8bpp pseudocolor root windows appears to fail, so
++	 * just disable it on anything pseudocolor for safety.
++	 */
++	for (vis = pScreen->visuals; vis->vid != pScreen->rootVisual; vis++)
++	    ;
++	if ((vis->class | DynamicClass) == PseudoColor)
++	    return;
++
++	/* Ensure that Render is initialized, which is required for automatic
++	 * compositing.
++	 */
++	if (GetPictureScreenIfSet(pScreen) == NULL)
++	    return;
++    }
++
+     CompositeClientWindowType = CreateNewResourceType (FreeCompositeClientWindow);
+     if (!CompositeClientWindowType)
+ 	return;
Index: extra/x11/xorg-server/144_fedora_xserver-1.3.0-xnest-exposures.patch
diff -u /dev/null extra/x11/xorg-server/144_fedora_xserver-1.3.0-xnest-exposures.patch:1.1
--- /dev/null	Sun Dec 23 16:09:11 2007
+++ extra/x11/xorg-server/144_fedora_xserver-1.3.0-xnest-exposures.patch	Sun Dec 23 16:09:10 2007
@@ -0,0 +1,20 @@
+--- xorg-server-1.2.99.905/hw/xnest/Events.c.jx	2007-01-31 19:55:51.000000000 -0500
++++ xorg-server-1.2.99.905/hw/xnest/Events.c	2007-04-09 18:42:51.000000000 -0400
+@@ -85,7 +85,7 @@
+   while (XCheckIfEvent(xnestDisplay, &X, xnestExposurePredicate, NULL)) {
+     pWin = xnestWindowPtr(X.xexpose.window);
+     
+-    if (pWin) {
++    if (pWin && X.xexpose.width && X.xexpose.height) {
+       Box.x1 = pWin->drawable.x + wBorderWidth(pWin) + X.xexpose.x;
+       Box.y1 = pWin->drawable.y + wBorderWidth(pWin) + X.xexpose.y;
+       Box.x2 = Box.x1 + X.xexpose.width;
+@@ -93,7 +93,7 @@
+       
+       REGION_INIT(pWin->drawable.pScreen, &Rgn, &Box, 1);
+       
+-      miWindowExposures(pWin, &Rgn, NullRegion); 
++      miSendExposures(pWin, &Rgn, Box.x2, Box.y2);
+     }
+   }
+ }
Index: extra/x11/xorg-server/PKGBUILD
diff -u extra/x11/xorg-server/PKGBUILD:1.43 extra/x11/xorg-server/PKGBUILD:1.44
--- extra/x11/xorg-server/PKGBUILD:1.43	Sat Dec 22 12:51:31 2007
+++ extra/x11/xorg-server/PKGBUILD	Sun Dec 23 16:09:10 2007
@@ -1,22 +1,22 @@
-# $Id: PKGBUILD,v 1.43 2007/12/22 17:51:31 alexander Exp $
+# $Id: PKGBUILD,v 1.44 2007/12/23 21:09:10 alexander Exp $
 # Maintainer: Alexander Baldeck <kth5 at archlinux.org>
 # Contributor: Jan de Groot <jgc at archlinux.org>
 pkgname=xorg-server
 pkgver=1.4.0.90
-pkgrel=2
+pkgrel=3
 _mesaver=7.0.1
 pkgdesc="X.Org X servers"
 arch=('i686' 'x86_64')
 url="http://xorg.freedesktop.org"
-depends=('gcc' 'libxkbui' 'ncurses' 'libxi' 'libxxf86misc' 'libxfont'
+depends=('gcc-libs' 'libxkbui' 'ncurses' 'libxi' 'libxxf86misc' 'libxfont'
          'libxrender' 'libdmx' 'libxaw' 'libxxf86vm' 'xcursor-themes'
 	 'xkeyboard-config' 'xorg-server-utils' 'xorg-utils' 'libdrm>=2.3.0'
-	 'libxfixes' 'xorg-fonts-misc' 'pixman>=0.9.6' 'xbitmaps')
+	 'libxfixes' 'xorg-fonts-misc' 'pixman>=0.9.6' 'xbitmaps' 'libgl')
 makedepends=('pkgconfig' 'xf86driproto' 'xcmiscproto' 'xtrans' 'bigreqsproto'
              'xf86bigfontproto' 'resourceproto' 'evieext' 'damageproto>=1.1.0'
 	     'compositeproto>=0.4' 'scrnsaverproto' 'libxres' 'xorg-util-macros'
 	     'randrproto' 'glproto>=1.4.9' 'renderproto>=0.9.3' 'autoconf' 'automake'
-	     'libtool' 'bison' 'flex')
+	     'libtool' 'bison' 'flex' 'gcc')
 options=('!libtool')
 provides=('x-server')
 groups=('xorg')
@@ -24,6 +24,7 @@
 source=(${url}/releases/individual/xserver/${pkgname}-${pkgver}.tar.bz2
 	http://downloads.sourceforge.net/mesa3d/MesaLib-${_mesaver}.tar.bz2
 	xorg-server-1.2.0-defaultdpi.patch
+	xorg-redhat-die-ugly-pattern-die-die-die.patch
 	001_ubuntu_add_extra_modelines_from_xorg.patch
 	01-kernel-headers-fix.patch
 	02_libvgahw_gcc4_volatile_fix.diff
@@ -44,7 +45,15 @@
 	91_ttf2pt1_updates
 	92_xprint-security-holes-fix.patch
 	93_spooltodir_check_file_exists
-	93_xprint_fonts_fix)
+	93_xprint_fonts_fix
+	144_fedora_xserver-1.3.0-xnest-exposures.patch
+	101_fedora-apm-typedefs.patch
+	142_fedora_xserver-1.3.0-no-pseudocolor-composite.patch
+	100_avoid_acpi_insanity.diff
+	120_fedora_xserver-xaa-evict-pixmaps.patch
+	121_only_switch_vt_when_active.diff
+	102_ubuntu_sharevts_load_cpu.patch
+	104_fedora_init_origins_fix.patch)
 
 build() {
   cd ${startdir}/src/${pkgname}-${pkgver}
@@ -71,9 +80,18 @@
   patch -Np1 -i ${startdir}/src/92_xprint-security-holes-fix.patch || return 1
   patch -Np1 -i ${startdir}/src/93_spooltodir_check_file_exists || return 1
   patch -Np1 -i ${startdir}/src/93_xprint_fonts_fix || return 1
+  patch -Np1 -i ${startdir}/src/144_fedora_xserver-1.3.0-xnest-exposures.patch || return 1
+  patch -Np1 -i ${startdir}/src/101_fedora-apm-typedefs.patch || return 1
+  patch -Np1 -i ${startdir}/src/142_fedora_xserver-1.3.0-no-pseudocolor-composite.patch || return 1
+  patch -Np1 -i ${startdir}/src/100_avoid_acpi_insanity.diff || return 1
+  patch -Np1 -i ${startdir}/src/120_fedora_xserver-xaa-evict-pixmaps.patch || return 1
+  patch -Np1 -i ${startdir}/src/121_only_switch_vt_when_active.diff || return 1
+  patch -Np1 -i ${startdir}/src/102_ubuntu_sharevts_load_cpu.patch || return 1
+  patch -Np1 -i ${startdir}/src/104_fedora_init_origins_fix.patch || return 1
 
   # Own patches
   patch -Np1 -i ${startdir}/src/xorg-server-1.2.0-defaultdpi.patch || return 1
+  patch -Np3 -i ${startdir}/src/xorg-redhat-die-ugly-pattern-die-die-die.patch || return 1
 
   #cd GL/
   #./symlink-mesa.sh ${startdir}/src/Mesa-${_mesaver}/ . || return 1
@@ -128,6 +146,7 @@
 md5sums=('bb16e969850dbb5d3805cb88d35656d0'
          'c056abd763e899114bf745c9eedbf9ad'
          'e162134c68230f7b168430fe73b4881a'
+         '1a336eb22e27cbf443ec5a2ecddfa93c'
          '117ca8113ad0977a8f769734e8599a10'
          '7bedf609cd7717f58f991b6a9380b2a5'
          '12a725071633d8140c22237efd954787'
@@ -144,8 +163,16 @@
          '74e675c11d94d0bddcec7c74c220bf71'
          '13a69065ee4b99e6ba9eb9b4fd121a1f'
          '63a819f88186cead0cff54296c0d4050'
-         'c281e6d4454d22ee22381a9404f9f580'
+         'fb913bdce59b8361fad2aae505e1516d'
          '2110d7a26a7674ebcffbf7d6887a0167'
          '697454ba6f2c5f77a100693b72440079'
          'acbca762bbb532f2577bd57b29660e11'
-         '430f5fae7a12e5052a5b03990c2b1fb7')
+         '430f5fae7a12e5052a5b03990c2b1fb7'
+         '37755b716f0be03e4a243d907899b746'
+         '793548b46eaa5fca3acd810c9d58167d'
+         '586cf862905a9b571a5c6fae9b538650'
+         'aa089de9ab6cb2bd54ea102f3934ccc6'
+         '151d3233c367b80253c0bbf1fe8d41c6'
+         'd7a5dd4cadf1ed70adc7e12fdf3133d2'
+         '128f9245b2787479fcbf082f9e148aa8'
+         '1dc001817b7a3951a63876415ad1eb91')
Index: extra/x11/xorg-server/xorg-redhat-die-ugly-pattern-die-die-die.patch
diff -u /dev/null extra/x11/xorg-server/xorg-redhat-die-ugly-pattern-die-die-die.patch:1.3
--- /dev/null	Sun Dec 23 16:09:11 2007
+++ extra/x11/xorg-server/xorg-redhat-die-ugly-pattern-die-die-die.patch	Sun Dec 23 16:09:10 2007
@@ -0,0 +1,16 @@
+Remove the default root window grey stipple pattern, replacing it with
+blackness.
+
+--- xc/programs/Xserver/dix/window.c.die-ugly-pattern-die-die-die	Tue Feb 12 16:33:04 2002
++++ xc/programs/Xserver/dix/window.c	Tue Feb 12 16:45:32 2002
+@@ -119,8 +119,8 @@
+  *
+  ******/
+ 
+-static unsigned char _back_lsb[4] = {0x88, 0x22, 0x44, 0x11};
+-static unsigned char _back_msb[4] = {0x11, 0x44, 0x22, 0x88};
++static unsigned char _back_lsb[4] = {0x00, 0x00, 0x00, 0x00};
++static unsigned char _back_msb[4] = {0x00, 0x00, 0x00, 0x00};
+ 
+ int screenIsSaved = SCREEN_SAVER_OFF;
+ 
Index: extra/x11/xorg-server/xorg-server-1.4-mapping-changes-for-all.diff
diff -u extra/x11/xorg-server/xorg-server-1.4-mapping-changes-for-all.diff:1.1 extra/x11/xorg-server/xorg-server-1.4-mapping-changes-for-all.diff:removed
--- extra/x11/xorg-server/xorg-server-1.4-mapping-changes-for-all.diff:1.1	Fri Nov 16 08:12:10 2007
+++ extra/x11/xorg-server/xorg-server-1.4-mapping-changes-for-all.diff	Sun Dec 23 16:09:11 2007
@@ -1,155 +0,0 @@
-commit 27ad5d74c20f01516a1bff73be283f8982fcf0fe
-Author: Daniel Stone <daniel at fooishbar.org>
-Date:   Sun Sep 23 17:17:03 2007 +0300
-
-    Input: Generate XKB mapping changes for all core-sending devices (bug #12523)
-    
-    When we change the mapping on a core device, make sure we propagate this
-    through to XKB for all extended devices as well.
-
-diff --git a/Xi/exevents.c b/Xi/exevents.c
-index fe297ab..377311e 100644
---- a/Xi/exevents.c
-+++ b/Xi/exevents.c
-@@ -73,6 +73,10 @@ SOFTWARE.
- #include "dixgrabs.h"	/* CreateGrab() */
- #include "scrnintstr.h"
- 
-+#ifdef XKB
-+#include "xkbsrv.h"
-+#endif
-+
- #define WID(w) ((w) ? ((w)->drawable.id) : 0)
- #define AllModifiersMask ( \
- 	ShiftMask | LockMask | ControlMask | Mod1Mask | Mod2Mask | \
-@@ -942,7 +946,7 @@ SetModifierMapping(ClientPtr client, DeviceIntPtr dev, int len, int rlen,
- }
- 
- void
--SendDeviceMappingNotify(CARD8 request,
-+SendDeviceMappingNotify(ClientPtr client, CARD8 request,
- 			KeyCode firstKeyCode, CARD8 count, DeviceIntPtr dev)
- {
-     xEvent event;
-@@ -957,6 +961,11 @@ SendDeviceMappingNotify(CARD8 request,
- 	ev->count = count;
-     }
- 
-+#ifdef XKB
-+    if (request == MappingKeyboard || request == MappingModifier)
-+        XkbApplyMappingChange(dev, request, firstKeyCode, count, client);
-+#endif
-+
-     SendEventToAllWindows(dev, DeviceMappingNotifyMask, (xEvent *) ev, 1);
- }
- 
-@@ -992,7 +1001,7 @@ ChangeKeyMapping(ClientPtr client,
-     keysyms.map = map;
-     if (!SetKeySymsMap(&k->curKeySyms, &keysyms))
- 	return BadAlloc;
--    SendDeviceMappingNotify(MappingKeyboard, firstKeyCode, keyCodes, dev);
-+    SendDeviceMappingNotify(client, MappingKeyboard, firstKeyCode, keyCodes, dev);
-     return client->noClientException;
- }
- 
-diff --git a/Xi/setbmap.c b/Xi/setbmap.c
-index bdfa513..1f5970d 100644
---- a/Xi/setbmap.c
-+++ b/Xi/setbmap.c
-@@ -134,7 +134,7 @@ ProcXSetDeviceButtonMapping(ClientPtr client)
-     }
- 
-     if (ret != MappingBusy)
--	SendDeviceMappingNotify(MappingPointer, 0, 0, dev);
-+	SendDeviceMappingNotify(client, MappingPointer, 0, 0, dev);
-     return Success;
- }
- 
-diff --git a/Xi/setmmap.c b/Xi/setmmap.c
-index 0078499..e30213e 100644
---- a/Xi/setmmap.c
-+++ b/Xi/setmmap.c
-@@ -122,7 +122,7 @@ ProcXSetDeviceModifierMapping(ClientPtr client)
-     if (ret == MappingSuccess || ret == MappingBusy || ret == MappingFailed) {
- 	rep.success = ret;
- 	if (ret == MappingSuccess)
--	    SendDeviceMappingNotify(MappingModifier, 0, 0, dev);
-+	    SendDeviceMappingNotify(client, MappingModifier, 0, 0, dev);
- 	WriteReplyToClient(client, sizeof(xSetDeviceModifierMappingReply),
- 			   &rep);
-     } else {
-diff --git a/dix/devices.c b/dix/devices.c
-index 9f3c576..e05444e 100644
---- a/dix/devices.c
-+++ b/dix/devices.c
-@@ -1208,10 +1208,9 @@ SendMappingNotify(unsigned request, unsigned firstKeyCode, unsigned count,
-     }
- #ifdef XKB
-     if (!noXkbExtension &&
--	((request == MappingKeyboard) || (request == MappingModifier))) {
--	XkbApplyMappingChange(inputInfo.keyboard,request,firstKeyCode,count,
--									client);
--    }
-+	((request == MappingKeyboard) || (request == MappingModifier)))
-+        XkbApplyMappingChange(inputInfo.keyboard, request, firstKeyCode, count,
-+                              client);
- #endif
- 
-    /* 0 is the server client */
-@@ -1359,6 +1358,7 @@ int
- ProcSetModifierMapping(ClientPtr client)
- {
-     xSetModifierMappingReply rep;
-+    DeviceIntPtr dev;
-     REQUEST(xSetModifierMappingReq);
-     
-     REQUEST_AT_LEAST_SIZE(xSetModifierMappingReq);
-@@ -1374,8 +1374,10 @@ ProcSetModifierMapping(ClientPtr client)
-     rep.success = DoSetModifierMapping(client, (KeyCode *)&stuff[1],
-                                        stuff->numKeyPerModifier);
- 
--    /* FIXME: Send mapping notifies for all the extended devices as well. */
-     SendMappingNotify(MappingModifier, 0, 0, client);
-+    for (dev = inputInfo.devices; dev; dev = dev->next)
-+        if (dev->key && dev->coreEvents)
-+            SendDeviceMappingNotify(client, MappingModifier, 0, 0, dev);
-     WriteReplyToClient(client, sizeof(xSetModifierMappingReply), &rep);
-     return client->noClientException;
- }
-@@ -1438,16 +1440,19 @@ ProcChangeKeyboardMapping(ClientPtr client)
-     keysyms.maxKeyCode = stuff->firstKeyCode + stuff->keyCodes - 1;
-     keysyms.mapWidth = stuff->keySymsPerKeyCode;
-     keysyms.map = (KeySym *)&stuff[1];
--    for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
--        if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key) {
-+    for (pDev = inputInfo.devices; pDev; pDev = pDev->next)
-+        if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key)
-             if (!SetKeySymsMap(&pDev->key->curKeySyms, &keysyms))
-                 return BadAlloc;
--        }
--    }
- 
--    /* FIXME: Send mapping notifies for all the extended devices as well. */
-     SendMappingNotify(MappingKeyboard, stuff->firstKeyCode, stuff->keyCodes,
-                       client);
-+    for (pDev = inputInfo.devices; pDev; pDev = pDev->next)
-+        if (pDev->key && pDev->coreEvents)
-+            SendDeviceMappingNotify(client, MappingKeyboard,
-+                                    stuff->firstKeyCode, stuff->keyCodes,
-+                                    pDev);
-+
-     return client->noClientException;
- }
- 
-diff --git a/include/exevents.h b/include/exevents.h
-index 69d4abc..cf7d71a 100644
---- a/include/exevents.h
-+++ b/include/exevents.h
-@@ -129,6 +129,7 @@ extern int SetModifierMapping(
- 	KeyClassPtr *          /* k */);
- 
- extern void SendDeviceMappingNotify(
-+        ClientPtr              /* client, */,
- 	CARD8                  /* request, */,
- 	KeyCode                /* firstKeyCode */,
- 	CARD8                  /* count */,




More information about the arch-commits mailing list