xserver-multidpi/xkb
Peter Hutterer 6423769799 xkb: after making changes to the xkb ctrls, copy them back into kbdfeed.
enabled_ctrls_changes nowhere near the usual event or config paths. So this
condition always evaluated to false and the memcpy would thus never been
hit. As a result, any modification to the XKB struct during
XkbUpdateDescActions was not reflected in the kbdfeed ctrls.
The flag that is set by XkbUpdateDescActions() if ctrls were changed are in
enabled_ctrls.

This mainly affected keyboard repeat control as XKB uses the kbdfeed ctrls,
not XKB's per_key_repeats, to determine if a key needs to be repeated. Thus,
adding a "repeat= False" to the XKB map of any action did not have any
effect.

Test case:
assign Mode_switch to any key that by default repeats, e.g. the menu key.

    key <COMP> {         [     Mode_switch ] };

Then modify the Mode_switch action to not repeat the key.

    interpret Mode_switch+AnyOfOrNone(all) {
        virtualModifier= AltGr;
        useModMapMods=level1;
        action= SetGroup(group=+1);
        // Add this line
        repeat= False;
    };

Though the flags are correctly reflected in the description loaded in the
server, the change is not handed back to the kbdfeed struct and XKB will
trigger softrepeats of this key.

This patch also adds two explanatory comments and an extra check, as this
path may be hit before the CtrlProc for the kbdfeed struct is set.

Red Hat Bug 537708 <https://bugzilla.redhat.com/show_bug.cgi?id=537708>

Also fixes broken auto-repeat of the backspace key in the colemak layout
(mapped to CapsLock).

X.Org Bug 16318 <http://bugs.freedesktop.org/show_bug.cgi?id=16318>

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Tested-by: Dirk Wallenstein <halsmit@t-online.de>
Reviewed-by: Dirk Wallenstein <halsmit@t-online.de>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
2011-01-21 09:07:09 +10:00
..
ddxBeep.c xkb: sed True -> TRUE and False -> FALSE 2010-02-02 10:03:30 +10:00
ddxCtrls.c Remove #define NEED_EVENTS and NEED_REPLIES 2008-12-12 11:43:32 +10:00
ddxKillSrv.c Remove #define NEED_EVENTS and NEED_REPLIES 2008-12-12 11:43:32 +10:00
ddxLEDs.c Remove #define NEED_EVENTS and NEED_REPLIES 2008-12-12 11:43:32 +10:00
ddxList.c Convert existing Xprintf style calls to asprintf style 2010-12-07 11:10:35 -08:00
ddxLoad.c Convert existing Xprintf style calls to asprintf style 2010-12-07 11:10:35 -08:00
ddxPrivate.c Remove #define NEED_EVENTS and NEED_REPLIES 2008-12-12 11:43:32 +10:00
ddxVT.c Remove #define NEED_EVENTS and NEED_REPLIES 2008-12-12 11:43:32 +10:00
Makefile.am xkb: rename XkbFakeDeviceButton and XkbFakeDeviceMotion, move into xkbActions.c 2010-04-19 09:23:20 +10:00
maprules.c Remove more superfluous if(p) checks around free(p) 2010-06-06 20:27:18 +07:00
README.compiled R6.6 is the Xorg base-line 2003-11-14 15:54:54 +00:00
xkb.c xkb: always fill the symsPerKey array, regardless of client flags (#30527) 2010-10-20 08:01:54 +10:00
xkb.h xkb: move XkbFilterEvents to xkbsrv.h 2009-07-30 08:43:14 +10:00
xkbAccessX.c xkb: release XTEST pointer buttons on physical releases. (#28808) 2010-07-02 08:51:30 +10:00
xkbActions.c Abstract valuator masks through a set of APIs. 2010-10-22 11:02:48 +10:00
XKBAlloc.c Remove superfluous if(p!=NULL) checks around free(p); p=NULL; 2010-11-11 08:22:59 +10:00
xkbDflts.h Static markup and dead code cull over xkb/. 2007-03-20 18:37:02 -04:00
xkbEvents.c xkb: Remove redurant intialization code 2010-09-01 14:42:59 +10:00
xkbfmisc.c Remove unnecessary parentheses around return values in functions 2010-06-10 06:42:42 -07:00
XKBGAlloc.c Remove superfluous if(p!=NULL) checks around free(p); p=NULL; 2010-11-11 08:22:59 +10:00
xkbgeom.h xkb: remove some now-useless XFUNCPROTOBEGIN 2009-05-08 14:28:44 +10:00
xkbInit.c Remove more superfluous if(p) checks around free(p) 2010-06-11 19:05:46 +07:00
xkbLEDs.c xkb: Fix possible NULL pointer dereference 2010-09-01 14:43:03 +10:00
XKBMAlloc.c Remove more superfluous if(p!=NULL) checks around free(p). 2010-11-11 08:29:54 +10:00
XKBMisc.c xkb: Replace a few manual bitflips with SetBit & friends. 2011-01-20 07:48:47 +10:00
xkbout.c xkb: check for NULL pointer before dereferences it in XkbWriteXKBSymbols 2010-04-21 18:07:25 +03:00
xkbPrKeyEv.c input: don't use typecasts to access members of InternalEvent. 2009-09-22 11:15:32 +10:00
xkbSwap.c Remove #define NEED_EVENTS and NEED_REPLIES 2008-12-12 11:43:32 +10:00
xkbtext.c xkb: sed True -> TRUE and False -> FALSE 2010-02-02 10:03:30 +10:00
xkbUtils.c xkb: after making changes to the xkb ctrls, copy them back into kbdfeed. 2011-01-21 09:07:09 +10:00
XKM_file_format.txt xkb: Add XKM file format description. 2010-02-02 10:03:21 +10:00
xkmread.c xkb: Fix NULL pointer dereference 2010-09-01 14:42:58 +10:00

The X server uses this directory to store the compiled version of the
current keymap and/or any scratch keymaps used by clients.  The X server
or some other tool might destroy or replace the files in this directory,
so it is not a safe place to store compiled keymaps for long periods of
time.  The default keymap for any server is usually stored in:
     X<num>-default.xkm
where <num> is the display number of the server in question, which makes
it possible for several servers *on the same host* to share the same 
directory.

Unless the X server is modified, sharing this directory between servers on
different hosts could cause problems.