ChangeLog                                                                    | 
 273 +
 Xi/chgdctl.c                                                                 | 
   2 
 Xi/exevents.c                                                                | 
  11 
 config/hal.c                                                                 | 
  62 
 configure.ac                                                                 | 
   6 
 debian/changelog                                                             | 
  58 
 debian/control                                                               | 
   2 
 debian/patches/130_fedora_fix_procxkbsetxyz_to_work_on_all.patch             | 
2245 ----------
 debian/patches/131_remove_open-coded_strcasestr.patch                        | 
  43 
 debian/patches/132_add_parsing_for_xkb.options.patch                         | 
  68 
 debian/patches/133_support_strlist_for_xkboptions.patch                      | 
  88 
 debian/patches/134_protect_against_out_of_bounds.patch                       | 
  45 
 debian/patches/50_Make-RandRQueryVersion-return-1.1-for-swapped-client.patch | 
  31 
 debian/patches/series                                                        | 
   6 
 dix/Makefile.am                                                              | 
   3 
 dix/strcasecmp.c                                                             | 
  74 
 dix/strcasestr.c                                                             | 
  64 
 exa/exa.c                                                                    | 
   2 
 glx/glxcmds.c                                                                | 
   8 
 glx/glxdricommon.c                                                           | 
  12 
 glx/glxscreens.h                                                             | 
   7 
 hw/xfree86/common/xf86Config.c                                               | 
  69 
 include/dix-config.h.in                                                      | 
  12 
 include/dix.h                                                                | 
  12 
 xkb/xkb.c                                                                    | 
1862 +++++---
 25 files changed, 1792 insertions(+), 3273 deletions(-)

New commits:
commit e36a8b958df58e1882043b4755d6c9773bbe9215
Author: Timo Aaltonen <[EMAIL PROTECTED]>
Date:   Thu Aug 28 12:42:32 2008 +0300

    Prepare the changelog for upload.

diff --git a/debian/changelog b/debian/changelog
index 92358ee..3147094 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-xorg-server (2:1.4.99.906-2ubuntu1) UNRELEASED; urgency=low
+xorg-server (2:1.4.99.906-2ubuntu1) intrepid; urgency=low
 
   * Merge with Debian experimental.
   * Dropped patches, upstream:
@@ -10,7 +10,7 @@ xorg-server (2:1.4.99.906-2ubuntu1) UNRELEASED; urgency=low
   * control: Fix build-dep on inputproto to >= 1.4.3-2ubuntu2 for
     DeviceControlChanged.
 
- -- Timo Aaltonen <[EMAIL PROTECTED]>  Thu, 28 Aug 2008 12:29:42 +0300
+ -- Timo Aaltonen <[EMAIL PROTECTED]>  Thu, 28 Aug 2008 12:39:33 +0300
 
 xorg-server (2:1.4.99.906-2) experimental; urgency=low
 

commit f1e967f7d8d7e797736913e65f3623a7e4742bd2
Author: Timo Aaltonen <[EMAIL PROTECTED]>
Date:   Thu Aug 28 12:39:07 2008 +0300

    Fix build-dep on inputproto to >= 1.4.3-2ubuntu2 for DeviceControlChanged.

diff --git a/debian/changelog b/debian/changelog
index ba837d1..92358ee 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -7,8 +7,10 @@ xorg-server (2:1.4.99.906-2ubuntu1) UNRELEASED; urgency=low
     132_add_parsing_for_xkb.options.patch
     133_support_strlist_for_xkboptions.patch
     134_protect_against_out_of_bounds.patch
+  * control: Fix build-dep on inputproto to >= 1.4.3-2ubuntu2 for
+    DeviceControlChanged.
 
- -- Timo Aaltonen <[EMAIL PROTECTED]>  Thu, 28 Aug 2008 09:47:23 +0300
+ -- Timo Aaltonen <[EMAIL PROTECTED]>  Thu, 28 Aug 2008 12:29:42 +0300
 
 xorg-server (2:1.4.99.906-2) experimental; urgency=low
 
diff --git a/debian/control b/debian/control
index 4239439..1b621a7 100644
--- a/debian/control
+++ b/debian/control
@@ -19,7 +19,7 @@ Build-Depends: debhelper (>= 4.0.0), lsb-release, pkg-config, 
bison, flex,
  x11proto-xcmisc-dev, x11proto-xext-dev (>= 6.9.99.0),
  x11proto-xf86bigfont-dev, x11proto-xf86dga-dev, x11proto-xf86misc-dev,
  x11proto-xf86vidmode-dev, xtrans-dev, libxau-dev (>= 1:0.99.1),
- x11proto-input-dev (>= 1.4.4-1ubuntu1),
+ x11proto-input-dev (>= 1.4.3-2ubuntu2),
  libxdmcp-dev (>= 1:0.99.1), libxfont-dev, libfontenc-dev,
  libxkbfile-dev (>= 1:0.99.1), libpixman-1-dev (>= 0.9.5),
  libpciaccess-dev, libssl-dev,

commit dc013d8890b41ab35c8980b4de4b3afc178de091
Author: Timo Aaltonen <[EMAIL PROTECTED]>
Date:   Thu Aug 28 10:06:31 2008 +0300

    Drop obsolete patches
    
        130_fedora_fix_procxkbsetxyz_to_work_on_all.patch
        131_remove_open-coded_strcasestr.patch
        132_add_parsing_for_xkb.options.patch
        133_support_strlist_for_xkboptions.patch
        134_protect_against_out_of_bounds.patch

