On Fri, Dec 25, 2015 at 05:55:22PM -0700, Anthony J. Bentley wrote:
> Hi,
> 
> As X starts, it will attempt to detect features from the kbd(8)
> setting--for example, us.dvorak will enable dvorak in X, and
> fr.dvorak will enable French dvorak in X. However, it detects
> these features with equality checks, which will fail if multiple
> options are set, as in the case of us.dvorak.swapctrlcaps or
> fr.dvorak.swapctrlcaps.
> 
> Instead of checking for equality, this diff instead checks if the
> bits are set. Now us.dvorak.swapctrlcaps and fr.dvorak.swapctrlcaps
> work, us.swapctrlcaps.iopener swaps ctrl/caps, and the ones that
> already worked (de.nodead, etc) still do.
> 
> This was reported on misc@ by "Sevan / Venture37" back in June.
> 
> ok?
> 

ok shadchin@

> Index: config/wscons.c
> ===================================================================
> RCS file: /cvs/xenocara/xserver/config/wscons.c,v
> retrieving revision 1.14
> diff -u -p -r1.14 wscons.c
> --- config/wscons.c   15 Jan 2015 01:30:40 -0000      1.14
> +++ config/wscons.c   25 Dec 2015 21:37:21 -0000
> @@ -139,7 +139,7 @@ wscons_add_keyboard(void)
>              break;
>          }
>      for (i = 0; kbdvar[i].val; i++)
> -        if (wsenc == kbdvar[i].val || KB_VARIANT(wsenc) == kbdvar[i].val) {
> +        if ((wsenc & kbdvar[i].val) == kbdvar[i].val) {
>              LogMessageVerb(X_INFO, 3, "wskbd: using variant %s\n",
>                             kbdvar[i].name);
>              input_options = input_option_new(input_options,
> @@ -147,7 +147,7 @@ wscons_add_keyboard(void)
>              break;
>          }
>      for (i = 0; kbdopt[i].val; i++)
> -        if (KB_VARIANT(wsenc) == kbdopt[i].val) {
> +        if (KB_VARIANT(wsenc) & kbdopt[i].val) {
>              LogMessageVerb(X_INFO, 3, "wskbd: using option %s\n",
>                             kbdopt[i].name);
>              input_options = input_option_new(input_options,
> 

-- 
Alexandr Shadchin

Reply via email to