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