diff --git a/debian/changelog b/debian/changelog
index 851067c..ba837d1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,15 @@
+xorg-server (2:1.4.99.906-2ubuntu1) UNRELEASED; urgency=low
+
+  * Merge with Debian experimental.
+  * Dropped patches, upstream:
+    130_fedora_fix_procxkbsetxyz_to_work_on_all.patch
+    131_remove_open-coded_strcasestr.patch
+    132_add_parsing_for_xkb.options.patch
+    133_support_strlist_for_xkboptions.patch
+    134_protect_against_out_of_bounds.patch
+
+ -- Timo Aaltonen <[EMAIL PROTECTED]>  Thu, 28 Aug 2008 09:47:23 +0300
+
 xorg-server (2:1.4.99.906-2) experimental; urgency=low
 
   * Pull from server-1.5-branch as of Aug 27th
diff --git a/debian/patches/130_fedora_fix_procxkbsetxyz_to_work_on_all.patch 
b/debian/patches/130_fedora_fix_procxkbsetxyz_to_work_on_all.patch
deleted file mode 100644
index 13e197a..0000000
--- a/debian/patches/130_fedora_fix_procxkbsetxyz_to_work_on_all.patch
+++ /dev/null
@@ -1,2245 +0,0 @@
-From 6d1201b05ed61aec508d5d9f88e3a2d33be39849 Mon Sep 17 00:00:00 2001
-From: Peter Hutterer <[EMAIL PROTECTED]>
-Date: Thu, 31 Jul 2008 16:03:21 +0930
-Subject: [PATCH] xkb: fix up ProcXkbSetXYZ to work on all core devices.
-
-Simple principle: if the client requests an xkb change on the core keyboard,
-apply the same change to all core-sending keyboard devices. This way, if you
-change the layout on the VCK, you get the same layout on all devices.
-
-That's the theory anyway, the implementation makes you want to gauge your eyes
-out.
----
- xkb/xkb.c | 1880 +++++++++++++++++++++++++++++++++++++++----------------------
- 1 files changed, 1210 insertions(+), 670 deletions(-)
-
-diff --git a/xkb/xkb.c b/xkb/xkb.c
-index 07f57a7..cc2f77c 100644
---- a/xkb/xkb.c
-+++ b/xkb/xkb.c
-@@ -24,6 +24,31 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
- 
- ********************************************************/
- 
-+/* Copyright © 2008 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.
-+
-+Authors: Peter Hutterer
-+
-+*/
-+
- #ifdef HAVE_DIX_CONFIG_H
- #include <dix-config.h>
- #endif
-@@ -348,17 +373,119 @@ ProcXkbSelectEvents(ClientPtr client)
- }
- 
- /***====================================================================***/
-+/**
-+ * Ring a bell on the given device for the given client.
-+ */
-+static int
-+_XkbBell(ClientPtr client, DeviceIntPtr dev, WindowPtr pWin,
-+         int bellClass, int bellID, int pitch, int duration,
-+         int percent, int forceSound, int eventOnly, Atom name)
-+{
-+    int         base;
-+    pointer     ctrl;
-+    int         oldPitch, oldDuration;
-+    int         newPercent;
-+
-+    if (bellClass == KbdFeedbackClass) {
-+        KbdFeedbackPtr        k;
-+        if (bellID==XkbDfltXIId)
-+            k= dev->kbdfeed;
-+        else {
-+            for (k=dev->kbdfeed; k; k=k->next) {
-+                if (k->ctrl.id == bellID)
-+                    break;
-+            }
-+        }
-+        if (!k) {
-+            client->errorValue = _XkbErrCode2(0x5,bellID);
-+            return BadValue;
-+        }
-+        base = k->ctrl.bell;
-+        ctrl = (pointer) &(k->ctrl);
-+        oldPitch= k->ctrl.bell_pitch;
-+        oldDuration= k->ctrl.bell_duration;
-+        if (pitch!=0) {
-+            if (pitch==-1)
-+                k->ctrl.bell_pitch= defaultKeyboardControl.bell_pitch;
-+            else k->ctrl.bell_pitch= pitch;
-+        }
-+        if (duration!=0) {
-+            if (duration==-1)
-+                k->ctrl.bell_duration= defaultKeyboardControl.bell_duration;
-+            else k->ctrl.bell_duration= duration;
-+        }
-+    }
-+    else if (bellClass == BellFeedbackClass) {
-+        BellFeedbackPtr       b;
-+        if (bellID==XkbDfltXIId)
-+            b= dev->bell;
-+        else {
-+            for (b=dev->bell; b; b=b->next) {
-+                if (b->ctrl.id == bellID)
-+                    break;
-+            }
-+        }
-+        if (!b) {
-+            client->errorValue = _XkbErrCode2(0x6,bellID);
-+            return BadValue;
-+        }
-+        base = b->ctrl.percent;
-+        ctrl = (pointer) &(b->ctrl);
-+        oldPitch= b->ctrl.pitch;
-+        oldDuration= b->ctrl.duration;
-+        if (pitch!=0) {
-+            if (pitch==-1)
-+                b->ctrl.pitch= defaultKeyboardControl.bell_pitch;
-+            else b->ctrl.pitch= pitch;
-+        }
-+        if (duration!=0) {
-+            if (duration==-1)
-+                b->ctrl.duration= defaultKeyboardControl.bell_duration;
-+            else b->ctrl.duration= duration;
-+        }
-+    }
-+    else {
-+        client->errorValue = _XkbErrCode2(0x7, bellClass);;
-+        return BadValue;
-+    }
-+
-+    newPercent = (base * percent)/100;
-+    if (percent < 0)
-+         newPercent = base + newPercent;
-+    else newPercent = base - newPercent + percent;
-+
-+    XkbHandleBell(forceSound, eventOnly,
-+                  dev, newPercent, ctrl, bellClass,
-+                  name, pWin, client);
-+    if ((pitch!=0)||(duration!=0)) {
-+        if (bellClass == KbdFeedbackClass) {
-+            KbdFeedbackPtr      k;
-+            k= (KbdFeedbackPtr)ctrl;
-+            if (pitch!=0)
-+                k->ctrl.bell_pitch= oldPitch;
-+            if (duration!=0)
-+                k->ctrl.bell_duration= oldDuration;
-+        }
-+        else {
-+            BellFeedbackPtr     b;
-+            b= (BellFeedbackPtr)ctrl;
-+            if (pitch!=0)
-+                b->ctrl.pitch= oldPitch;
-+            if (duration!=0)
-+                b->ctrl.duration= oldDuration;
-+        }
-+    }
-+
-+    return Success;
-+}
- 
--/* FIXME: Needs to ding on all core-sending devices. */
- int
- ProcXkbBell(ClientPtr client)
- {
-     REQUEST(xkbBellReq);
-     DeviceIntPtr dev;
-     WindowPtr  pWin;
--    int rc, base;
--    int newPercent,oldPitch,oldDuration;
--    pointer ctrl;
-+    int rc;
- 
-     REQUEST_SIZE_MATCH(xkbBellReq);
- 
-@@ -368,6 +495,7 @@ ProcXkbBell(ClientPtr client)
-     CHK_BELL_DEVICE(dev, stuff->deviceSpec, client, DixBellAccess);
-     CHK_ATOM_OR_NONE(stuff->name);
- 
-+    /* device-independent checks request for sane values */
-     if ((stuff->forceSound)&&(stuff->eventOnly)) {
-       client->errorValue=_XkbErrCode3(0x1,stuff->forceSound,stuff->eventOnly);
-       return BadMatch;
-@@ -390,68 +518,7 @@ ProcXkbBell(ClientPtr client)
-            stuff->bellClass= KbdFeedbackClass;
-       else stuff->bellClass= BellFeedbackClass;
-     }
--    if (stuff->bellClass == KbdFeedbackClass) {
--      KbdFeedbackPtr  k;
--      if (stuff->bellID==XkbDfltXIId) 
--          k= dev->kbdfeed;
--      else {
--          for (k=dev->kbdfeed; k; k=k->next) {
--              if (k->ctrl.id == stuff->bellID)
--                  break;
--          }
--      }
--      if (!k) {
--          client->errorValue= _XkbErrCode2(0x5,stuff->bellID);
--          return BadValue;
--      }
--      base = k->ctrl.bell;
--      ctrl = (pointer) &(k->ctrl);
--      oldPitch= k->ctrl.bell_pitch;
--      oldDuration= k->ctrl.bell_duration;
--      if (stuff->pitch!=0) {
--          if (stuff->pitch==-1)
--               k->ctrl.bell_pitch= defaultKeyboardControl.bell_pitch;
--          else k->ctrl.bell_pitch= stuff->pitch;
--      }
--      if (stuff->duration!=0) {
--          if (stuff->duration==-1)
--               k->ctrl.bell_duration= defaultKeyboardControl.bell_duration;
--          else k->ctrl.bell_duration= stuff->duration;
--      }
--    }
--    else if (stuff->bellClass == BellFeedbackClass) {
--      BellFeedbackPtr b;
--      if (stuff->bellID==XkbDfltXIId)
--          b= dev->bell;
--      else {
--          for (b=dev->bell; b; b=b->next) {
--              if (b->ctrl.id == stuff->bellID)
--                  break;
--          }
--      }
--      if (!b) {
--          client->errorValue = _XkbErrCode2(0x6,stuff->bellID);
--          return BadValue;
--      }
--      base = b->ctrl.percent;
--      ctrl = (pointer) &(b->ctrl);
--      oldPitch= b->ctrl.pitch;
--      oldDuration= b->ctrl.duration;
--      if (stuff->pitch!=0) {
--          if (stuff->pitch==-1)
--               b->ctrl.pitch= defaultKeyboardControl.bell_pitch;
--          else b->ctrl.pitch= stuff->pitch;
--      }
--      if (stuff->duration!=0) {
--          if (stuff->duration==-1)
--               b->ctrl.duration= defaultKeyboardControl.bell_duration;
--          else b->ctrl.duration= stuff->duration;
--      }
--    }
--    else {
--      client->errorValue = _XkbErrCode2(0x7,stuff->bellClass);;
--      return BadValue;
--    }
-+
-     if (stuff->window!=None) {
-       rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
-       if (rc != Success) {
-@@ -461,32 +528,39 @@ ProcXkbBell(ClientPtr client)
-     }
-     else pWin= NULL;
- 
--    newPercent= (base*stuff->percent)/100;
--    if (stuff->percent < 0)
--         newPercent= base+newPercent;
--    else newPercent= base-newPercent+stuff->percent;
--    XkbHandleBell(stuff->forceSound, stuff->eventOnly,
--                              dev, newPercent, ctrl, stuff->bellClass, 
--                              stuff->name, pWin, client);
--    if ((stuff->pitch!=0)||(stuff->duration!=0)) {
--      if (stuff->bellClass == KbdFeedbackClass) {
--          KbdFeedbackPtr      k;
--          k= (KbdFeedbackPtr)ctrl;
--          if (stuff->pitch!=0)
--              k->ctrl.bell_pitch= oldPitch;
--          if (stuff->duration!=0)
--              k->ctrl.bell_duration= oldDuration;
--      }
--      else {
--          BellFeedbackPtr     b;
--          b= (BellFeedbackPtr)ctrl;
--          if (stuff->pitch!=0)
--              b->ctrl.pitch= oldPitch;
--          if (stuff->duration!=0)
--              b->ctrl.duration= oldDuration;
--      }
-+    /* Client wants to ring a bell on the core keyboard?
-+       Ring the bell on the core keyboard (which does nothing, but if that
-+       fails the client is screwed anyway), and then on all extension devices.
-+       Fail if the core keyboard fails but not the extension devices.  this
-+       may cause some keyboards to ding and others to stay silent. Fix
-+       your client to use explicit keyboards to avoid this.
-+
-+       dev is the device the client requested.
-+     */
-+    rc = _XkbBell(client, dev, pWin, stuff->bellClass, stuff->bellID,
-+                  stuff->pitch, stuff->duration, stuff->percent,
-+                  stuff->forceSound, stuff->eventOnly, stuff->name);
-+
-+    if ((rc == Success) && ((stuff->deviceSpec == XkbUseCoreKbd) ||
-+                            (stuff->deviceSpec == XkbUseCorePtr)))
-+    {
-+        DeviceIntPtr other;
-+        for (other = inputInfo.devices; other; other = other->next)
-+        {
-+            if ((other != dev) && other->key && other->coreEvents)
-+            {
-+                rc = XaceHook(XACE_DEVICE_ACCESS, client, other, 
DixBellAccess);
-+                if (rc == Success)
-+                    _XkbBell(client, other, pWin, stuff->bellClass,
-+                             stuff->bellID, stuff->pitch, stuff->duration,
-+                             stuff->percent, stuff->forceSound,
-+                             stuff->eventOnly, stuff->name);
-+            }
-+        }
-+        rc = Success; /* reset to success, that's what we got for the VCK */
-     }
--    return Success;
-+
-+    return rc;
- }
- 
- /***====================================================================***/
-@@ -2283,158 +2357,165 @@ XkbServerMapPtr              srv = 
xkbi->desc->server;
-     return (char *)wire;
- }
- 
--/* FIXME: Needs to set map on all core-sending devices. */
--int
--ProcXkbSetMap(ClientPtr client)
-+/**
-+ * Check if the given request can be applied to the given device but don't
-+ * actually do anything..
-+ */
-+static int
-+_XkbSetMapChecks(ClientPtr client, DeviceIntPtr dev, xkbSetMapReq *req, char* 
values)
- {
--    DeviceIntPtr      dev;
--    XkbSrvInfoPtr     xkbi;
--    XkbDescPtr                xkb;
--    XkbChangesRec     change;
--    XkbEventCauseRec  cause;
--    int                       nTypes = 0,nActions,error;
--    char *            tmp;
--    CARD8             mapWidths[XkbMaxLegalKeyCode+1];
--    CARD16            symsPerKey[XkbMaxLegalKeyCode+1];
--    Bool              sentNKN;
--
--    REQUEST(xkbSetMapReq);
--    REQUEST_AT_LEAST_SIZE(xkbSetMapReq);
--
--    if (!(client->xkbClientFlags&_XkbClientInitialized))
--      return BadAccess;
--
--    CHK_KBD_DEVICE(dev, stuff->deviceSpec, client, DixManageAccess);
--    CHK_MASK_LEGAL(0x01,stuff->present,XkbAllMapComponentsMask);
-+    XkbSrvInfoPtr       xkbi;
-+    XkbDescPtr          xkb;
-+    int                 error;
-+    int                 nTypes = 0, nActions;
-+    CARD8               mapWidths[XkbMaxLegalKeyCode + 1];
-+    CARD16              symsPerKey[XkbMaxLegalKeyCode + 1];
- 
--    XkbSetCauseXkbReq(&cause,X_kbSetMap,client);
-     xkbi= dev->key->xkbInfo;
-     xkb = xkbi->desc;
- 
--    if ((xkb->min_key_code!=stuff->minKeyCode)||
--                              (xkb->max_key_code!=stuff->maxKeyCode)) {
-+    if ((xkb->min_key_code != req->minKeyCode)||
-+        (xkb->max_key_code != req->maxKeyCode)) {
-       if (client->vMajor!=1) { /* pre 1.0 versions of Xlib have a bug */
--          stuff->minKeyCode= xkb->min_key_code;
--          stuff->maxKeyCode= xkb->max_key_code;
-+          req->minKeyCode= xkb->min_key_code;
-+          req->maxKeyCode= xkb->max_key_code;
-       }
-       else {
--          if (!XkbIsLegalKeycode(stuff->minKeyCode)) {
--              client->errorValue= _XkbErrCode3(2,stuff->minKeyCode,
--                                                      stuff->maxKeyCode);
-+          if (!XkbIsLegalKeycode(req->minKeyCode)) {
-+              client->errorValue = _XkbErrCode3(2, req->minKeyCode, 
req->maxKeyCode);
-               return BadValue;
-           }
--          if (stuff->minKeyCode>stuff->maxKeyCode) {
--              client->errorValue= _XkbErrCode3(3,stuff->minKeyCode,
--                                                      stuff->maxKeyCode);
-+          if (req->minKeyCode > req->maxKeyCode) {
-+              client->errorValue = _XkbErrCode3(3, req->minKeyCode, 
req->maxKeyCode);
-               return BadMatch;
-           }
-       }
-     }
- 
--    tmp = (char *)&stuff[1];
--    if ((stuff->present&XkbKeyTypesMask)&&
--      (!CheckKeyTypes(client,xkb,stuff,(xkbKeyTypeWireDesc **)&tmp,
-+    if ((req->present & XkbKeyTypesMask) &&
-+      (!CheckKeyTypes(client,xkb,req,(xkbKeyTypeWireDesc **)&values,
-                                               &nTypes,mapWidths))) {
-       client->errorValue = nTypes;
-       return BadValue;
-     }
--    if ((stuff->present&XkbKeySymsMask)&&
--      (!CheckKeySyms(client,xkb,stuff,nTypes,mapWidths,symsPerKey,
--                                      (xkbSymMapWireDesc **)&tmp,&error))) {
-+    if ((req->present & XkbKeySymsMask) &&
-+      (!CheckKeySyms(client,xkb,req,nTypes,mapWidths,symsPerKey,
-+                                      (xkbSymMapWireDesc **)&values,&error))) 
{
-       client->errorValue = error;
-       return BadValue;
-     }
- 
--    if ((stuff->present&XkbKeyActionsMask)&&
--      (!CheckKeyActions(xkb,stuff,nTypes,mapWidths,symsPerKey,
--                                              (CARD8 **)&tmp,&nActions))) {
-+    if ((req->present & XkbKeyActionsMask) &&
-+      (!CheckKeyActions(xkb,req,nTypes,mapWidths,symsPerKey,
-+                                              (CARD8 **)&values,&nActions))) {
-       client->errorValue = nActions;
-       return BadValue;
-     }
- 
--    if ((stuff->present&XkbKeyBehaviorsMask)&&
--      (!CheckKeyBehaviors(xkb,stuff,(xkbBehaviorWireDesc**)&tmp,&error))) {
-+    if ((req->present & XkbKeyBehaviorsMask) &&
-+      (!CheckKeyBehaviors(xkb,req,(xkbBehaviorWireDesc**)&values,&error))) {
-       client->errorValue = error;
-       return BadValue;
-     }
- 
--    if ((stuff->present&XkbVirtualModsMask)&&
--      (!CheckVirtualMods(xkb,stuff,(CARD8 **)&tmp,&error))) {
-+    if ((req->present & XkbVirtualModsMask) &&
-+      (!CheckVirtualMods(xkb,req,(CARD8 **)&values,&error))) {
-       client->errorValue= error;
-       return BadValue;
-     }
--    if ((stuff->present&XkbExplicitComponentsMask)&&
--      (!CheckKeyExplicit(xkb,stuff,(CARD8 **)&tmp,&error))) {
-+    if ((req->present&XkbExplicitComponentsMask) &&
-+      (!CheckKeyExplicit(xkb,req,(CARD8 **)&values,&error))) {
-       client->errorValue= error;
-       return BadValue;
-     }
--    if ((stuff->present&XkbModifierMapMask)&&
--      (!CheckModifierMap(xkb,stuff,(CARD8 **)&tmp,&error))) {
-+    if ((req->present&XkbModifierMapMask) &&
-+      (!CheckModifierMap(xkb,req,(CARD8 **)&values,&error))) {
-       client->errorValue= error;
-       return BadValue;
-     }
--    if ((stuff->present&XkbVirtualModMapMask)&&
--      (!CheckVirtualModMap(xkb,stuff,(xkbVModMapWireDesc **)&tmp,&error))) {
-+    if ((req->present&XkbVirtualModMapMask) &&
-+      (!CheckVirtualModMap(xkb,req,(xkbVModMapWireDesc **)&values,&error))) {
-       client->errorValue= error;
-       return BadValue;
-     }
--    if (((tmp-((char *)stuff))/4)!=stuff->length) {
-+
-+    if (((values-((char *)req))/4)!= req->length) {
-       ErrorF("Internal error! Bad length in XkbSetMap (after check)\n");
--      client->errorValue = tmp-((char *)&stuff[1]);
-+      client->errorValue = values-((char *)&req[1]);
-       return BadLength;
-     }
--    bzero(&change,sizeof(change));
--    sentNKN= False;
--    if ((xkb->min_key_code!=stuff->minKeyCode)||
--                              (xkb->max_key_code!=stuff->maxKeyCode)) {
-+
-+    return Success;
-+}
-+
-+/**
-+ * Apply the given request on the given device.
-+ */
-+static int
-+_XkbSetMap(ClientPtr client, DeviceIntPtr dev, xkbSetMapReq *req, char 
*values)
-+{
-+    XkbEventCauseRec  cause;
-+    XkbChangesRec     change;
-+    Bool              sentNKN;
-+    XkbSrvInfoPtr       xkbi;
-+    XkbDescPtr          xkb;
-+
-+    xkbi= dev->key->xkbInfo;
-+    xkb = xkbi->desc;
-+
-+    XkbSetCauseXkbReq(&cause,X_kbSetMap,client);
-+    bzero(&change, sizeof(change));
-+    sentNKN = False;
-+    if ((xkb->min_key_code!=req->minKeyCode)||
-+        (xkb->max_key_code!=req->maxKeyCode)) {
-       Status                  status;
-       xkbNewKeyboardNotify    nkn;
--      nkn.deviceID= nkn.oldDeviceID= dev->id;
--      nkn.oldMinKeyCode= xkb->min_key_code;
--      nkn.oldMaxKeyCode= xkb->max_key_code;
--      status= XkbChangeKeycodeRange(xkb,stuff->minKeyCode,stuff->maxKeyCode,
--                                                              &change);
--      if (status!=Success)
--          return status;
--      nkn.minKeyCode= xkb->min_key_code;
--      nkn.maxKeyCode= xkb->max_key_code;
--      nkn.requestMajor= XkbReqCode;
--      nkn.requestMinor= X_kbSetMap;
--      nkn.changed= XkbNKN_KeycodesMask;
-+      nkn.deviceID = nkn.oldDeviceID = dev->id;
-+      nkn.oldMinKeyCode = xkb->min_key_code;
-+      nkn.oldMaxKeyCode = xkb->max_key_code;
-+      status= XkbChangeKeycodeRange(xkb, req->minKeyCode,
-+                                      req->maxKeyCode, &change);
-+      if (status != Success)
-+          return status; /* oh-oh. what about the other keyboards? */
-+      nkn.minKeyCode = xkb->min_key_code;
-+      nkn.maxKeyCode = xkb->max_key_code;
-+      nkn.requestMajor = XkbReqCode;
-+      nkn.requestMinor = X_kbSetMap;
-+      nkn.changed = XkbNKN_KeycodesMask;
-       XkbSendNewKeyboardNotify(dev,&nkn);
--      sentNKN= True;
--    }
--    tmp = (char *)&stuff[1];
--    if (stuff->present&XkbKeyTypesMask) {
--      tmp = SetKeyTypes(xkb,stuff,(xkbKeyTypeWireDesc *)tmp,&change);
--      if (!tmp)       goto allocFailure;
--    }
--    if (stuff->present&XkbKeySymsMask) {
--      tmp = SetKeySyms(client,xkb,stuff,(xkbSymMapWireDesc *)tmp,&change,dev);
--      if (!tmp)       goto allocFailure;
--    }
--    if (stuff->present&XkbKeyActionsMask) {
--      tmp = SetKeyActions(xkb,stuff,(CARD8 *)tmp,&change);
--      if (!tmp)       goto allocFailure;
--    }
--    if (stuff->present&XkbKeyBehaviorsMask) {
--      tmp= SetKeyBehaviors(xkbi,stuff,(xkbBehaviorWireDesc *)tmp,&change);
--      if (!tmp)       goto allocFailure;
--    }
--    if (stuff->present&XkbVirtualModsMask)
--      tmp= SetVirtualMods(xkbi,stuff,(CARD8 *)tmp,&change);
--    if (stuff->present&XkbExplicitComponentsMask)
--      tmp= SetKeyExplicit(xkbi,stuff,(CARD8 *)tmp,&change);
--    if (stuff->present&XkbModifierMapMask)
--      tmp= SetModifierMap(xkbi,stuff,(CARD8 *)tmp,&change);
--    if (stuff->present&XkbVirtualModMapMask)
--      tmp= SetVirtualModMap(xkbi,stuff,(xkbVModMapWireDesc *)tmp,&change);
--    if (((tmp-((char *)stuff))/4)!=stuff->length) {
-+      sentNKN = True;
-+    }
-+
-+    if (req->present&XkbKeyTypesMask) {
-+      values = SetKeyTypes(xkb,req,(xkbKeyTypeWireDesc *)values,&change);
-+      if (!values)    goto allocFailure;
-+    }
-+    if (req->present&XkbKeySymsMask) {
-+      values = SetKeySyms(client,xkb,req,(xkbSymMapWireDesc 
*)values,&change,dev);
-+      if (!values)    goto allocFailure;
-+    }
-+    if (req->present&XkbKeyActionsMask) {
-+      values = SetKeyActions(xkb,req,(CARD8 *)values,&change);
-+      if (!values)    goto allocFailure;
-+    }
-+    if (req->present&XkbKeyBehaviorsMask) {
-+      values= SetKeyBehaviors(xkbi,req,(xkbBehaviorWireDesc *)values,&change);
-+      if (!values)    goto allocFailure;
-+    }
-+    if (req->present&XkbVirtualModsMask)
-+      values= SetVirtualMods(xkbi,req,(CARD8 *)values,&change);
-+    if (req->present&XkbExplicitComponentsMask)
-+      values= SetKeyExplicit(xkbi,req,(CARD8 *)values,&change);
-+    if (req->present&XkbModifierMapMask)
-+      values= SetModifierMap(xkbi,req,(CARD8 *)values,&change);
-+    if (req->present&XkbVirtualModMapMask)
-+      values= SetVirtualModMap(xkbi,req,(xkbVModMapWireDesc *)values,&change);
-+    if (((values-((char *)req))/4)!=req->length) {
-       ErrorF("Internal error! Bad length in XkbSetMap (after set)\n");
--      client->errorValue = tmp-((char *)&stuff[1]);
-+      client->errorValue = values-((char *)&req[1]);
-       return BadLength;
-     }
--    if (stuff->flags&XkbSetMapRecomputeActions) {
-+    if (req->flags&XkbSetMapRecomputeActions) {
-       KeyCode         first,last,firstMM,lastMM;
-       if (change.map.num_key_syms>0) {
-           first= change.map.first_key_sym;
-@@ -2467,11 +2548,82 @@ ProcXkbSetMap(ClientPtr client)
-       XkbSendNotification(dev,&change,&cause);
- 
-     XkbUpdateCoreDescription(dev,False);
--    return client->noClientException;
-+    return Success;
- allocFailure:
-     return BadAlloc;
- }
- 
-+
-+int
-+ProcXkbSetMap(ClientPtr client)
-+{
-+    DeviceIntPtr      dev;
-+    char *            tmp;
-+    int                 rc;
-+
-+    REQUEST(xkbSetMapReq);
-+    REQUEST_AT_LEAST_SIZE(xkbSetMapReq);
-+
-+    if (!(client->xkbClientFlags&_XkbClientInitialized))
-+      return BadAccess;
-+
-+    CHK_KBD_DEVICE(dev, stuff->deviceSpec, client, DixManageAccess);
-+    CHK_MASK_LEGAL(0x01,stuff->present,XkbAllMapComponentsMask);
-+
-+    tmp = (char *)&stuff[1];
-+
-+    /* Check if we can to the SetMap on the requested device. If this
-+       succeeds, do the same thing for all extension devices (if needed).
-+       If any of them fails, fail.  */
-+    rc = _XkbSetMapChecks(client, dev, stuff, tmp);
-+
-+    if (rc != Success)
-+        return rc;
-+
-+    if (stuff->deviceSpec == XkbUseCoreKbd)
-+    {
-+        DeviceIntPtr other;
-+        for (other = inputInfo.devices; other; other = other->next)
-+        {
-+            if ((other != dev) && other->key && other->coreEvents)
-+            {
-+                rc = XaceHook(XACE_DEVICE_ACCESS, client, other, 
DixManageAccess);
-+                if (rc == Success)
-+                {
-+                    rc = _XkbSetMapChecks(client, other, stuff, tmp);
-+                    if (rc != Success)
-+                        return rc;
-+                }
-+            }
-+        }
-+    }
-+
-+    /* We know now that we will succed with the SetMap. In theory anyway. */
-+    rc = _XkbSetMap(client, dev, stuff, tmp);
-+    if (rc != Success)
-+        return rc;
-+
-+    if (stuff->deviceSpec == XkbUseCoreKbd)
-+    {
-+        DeviceIntPtr other;
-+        for (other = inputInfo.devices; other; other = other->next)
-+        {
-+            if ((other != dev) && other->key && other->coreEvents)
-+            {
-+                rc = XaceHook(XACE_DEVICE_ACCESS, client, other, 
DixManageAccess);
-+                if (rc == Success)
-+                    _XkbSetMap(client, other, stuff, tmp);
-+                /* ignore rc. if the SetMap failed although the check above
-+                   reported true there isn't much we can do. we still need to
-+                   set all other devices, hoping that at least they stay in
-+                   sync. */
-+            }
-+        }
-+    }
-+
-+    return client->noClientException;
-+}
-+
- /***====================================================================***/
- 
- static Status
-@@ -2600,57 +2752,58 @@ ProcXkbGetCompatMap(ClientPtr client)
-     return XkbSendCompatMap(client,compat,&rep);
- }
- 
--/* FIXME: Needs to set compat map on all core-sending devices. */
--int
--ProcXkbSetCompatMap(ClientPtr client)
-+/**
-+ * Apply the given request on the given device.
-+ * If dryRun is True, then value checks are performed, but the device isn't
-+ * modified.
-+ */
-+static int
-+_XkbSetCompatMap(ClientPtr client, DeviceIntPtr dev,
-+                 xkbSetCompatMapReq *req, char* data, BOOL dryRun)
- {
--    DeviceIntPtr      dev;
--    XkbSrvInfoPtr     xkbi;
--    XkbDescPtr                xkb;
--    XkbCompatMapPtr   compat;
--    char      *       data;
--    int                       nGroups;
--    register unsigned i,bit;
-+    XkbSrvInfoPtr       xkbi;
-+    XkbDescPtr          xkb;
-+    XkbCompatMapPtr     compat;
-+    int                 nGroups;
-+    unsigned            i,bit;
- 
--    REQUEST(xkbSetCompatMapReq);
--    REQUEST_AT_LEAST_SIZE(xkbSetCompatMapReq);
--
--    if (!(client->xkbClientFlags&_XkbClientInitialized))
--      return BadAccess;
--
--    CHK_KBD_DEVICE(dev, stuff->deviceSpec, client, DixManageAccess);
--
--    data = (char *)&stuff[1];
-     xkbi = dev->key->xkbInfo;
--    xkb= xkbi->desc;
--    compat= xkb->compat;
--    if ((stuff->nSI>0)||(stuff->truncateSI)) {
-+    xkb = xkbi->desc;
-+    compat = xkb->compat;
-+
-+    if ((req->nSI>0)||(req->truncateSI)) {
-       xkbSymInterpretWireDesc *wire;
--      if (stuff->firstSI>compat->num_si) {
-+      if (req->firstSI>compat->num_si) {
-           client->errorValue = _XkbErrCode2(0x02,compat->num_si);
-           return BadValue;
-       }
-       wire= (xkbSymInterpretWireDesc *)data;
--      wire+= stuff->nSI;
-+      wire+= req->nSI;
-       data = (char *)wire;
-     }
-+
-     nGroups= 0;
--    if (stuff->groups!=0) {
-+    if (req->groups!=0) {
-       for (i=0,bit=1;i<XkbNumKbdGroups;i++,bit<<=1) {
--          if ( stuff->groups&bit )
-+          if ( req->groups&bit )
-               nGroups++;
-       }
-     }
-     data+= nGroups*SIZEOF(xkbModsWireDesc);
--    if (((data-((char *)stuff))/4)!=stuff->length) {
-+    if (((data-((char *)req))/4)!=req->length) {
-       return BadLength;
-     }
--    data = (char *)&stuff[1];
--    if (stuff->nSI>0) {
-+
-+    /* Done all the checks we can do */
-+    if (dryRun)
-+        return Success;
-+
-+    data = (char *)&req[1];
-+    if (req->nSI>0) {
-       xkbSymInterpretWireDesc *wire = (xkbSymInterpretWireDesc *)data;
-       XkbSymInterpretPtr      sym;
--      if ((unsigned)(stuff->firstSI+stuff->nSI)>compat->num_si) {
--          compat->num_si= stuff->firstSI+stuff->nSI;
-+      if ((unsigned)(req->firstSI+req->nSI)>compat->num_si) {
-+          compat->num_si= req->firstSI+req->nSI;
-           compat->sym_interpret= _XkbTypedRealloc(compat->sym_interpret,
-                                                  compat->num_si,
-                                                  XkbSymInterpretRec);
-@@ -2659,13 +2812,13 @@ ProcXkbSetCompatMap(ClientPtr client)
-               return BadAlloc;
-           }
-       }
--      else if (stuff->truncateSI) {
--          compat->num_si = stuff->firstSI+stuff->nSI;
-+      else if (req->truncateSI) {
-+          compat->num_si = req->firstSI+req->nSI;
-       }
--      sym = &compat->sym_interpret[stuff->firstSI];
--      for (i=0;i<stuff->nSI;i++,wire++,sym++) {
-+      sym = &compat->sym_interpret[req->firstSI];
-+      for (i=0;i<req->nSI;i++,wire++,sym++) {
-           if (client->swapped) {
--              register int n;
-+              int n;
-               swapl(&wire->sym,n);
-           }
-           sym->sym= wire->sym;
-@@ -2674,21 +2827,21 @@ ProcXkbSetCompatMap(ClientPtr client)
-           sym->flags= wire->flags;
-           sym->virtual_mod= wire->virtualMod;
-           memcpy((char *)&sym->act,(char *)&wire->act,
--                                              SIZEOF(xkbActionWireDesc));
-+                   SIZEOF(xkbActionWireDesc));
-       }
-       data = (char *)wire;
-     }
--    else if (stuff->truncateSI) {
--      compat->num_si = stuff->firstSI;
-+    else if (req->truncateSI) {
-+      compat->num_si = req->firstSI;
-     }
- 
--    if (stuff->groups!=0) {
--      register unsigned i,bit;
-+    if (req->groups!=0) {
-+      unsigned i, bit;
-       xkbModsWireDesc *wire = (xkbModsWireDesc *)data;
--      for (i=0,bit=1;i<XkbNumKbdGroups;i++,bit<<=1) {
--          if (stuff->groups&bit) {
-+      for (i = 0, bit = 1; i < XkbNumKbdGroups; i++, bit <<= 1) {
-+          if (req->groups & bit) {
-               if (client->swapped) {
--                  register int n;
-+                  int n;
-                   swaps(&wire->virtualMods,n);
-               }
-               compat->groups[i].mask= wire->realMods;
-@@ -2704,23 +2857,23 @@ ProcXkbSetCompatMap(ClientPtr client)
-           }
-       }
-     }
--    i= XkbPaddedSize((data-((char *)stuff)));
--    if ((i/4)!=stuff->length) {
--      ErrorF("Internal length error on read in ProcXkbSetCompatMap\n");
-+    i= XkbPaddedSize((data-((char *)req)));
-+    if ((i/4)!=req->length) {
-+      ErrorF("Internal length error on read in _XkbSetCompatMap\n");
-       return BadLength;
-     }
--    
-+
-     if (dev->xkb_interest) {
-       xkbCompatMapNotify ev;
-       ev.deviceID = dev->id;
--      ev.changedGroups = stuff->groups;
--      ev.firstSI = stuff->firstSI;
--      ev.nSI = stuff->nSI;
-+      ev.changedGroups = req->groups;
-+      ev.firstSI = req->firstSI;
-+      ev.nSI = req->nSI;
-       ev.nTotalSI = compat->num_si;
-       XkbSendCompatMapNotify(dev,&ev);
-     }
- 
--    if (stuff->recomputeActions) {
-+    if (req->recomputeActions) {
-       XkbChangesRec           change;
-       unsigned                check;
-       XkbEventCauseRec        cause;
-@@ -2734,6 +2887,71 @@ ProcXkbSetCompatMap(ClientPtr client)
-       XkbUpdateCoreDescription(dev,False);
-       XkbSendNotification(dev,&change,&cause);
-     }
-+    return Success;
-+}
-+
-+int
-+ProcXkbSetCompatMap(ClientPtr client)
-+{
-+    DeviceIntPtr        dev;
-+    char                *data;
-+    int                 rc;
-+
-+    REQUEST(xkbSetCompatMapReq);
-+    REQUEST_AT_LEAST_SIZE(xkbSetCompatMapReq);
-+
-+    if (!(client->xkbClientFlags&_XkbClientInitialized))
-+      return BadAccess;
-+
-+    CHK_KBD_DEVICE(dev, stuff->deviceSpec, client, DixManageAccess);
-+
-+    data = (char *)&stuff[1];
-+
-+    /* check first using a dry-run */
-+    rc = _XkbSetCompatMap(client, dev, stuff, data, TRUE);
-+    if (rc != Success)
-+        return rc;
-+    if (stuff->deviceSpec == XkbUseCoreKbd)
-+    {
-+        DeviceIntPtr other;
-+        for (other = inputInfo.devices; other; other = other->next)
-+        {


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to