[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