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