[PATCH 5/5] xkb: Factor out a function to copy a keymap's controls unto another
Peter Hutterer
peter.hutterer at who-t.net
Tue Mar 11 22:36:29 PDT 2014
On Fri, Mar 07, 2014 at 02:32:28PM -0800, Kristian Høgsberg wrote:
> From: Rui Matos <tiagomatos at gmail.com>
>
> Reviewed-by: Kristian Høgsberg <krh at bitplanet.net>
merged this one with s/unto/onto/, thanks.
Cheers,
Peter
> ---
> 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 5d8e409..49e236d 100644
> --- a/include/xkbsrv.h
> +++ b/include/xkbsrv.h
> @@ -837,6 +837,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 6196a17..dc570f0 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.9.0
More information about the xorg-devel
mailing list