Use void* instead of old style char* in CommonInfo functions

Removes some annoying casts.

Signed-off-by: Ran Benita <ran234@gmail.com>
keymap: simplify legal/required logic a bit

Now that we've consolidated on the keymap file type, this code only
serves to confuse.

Signed-off-by: Ran Benita <ran234@gmail.com>
Use enum for file types

enums are nice for some type safety and readability. This one also
removes the distinction between file type mask / file type index and
some naming consistency.

Signed-off-by: Ran Benita <ran234@gmail.com>
Use enum for merge mode

The merge mode shows up in a lot of functions, so it's useful to give it
a distinct type.

Signed-off-by: Ran Benita <ran234@gmail.com>
compat: move some unclear code where it belongs

It seems like at some point it was needed to break the abstraction and
perform this piece of code in the context above CompileCompatMap. The
extra argument and the typedef look strange now, and doesn't seem to be
needed any more, so move them back.

Signed-off-by: Ran Benita <ran234@gmail.com>
xkbcomp: remove useless function XkbChooseMap

compile_keymap can only be passes a single keymap file now, from all
code paths leading to it. So this function doesn't do anything.

The remaining check is performed inside CompileKeymap, so we can remove
it as well; compile_keymap doesn't do much now.

Signed-off-by: Ran Benita <ran234@gmail.com>
Remove _X_EXPORT from xkb_map_new_from_kccgst

Signed-off-by: Ran Benita <ran234@gmail.com>
rules: remove support for keymap rule

This commit removes the ability to specify a keymap *in a rules file*,
e.g. in /usr/share/X11/xkb/rules/evdev or somesuch. This is unused in
xkeyboard-data, and the current code has never even supported it,
because xkb_map_new_from_kccgst (which is no longer exposed in the API)
checks to see that one of the usual components (e.g. symbols, types, ..)
has been filled, while the rules parser, on the other hand,  doesn't
allow to specify a keymap and other stuff at the same time.

( The idea was to remove xkb_map_new_from_kccgst entirely, but it's used
  by a test so it can stay. )

tl;dr: dead code. Of course passing a keymap file to
xkb_map_new_from_file still works.

Signed-off-by: Ran Benita <ran234@gmail.com>
Tiny reformatting

Signed-off-by: Ran Benita <ran234@gmail.com>
state: fix base mod set/clear behavior

This commit fixes the incorrect current behavior, where at the end of the
following key sequence
Left Shift down, Right Shift down, Left Shift up
the Shift modifier is cleared.

Clearly the code is not as nice as before, but it seems like some count
of the depressed modifiers must be kept.

The code is lifted mostly as is from xkbActions.c. [ There they also
assign to setMods and clearMods each time and not OR it. I assume its
correct, although I wouldn't have guessed... ]

Signed-off-by: Ran Benita <ran234@gmail.com>
keymap: remove redundant check

This is handled above in the LEGAL_FILE_TYPES check.

Signed-off-by: Ran Benita <ran234@gmail.com>
rules: fix parsing of multiple options

This was broken by commit 18d331b86b4942ba54fe087ca07e47c9383d768b
(where only the first option out of a comma-separated string was
matched). Do it correctly this time and add a test.

Signed-off-by: Ran Benita <ran234@gmail.com>
keyseq: add a failing group-switching test

For some reason, with the grp:alt_shift_toggle option, the following
sequence switches a group:
< Left Shift down, Left Alt down >
While the reverse doesn't:
< Left Alt down, Left Shift down >
And it should.

Signed-off-by: Ran Benita <ran234@gmail.com>
symbols: fix bug in symbol merging

When we merge two KeyInfo's (belonging to the same keycode), we may take
a shortcut from copying if we see that the merged keys will be exactly
like those in one of the two KeyInfo's. In the case where we take the
symbols from the KeyInfo we are *not* merging into, we need to copy
the three arrays:
    syms[group], symsMapNumEntries[group], symsMapIndex[group]
The code currently only copies the first one, so if there's a merge
conflict some levels may seem to disappear (i.e. have a NoSymbol
keysym).

This fixes the failing test added in c8d6bba.

Signed-off-by: Ran Benita <ran234@gmail.com>
test/dump: output commentary to stderr

Signed-off-by: Ran Benita <ran234@gmail.com>
Enlarge keysym name buffers and mention in comment

The longest keysym is 27 chars long.

Signed-off-by: Ran Benita <ran234@gmail.com>
Remove 'force' argument from BindIndicators

It was always true in the one callsite, so just remove the other
branches.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Remove 'unboundRtrn' argument from BindIndicators

It was only ever passed as NULL from its single callsite, so just remove
it and be done with it.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Change BindIndicators return to void

Since it could only ever return true, which avoids a totally unnecessary
cleanup path.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Make BindIndicators static

Since BindIndicators was only ever called immediately after
CopyIndicatorMapDefs, move it up in the file and turn it into a static
function, which avoids the need to ever pass the unbound LEDs around.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>