Blame SOURCES/0038-xkb-Factor-out-a-function-to-copy-a-keymap-s-control.patch

70130e
From bcbc8bf3a7ed433cb6424deca845f49d3b744339 Mon Sep 17 00:00:00 2001
70130e
From: Rui Matos <tiagomatos@gmail.com>
70130e
Date: Mon, 21 Oct 2013 14:41:53 +0200
70130e
Subject: [PATCH 38/39] xkb: Factor out a function to copy a keymap's controls
70130e
 unto another
70130e
70130e
---
70130e
 include/xkbsrv.h |  3 +++
70130e
 xkb/xkb.c        | 14 +-------------
70130e
 xkb/xkbUtils.c   | 23 +++++++++++++++++++++++
70130e
 3 files changed, 27 insertions(+), 13 deletions(-)
70130e
70130e
diff --git a/include/xkbsrv.h b/include/xkbsrv.h
70130e
index 83ee1d0..6a2e96e 100644
70130e
--- a/include/xkbsrv.h
70130e
+++ b/include/xkbsrv.h
70130e
@@ -829,6 +829,9 @@ extern void XkbFakeDeviceButton(DeviceIntPtr /* dev */ ,
70130e
                                 int /* press */ ,
70130e
                                 int /* button */ );
70130e
 
70130e
+extern _X_EXPORT void XkbCopyControls(XkbDescPtr /* dst */ ,
70130e
+                                      XkbDescPtr /* src */ );
70130e
+
70130e
 #include "xkbfile.h"
70130e
 #include "xkbrules.h"
70130e
 
70130e
diff --git a/xkb/xkb.c b/xkb/xkb.c
70130e
index 7a631b8..6a68e81 100644
70130e
--- a/xkb/xkb.c
70130e
+++ b/xkb/xkb.c
70130e
@@ -5950,25 +5950,13 @@ ProcXkbGetKbdByName(ClientPtr client)
70130e
     if (rep.loaded) {
70130e
         XkbDescPtr old_xkb;
70130e
         xkbNewKeyboardNotify nkn;
70130e
-        int i, nG, nTG;
70130e
 
70130e
         old_xkb = xkb;
70130e
         xkb = new;
70130e
         dev->key->xkbInfo->desc = xkb;
70130e
         new = old_xkb;          /* so it'll get freed automatically */
70130e
 
70130e
-        *xkb->ctrls = *old_xkb->ctrls;
70130e
-        for (nG = nTG = 0, i = xkb->min_key_code; i <= xkb->max_key_code; i++) {
70130e
-            nG = XkbKeyNumGroups(xkb, i);
70130e
-            if (nG >= XkbNumKbdGroups) {
70130e
-                nTG = XkbNumKbdGroups;
70130e
-                break;
70130e
-            }
70130e
-            if (nG > nTG) {
70130e
-                nTG = nG;
70130e
-            }
70130e
-        }
70130e
-        xkb->ctrls->num_groups = nTG;
70130e
+        XkbCopyControls(xkb, old_xkb);
70130e
 
70130e
         nkn.deviceID = nkn.oldDeviceID = dev->id;
70130e
         nkn.minKeyCode = new->min_key_code;
70130e
diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
70130e
index 1f8a839..6cf6e79 100644
70130e
--- a/xkb/xkbUtils.c
70130e
+++ b/xkb/xkbUtils.c
70130e
@@ -2090,3 +2090,26 @@ XkbMergeLockedPtrBtns(DeviceIntPtr master)
70130e
         xkbi->lockedPtrButtons |= d->key->xkbInfo->lockedPtrButtons;
70130e
     }
70130e
 }
70130e
+
70130e
+void
70130e
+XkbCopyControls(XkbDescPtr dst, XkbDescPtr src)
70130e
+{
70130e
+    int i, nG, nTG;
70130e
+
70130e
+    if (!dst || !src)
70130e
+        return;
70130e
+
70130e
+    *dst->ctrls = *src->ctrls;
70130e
+
70130e
+    for (nG = nTG = 0, i = dst->min_key_code; i <= dst->max_key_code; i++) {
70130e
+        nG = XkbKeyNumGroups(dst, i);
70130e
+        if (nG >= XkbNumKbdGroups) {
70130e
+            nTG = XkbNumKbdGroups;
70130e
+            break;
70130e
+        }
70130e
+        if (nG > nTG) {
70130e
+            nTG = nG;
70130e
+        }
70130e
+    }
70130e
+    dst->ctrls->num_groups = nTG;
70130e
+}
70130e
-- 
70130e
1.8.3.1
70130e