platform/upstream/libxkbcommon.git
10 years agoexpr: simplify ExprResolveButton
Ran Benita [Sat, 15 Feb 2014 20:59:12 +0000 (22:59 +0200)]
expr: simplify ExprResolveButton

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoaction: don't pass a keymap where a ctx is sufficient
Ran Benita [Sat, 15 Feb 2014 20:28:41 +0000 (22:28 +0200)]
action: don't pass a keymap where a ctx is sufficient

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoaction: add missing array_ndx checks
Ran Benita [Sat, 15 Feb 2014 20:16:41 +0000 (22:16 +0200)]
action: add missing array_ndx checks

Only the "data" field can have them, and every other field needs to
error out if it appears. But some didn't check.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoaction: move array_ndx errors into the Check functions
Ran Benita [Sat, 15 Feb 2014 19:55:36 +0000 (21:55 +0200)]
action: move array_ndx errors into the Check functions

Makes more sense and flows more nicely this way.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoaction: fix missing support for "affect" field
Ran Benita [Sat, 15 Feb 2014 19:48:31 +0000 (21:48 +0200)]
action: fix missing support for "affect" field

Support for setting this field was missing from the LockMods and
LockControls actions.

Based on a xkbcomp patch by Andreas Wettstein.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoast: cast to ParseCommon explictly instead of using ->common
Ran Benita [Thu, 13 Feb 2014 21:57:22 +0000 (23:57 +0200)]
ast: cast to ParseCommon explictly instead of using ->common

Some tools were getting mighty confused with what we were doing.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoaction: simplify Check* functions
Ran Benita [Thu, 13 Feb 2014 21:11:31 +0000 (23:11 +0200)]
action: simplify Check* functions

Instead of using those t1 t2 variables, pass the final destinations
directly (while making sure they are not modified in case of error).

This also ensures the types are right, e.g. in CheckGroupField it should
be int32_t, not xkb_layout_index_t (and indeed it takes a negation!).

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agodarray: fix indentation
Ran Benita [Wed, 12 Feb 2014 09:07:39 +0000 (11:07 +0200)]
darray: fix indentation

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agovmod: bring back support for direct vmod -> real mod mapping
Ran Benita [Tue, 27 Nov 2012 08:42:15 +0000 (10:42 +0200)]
vmod: bring back support for direct vmod -> real mod mapping

This brings back the functionality that was removed in
b9c87eb710ba4a86455601ca8c5a516b25e20366. Though it is not used in
xkeyboard-config, from our current perspective it can be quite useful to
be able to set the mappings directly, thus sidestepping the ugly and
legacy-ridden modifier_map statement.

Here's an example of how to get rid of modifier_map statements (though
that would break core-X11 applications, since they must have the
mappings through keysyms):
    virtual_modifiers NumLock = Mod2;
    virtual_modifiers Alt = Mod1;
    // Would be nice to map these to Alt, but that would be
    // incompatible with xkbcomp and somewhat complicated
    virtual_modifiers LAlt = Mod1;
    virtual_modifiers RAlt = Mod1;
    virtual_modifiers LevelThree = Mod5;
    virtual_modifiers RControl = Control;
    virtual_modifiers LControl = Control;
    virtual_modifiers Super = Mod4;
    virtual_modifiers Meta = Mod1;
    virtual_modifiers Hyper = Mod4;
    virtual_modifiers AltGr = Mod5;
    virtual_modifiers LShift = Shift;
    virtual_modifiers RShift = Shift;

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agobuild: small fixes and formatting of Makefile.am
Ran Benita [Tue, 11 Feb 2014 15:44:11 +0000 (17:44 +0200)]
build: small fixes and formatting of Makefile.am

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agobuild: fix libtest AM_CLFLAGS typo
Ran Benita [Tue, 11 Feb 2014 15:16:40 +0000 (17:16 +0200)]
build: fix libtest AM_CLFLAGS typo

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoMove src/xkbcomp/scanner-utils.h to src/
Ran Benita [Sun, 27 Oct 2013 18:10:15 +0000 (20:10 +0200)]
Move src/xkbcomp/scanner-utils.h to src/

As we'll use it for things unrelated to xkbcomp.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agobuild: fix configure test for yacc
Ran Benita [Mon, 10 Feb 2014 18:50:58 +0000 (20:50 +0200)]
build: fix configure test for yacc

It only works if 'bison' or 'byacc' are provided, but sometimes byacc
is installed as plain 'yacc'. The check fails for that.

I broke this in bdd8c11, restore Daniel's retrospectively clever check.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoscanner: sort out scanner logging functions
Ran Benita [Mon, 10 Feb 2014 18:33:34 +0000 (20:33 +0200)]
scanner: sort out scanner logging functions

First, make the rules and xkb scanners/parsers use the same logging
functions instead of rolling their own.

Second, use the gcc ##__VA_ARGS extension instead of dealing with C99
stupidity. I hope all relevant compilers support it.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agorules: always %-expand kccgst values
Ran Benita [Mon, 10 Feb 2014 13:18:22 +0000 (15:18 +0200)]
rules: always %-expand kccgst values

Previously the early-exit codepath might have left some values
unexpanded, and we'd go looking for e.g "%l%(v)".

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agotest/rmlvo-to-kccgst: use default RMLVO values in translation
Ran Benita [Mon, 10 Feb 2014 11:13:26 +0000 (13:13 +0200)]
test/rmlvo-to-kccgst: use default RMLVO values in translation

The tool's supposed to display exactly the same results as the library
code.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agocontext: add xkb_context_sanitize_rule_names()
Ran Benita [Mon, 10 Feb 2014 11:06:22 +0000 (13:06 +0200)]
context: add xkb_context_sanitize_rule_names()

We want all the default logic in a test, so encapsulate it in this
function, and make all the get_default_* functions static.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agorules: print full path in error messages
Ran Benita [Mon, 10 Feb 2014 09:16:37 +0000 (11:16 +0200)]
rules: print full path in error messages

There can be multiple include paths. But it's nicer in any case.
This also makes scanner_error actually use log_err instead of log_warn -
oops.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agorules: include the path in failed-to-map error message
Ran Benita [Mon, 10 Feb 2014 09:11:27 +0000 (11:11 +0200)]
rules: include the path in failed-to-map error message

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agocontext: fix wrong VARIANT instead of LAYOUT getenv
Ran Benita [Mon, 10 Feb 2014 10:24:50 +0000 (12:24 +0200)]
context: fix wrong VARIANT instead of LAYOUT getenv

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoast: remove unneeded 'ctx' param to XkbFileCreate
Ran Benita [Sun, 9 Feb 2014 21:21:19 +0000 (23:21 +0200)]
ast: remove unneeded 'ctx' param to XkbFileCreate

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agox11: don't trust keycode before testing its range
Ran Benita [Sun, 9 Feb 2014 16:02:11 +0000 (18:02 +0200)]
x11: don't trust keycode before testing its range

The assert is not very useful access the key just before.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agokeymap: reduce padding in struct xkb_sym_interpret
Ran Benita [Sun, 9 Feb 2014 15:49:30 +0000 (17:49 +0200)]
keymap: reduce padding in struct xkb_sym_interpret

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agosymbols: steal keys and modmaps when merging if possible
Ran Benita [Sun, 9 Feb 2014 15:18:08 +0000 (17:18 +0200)]
symbols: steal keys and modmaps when merging if possible

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agocompat: steal interps and leds when merging if possible
Ran Benita [Sun, 9 Feb 2014 15:17:13 +0000 (17:17 +0200)]
compat: steal interps and leds when merging if possible

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agotypes: steal types when merging if possible
Ran Benita [Sun, 9 Feb 2014 14:49:45 +0000 (16:49 +0200)]
types: steal types when merging if possible

Like we do everywhere else. Removes some unnecessary allocations and
copying.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agodoc: move some file comments into txt files in doc/
Ran Benita [Sun, 9 Feb 2014 09:27:34 +0000 (11:27 +0200)]
doc: move some file comments into txt files in doc/

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agostate: check wrap_group_into_range() return value
Ran Benita [Sun, 9 Feb 2014 11:51:38 +0000 (13:51 +0200)]
state: check wrap_group_into_range() return value

It returns XKB_LAYOUT_INVALID in case num_groups == 0. So we shouldn't
just save it in the state.
Note, though, that this condition is generally impossible.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agox11: add 0 < ctrls->numGroups <= 4 assertion
Ran Benita [Sun, 9 Feb 2014 08:27:45 +0000 (10:27 +0200)]
x11: add 0 < ctrls->numGroups <= 4 assertion

This only happens if something is wrong in the server; a valid keymap
cannot be had in any case.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoRemove m4/.gitkeep
Ran Benita [Sat, 8 Feb 2014 16:30:41 +0000 (18:30 +0200)]
Remove m4/.gitkeep

Now there's a file in there.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agokeysym: use safe keysym comparison function
Ran Benita [Sat, 8 Feb 2014 15:58:39 +0000 (17:58 +0200)]
keysym: use safe keysym comparison function

Instead of thinking about signed <-> unsigned an whatnot.
bsearch() is inline in glibc, so gcc optimizes this away anyway.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoscanner: make line and column unsigned
Ran Benita [Sat, 8 Feb 2014 15:22:14 +0000 (17:22 +0200)]
scanner: make line and column unsigned

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agorules: get rid of struct location
Ran Benita [Sat, 8 Feb 2014 15:15:37 +0000 (17:15 +0200)]
rules: get rid of struct location

Use the scanner token_{line,column} like we do in the other places.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoapi: deprecate XKB_MAP_COMPILE_PLACEHOLDER, and use KEYMAP instead of MAP
Ran Benita [Sat, 8 Feb 2014 14:40:20 +0000 (16:40 +0200)]
api: deprecate XKB_MAP_COMPILE_PLACEHOLDER, and use KEYMAP instead of MAP

The PLACEHOLDER was not meant to be used, but c++ doesn't like passing 0
to enums, so it was used. For this reason we add all the NO_FLAGS items,
so the PLACEHOLDER shouldn't be used anymore.

Second, XKB_MAP is the prefix we used ages ago, KEYMAP is the expected
prefix here. So deprecate that as well.

The old names may still be used through the xkbcommon-compat.h header,
which is included by default (no need to include directly).

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agox11: make sure not to use compat header
Ran Benita [Sat, 8 Feb 2014 14:38:18 +0000 (16:38 +0200)]
x11: make sure not to use compat header

src/keymap.h already defines the necessary header guard, so just reverse
the include order.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agox11: make some #defines unsigned
Ran Benita [Sat, 8 Feb 2014 14:25:22 +0000 (16:25 +0200)]
x11: make some #defines unsigned

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agox11: fix truncation of xkb controls mask off the wire
Ran Benita [Sat, 8 Feb 2014 14:18:16 +0000 (16:18 +0200)]
x11: fix truncation of xkb controls mask off the wire

It's uint32_t, not uint16_t, so we were losing flags (not that it
matters in this case).

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agox11: make msb_pos return unsigned
Ran Benita [Sat, 8 Feb 2014 14:12:09 +0000 (16:12 +0200)]
x11: make msb_pos return unsigned

It was initially returning -1 for all-zero arguments, but now it returns
0.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agokeysym: fix types in bin_search
Ran Benita [Sat, 8 Feb 2014 14:03:06 +0000 (16:03 +0200)]
keysym: fix types in bin_search

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agostate: optimize xkb_state_led_update_all()
Ran Benita [Sat, 8 Feb 2014 13:53:50 +0000 (15:53 +0200)]
state: optimize xkb_state_led_update_all()

Before:
    ran@ran:~/src/libxkbcommon$ ./test/bench-key-proc
    ran 20000000 iterations in 6.623018074s

After:
    ran@ran:~/src/libxkbcommon$ ./test/bench-key-proc
    ran 20000000 iterations in 4.762291091s

Not that anyone needs to process millions of keys per second...

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoUse (1u << idx) instead of (1 << idx) where appropriate
Ran Benita [Sat, 8 Feb 2014 13:30:05 +0000 (15:30 +0200)]
Use (1u << idx) instead of (1 << idx) where appropriate

It doesn't matter (I think), since the implicit conversion doesn't have
any effect (e.g. sign-extension). But it's better to be aware of the
type.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoUse unsigned int for saving darray_size return value
Ran Benita [Sat, 8 Feb 2014 13:10:09 +0000 (15:10 +0200)]
Use unsigned int for saving darray_size return value

See: b9b3593cbdeb7f5b02d50cecaba6a0b47d4979ad
So these should be unsigned int's now.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoaction: fix misleading cast
Ran Benita [Sat, 8 Feb 2014 13:06:28 +0000 (15:06 +0200)]
action: fix misleading cast

The type is uint8_t and so is the checked range.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoaction: fix printing of underflowed value in error message
Ran Benita [Sat, 8 Feb 2014 13:05:05 +0000 (15:05 +0200)]
action: fix printing of underflowed value in error message

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoscanner-utils: add some likely/unlikely annotations
Ran Benita [Sat, 8 Feb 2014 10:31:21 +0000 (12:31 +0200)]
scanner-utils: add some likely/unlikely annotations

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoDefine likely()/unlikely() macros
Ran Benita [Sat, 8 Feb 2014 10:29:51 +0000 (12:29 +0200)]
Define likely()/unlikely() macros

It serves as nice "hotspot" annotations, and can also help things, so
why not.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoPartially revert "ast: pack the ParseCommon struct"
Ran Benita [Sat, 8 Feb 2014 00:01:17 +0000 (02:01 +0200)]
Partially revert "ast: pack the ParseCommon struct"

This reverts commit 1e6e5669c6229846830f0b497591de4e3cf588eb.

It's probably safe, but let's not take any chances, as I don't have any
esoteric arch to test on. But keep the ATTR in case it's ever useful.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agobuild: add -Wextra warnings
Ran Benita [Fri, 7 Feb 2014 22:08:06 +0000 (00:08 +0200)]
build: add -Wextra warnings

If it gets annoying, we can disable it. But for now it's clean.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoast: use more suitable types in a few ast nodes
Ran Benita [Fri, 7 Feb 2014 23:26:35 +0000 (01:26 +0200)]
ast: use more suitable types in a few ast nodes

The int ones cannot be signed (they come as such from the scanner, and
NEGATE is never applied to them).

The uint32_t one is really an atom, but presumably the type was never
converted to xkb_atom_t.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agodarray: use unsigned int instead of size_t for array size
Ran Benita [Fri, 7 Feb 2014 23:13:50 +0000 (01:13 +0200)]
darray: use unsigned int instead of size_t for array size

size_t is too large; if we ever need it, that's the least of our
problems. Besides, when we roll our own (e.g. in keymap.h) it's already
unsigned int. Instead, add some emergency overflow check. So, why?

- It plays nicer with all the other uint32_t's and unsigned int's (no
  extensions, etc.).
- Reduces keymap memory usage by 5% or so as a bonus.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agotest/state: fix tautological test
Ran Benita [Fri, 7 Feb 2014 22:42:54 +0000 (00:42 +0200)]
test/state: fix tautological test

test/state.c:376:5: warning: comparison of unsigned expression >= 0 is always true [-Wtype-limits]

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoFix sign-compare warnings
Ran Benita [Fri, 7 Feb 2014 22:27:54 +0000 (00:27 +0200)]
Fix sign-compare warnings

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agosymbols: reduce some loop iterators scope
Ran Benita [Fri, 7 Feb 2014 22:18:32 +0000 (00:18 +0200)]
symbols: reduce some loop iterators scope

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoparser: fix unrecognized keysym handling
Ran Benita [Fri, 7 Feb 2014 19:12:53 +0000 (21:12 +0200)]
parser: fix unrecognized keysym handling

Integer may be negative, so also need to test >= 0.
Also, $$ was left uninitialized if the keysym wasn't recognized.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoaction: change xkb_pointer_button_action::button to uint8_t
Ran Benita [Fri, 7 Feb 2014 18:58:19 +0000 (20:58 +0200)]
action: change xkb_pointer_button_action::button to uint8_t

In XkbPtrBtnAction it is unsigned char, don't know how it became signed.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agodarray: cleanup
Ran Benita [Fri, 7 Feb 2014 17:39:42 +0000 (19:39 +0200)]
darray: cleanup

We have quite diverged from the upstream file, so let's make it at least
easier to look at. Remove some unused macros and rename some for
consistency.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoast: make symsMapIndex unsigned
Ran Benita [Fri, 7 Feb 2014 17:28:48 +0000 (19:28 +0200)]
ast: make symsMapIndex unsigned

It doesn't need to be signed.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoaction: Use ResolveInteger for PtrBtn.count, not ResolveButton
Ran Benita [Fri, 7 Feb 2014 16:49:22 +0000 (18:49 +0200)]
action: Use ResolveInteger for PtrBtn.count, not ResolveButton

It's not a button.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoaction: check range of MovePtr X,Y values
Ran Benita [Fri, 7 Feb 2014 16:48:16 +0000 (18:48 +0200)]
action: check range of MovePtr X,Y values

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoscanner: avoid strlen in keyword lookup, we know the len
Ran Benita [Fri, 7 Feb 2014 16:09:30 +0000 (18:09 +0200)]
scanner: avoid strlen in keyword lookup, we know the len

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agostate: use the XKB_MOD_MASK constant
Ran Benita [Fri, 7 Feb 2014 15:29:34 +0000 (17:29 +0200)]
state: use the XKB_MOD_MASK constant

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agox11: add #actions == #syms check
Ran Benita [Fri, 7 Feb 2014 15:13:03 +0000 (17:13 +0200)]
x11: add #actions == #syms check

This must always hold (but if there are no actions, #actions==0), and
explicitly ensures there won't be a division-by-zero a bit below.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agox11: add explicit cast in mods conversion
Ran Benita [Fri, 7 Feb 2014 15:11:49 +0000 (17:11 +0200)]
x11: add explicit cast in mods conversion

Explicit is better and all.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agotest: don't print control characters in interactive tests
Ran Benita [Thu, 6 Feb 2014 23:35:56 +0000 (01:35 +0200)]
test: don't print control characters in interactive tests

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agox11: add missing #ifdef __cplusplus to header
Ran Benita [Tue, 4 Feb 2014 20:18:12 +0000 (22:18 +0200)]
x11: add missing #ifdef __cplusplus to header

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoUse secure_getenv when available
Ran Benita [Tue, 4 Feb 2014 00:53:05 +0000 (02:53 +0200)]
Use secure_getenv when available

We probably don't want to get a privileged process to compile arbitrary
keymaps. So we should be careful about the envvars which control include
paths or default RMLVOs. But then secure_getenv is more sensible for
everything we do.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agobuild: some fixes in configure.ac
Ran Benita [Tue, 4 Feb 2014 00:48:41 +0000 (02:48 +0200)]
build: some fixes in configure.ac

- Use 'test =' instead of 'test ==' in the x11 test. The second one
  might not work with e.g. dash, whoops.

- Use AS_IF instead of 'if'. It actually blends in better..

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoBump version to 0.4.0 xkbcommon-0.4.0
Ran Benita [Sun, 2 Feb 2014 10:13:26 +0000 (12:13 +0200)]
Bump version to 0.4.0

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoUpdate README
Ran Benita [Sun, 2 Feb 2014 10:08:43 +0000 (12:08 +0200)]
Update README

- Remove outdated information about API/ABI stability. If we ever break
  API or ABI, we'll do a major release. But currently everything is
  stable.

- Remove outdated warnings about internal symbols. You simply cannot
  access them...

- Briefly mention xkbcommon-x11 existence.

- Update git and bug URLs.

- Add myself as maintainer :)

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoUpdate NEWS
Ran Benita [Sun, 2 Feb 2014 10:05:35 +0000 (12:05 +0200)]
Update NEWS

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agobuild: add configure summary
Ran Benita [Sun, 2 Feb 2014 09:13:28 +0000 (11:13 +0200)]
build: add configure summary

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agox11: add a couple of tests
Ran Benita [Tue, 30 Jul 2013 12:06:40 +0000 (15:06 +0300)]
x11: add a couple of tests

Add two tests:

    ./test/interactive-x11
which is like test/interactive-evdev, but should behave exactly like your
X keyboard and react to state and keymap changes - in other words, just
like typing in xterm. Press ESC to exit.

    ./test/x11
which currently should only print out the same keymap as
    xkbcomp $DISPLAY out.xkb
(modulo some whitespace and some constructs we do not support.)

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agox11: add XKB protocol keymap and state creation support
Ran Benita [Sat, 20 Jul 2013 20:21:44 +0000 (23:21 +0300)]
x11: add XKB protocol keymap and state creation support

These are function to create an xkb_keymap directly from XKB requests
to the X server. This opens up the possibility for X clients to use
xcb + xcb-xkb + xkbcommon as a proper replacement for Xlib + xkbfile for
keyboard support.

The X11 support must be enabled with --enable-x11 for now.
The functions are in xkbcommon/xkbcommon-x11.h. It depends on a recent
libxcb with xkb enabled. The functions are in a new libxkbcommon-x11.so,
with a new pkg-config file, etc. so that the packages may be split, and
libxkbcommon.so itself remains dependency-free.

Why not just use the RMLVO that the server puts in the _XKB_RULES_NAMES
property? This does not account for custom keymaps, on-the-fly keymap
modifications, remote clients, etc., so is not a proper solution in
practice. Also, some servers don't even set it. Now, the client just
needs to recreate the keymap in response to a change in the server's
keymap (as Xlib clients do with XRefreshKeyboardMapping() and friends).

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agobuild: error out on undefined symbols
Ran Benita [Mon, 13 Jan 2014 16:19:36 +0000 (18:19 +0200)]
build: error out on undefined symbols

This helps ensure we don't ship a library with undefined symbols, which
can easily happen with multiple inter-dependent DSOs.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agocontext: split private functions to context-priv.c
Ran Benita [Mon, 13 Jan 2014 15:20:54 +0000 (17:20 +0200)]
context: split private functions to context-priv.c

(Same as keymap-priv.c).

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agokeymap: split private functions to keymap-priv.c
Ran Benita [Mon, 13 Jan 2014 15:07:41 +0000 (17:07 +0200)]
keymap: split private functions to keymap-priv.c

This makes it easier to share the private functions in other DSOs
without relying (too much) on dead code elimination, exported symbols,
etc.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agokeymap: move XkbEscapeMapName() to keymap.c.
Ran Benita [Fri, 2 Aug 2013 07:19:01 +0000 (10:19 +0300)]
keymap: move XkbEscapeMapName() to keymap.c.

So we can use it outside src/xkbcomp; it is not really specific to it.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agotest: rename test/interactive to interactive-evdev
Ran Benita [Tue, 30 Jul 2013 10:38:51 +0000 (13:38 +0300)]
test: rename test/interactive to interactive-evdev

And share the key-printing functions. In preparation for adding more
interactive-* variants.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agocontext: remove mostly useless log wrappers
Ran Benita [Sun, 12 Jan 2014 12:37:39 +0000 (14:37 +0200)]
context: remove mostly useless log wrappers

Just use xkb_log directly.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoparser: shutup some 'may be used uninitialized' warnings
Ran Benita [Sun, 12 Jan 2014 11:18:39 +0000 (13:18 +0200)]
parser: shutup some 'may be used uninitialized' warnings

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoaction, types: remove unused Report functions
Ran Benita [Sun, 12 Jan 2014 08:53:23 +0000 (10:53 +0200)]
action, types: remove unused Report functions

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoAdd a constant for NumLock
Hardening [Wed, 8 Jan 2014 20:22:45 +0000 (21:22 +0100)]
Add a constant for NumLock

This trivial patch adds the name of the Numlock modifier

10 years agotest/state: fix some *_{is,are}_active() tests
Ran Benita [Sat, 11 Jan 2014 14:56:20 +0000 (16:56 +0200)]
test/state: fix some *_{is,are}_active() tests

These functions also return -1 on invalid input. The original tests
didn't check that, but used !tests instead. Since then we've changed
them, but some were missed, and for some we forgot to remove the ! (or
you can say they were extra clever).

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoFix some cppcheck warnings
Ran Benita [Sat, 11 Jan 2014 14:40:42 +0000 (16:40 +0200)]
Fix some cppcheck warnings

Someone was nice enough to run this for us:

ftp://ftp.sunet.se/pub/Linux/distributions/Debian/debian/pool/main/libx/libxkbcommon/libxkbcommon_0.3.1.orig.tar.gz
[libxkbcommon-0.3.1/src/keymap.c:86]: (style) The scope of the variable 'j' can be reduced.
[libxkbcommon-0.3.1/src/keymap.c:87]: (style) The scope of the variable 'key' can be reduced.
[libxkbcommon-0.3.1/src/keysym-utf.c:843]: (style) The scope of the variable 'mid' can be reduced.
[libxkbcommon-0.3.1/src/state.c:992]: (style) The scope of the variable 'str' can be reduced.
[libxkbcommon-0.3.1/src/xkbcomp/action.c:467]: (style) The scope of the variable 'absolute' can be reduced.
[libxkbcommon-0.3.1/src/xkbcomp/rules.c:468]: (style) The scope of the variable 'consumed' can be reduced.
[libxkbcommon-0.3.1/src/xkbcomp/rules.c:862]: (style) The scope of the variable 'mlvo' can be reduced.
[libxkbcommon-0.3.1/src/xkbcomp/rules.c:863]: (style) The scope of the variable 'kccgst' can be reduced.
[libxkbcommon-0.3.1/src/xkbcomp/rules.c:865]: (style) The scope of the variable 'match_type' can be reduced.
[libxkbcommon-0.3.1/src/xkbcomp/symbols.c:753]: (style) The scope of the variable 'toAct' can be reduced.
[libxkbcommon-0.3.1/src/xkbcomp/symbols.c:1573]: (style) The scope of the variable 'key' can be reduced.
[libxkbcommon-0.3.1/test/common.c:80]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'.
[libxkbcommon-0.3.1/test/interactive.c:358]: (style) The scope of the variable 'nevs' can be reduced.
[libxkbcommon-0.3.1/test/interactive.c:236]: (style) Checking if unsigned variable 'nsyms' is less than zero.
[libxkbcommon-0.3.1/test/interactive.c:226]: (style) Unused variable: unicode

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agomakekeys: mark keysym_names as static
Ran Benita [Fri, 10 Jan 2014 22:26:58 +0000 (00:26 +0200)]
makekeys: mark keysym_names as static

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agokeysym: clarify slightly confusing comparison functions
Ran Benita [Wed, 1 Jan 2014 23:19:25 +0000 (01:19 +0200)]
keysym: clarify slightly confusing comparison functions

Make it clear what the search key type and array types are.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agomakekeys: Add a gcc pragma to ignore -Woverlength-strings
Jasper St. Pierre [Wed, 1 Jan 2014 18:01:12 +0000 (13:01 -0500)]
makekeys: Add a gcc pragma to ignore -Woverlength-strings

10 years agomakekeys: Put a comment describing the origin of the file
Jasper St. Pierre [Wed, 17 Jul 2013 22:56:03 +0000 (18:56 -0400)]
makekeys: Put a comment describing the origin of the file

10 years agoks_tables: Put all keysym names in one giant block
Jasper St. Pierre [Wed, 17 Jul 2013 22:07:31 +0000 (18:07 -0400)]
ks_tables: Put all keysym names in one giant block

This makes the file take two segments instead of potentially many, causing
relocation issues.

10 years agomakekeys: Move all of the table generation to Python
Jasper St. Pierre [Wed, 17 Jul 2013 21:49:10 +0000 (17:49 -0400)]
makekeys: Move all of the table generation to Python

This makes it easier to run the Python script manually.

10 years agomakekeys: Remove some semis
Jasper St. Pierre [Wed, 17 Jul 2013 21:44:07 +0000 (17:44 -0400)]
makekeys: Remove some semis

Python doesn't have these

10 years agokeysyms: add German T3 layout keysyms from xproto
Ran Benita [Wed, 1 Jan 2014 08:40:09 +0000 (10:40 +0200)]
keysyms: add German T3 layout keysyms from xproto

Reference:
http://cgit.freedesktop.org/xorg/proto/xproto/commit/?id=6d4acb0e3a6568a8faaa651d4e3d32f917b9067b

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agokeysym: fix search for lexicographically larger strings
Ran Benita [Wed, 1 Jan 2014 08:36:54 +0000 (10:36 +0200)]
keysym: fix search for lexicographically larger strings

Probably a copy/paste error from a few lines above.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoast: pack the ParseCommon struct
Ran Benita [Sat, 14 Dec 2013 15:39:11 +0000 (17:39 +0200)]
ast: pack the ParseCommon struct

This shows a measurable improvement in memory and performance for free,
on 64bit at least. Packing is (or should be) safe in this case.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoatom: don't malloc every node separately
Ran Benita [Mon, 2 Dec 2013 15:13:50 +0000 (17:13 +0200)]
atom: don't malloc every node separately

Instead of having a darray of pointers to malloc'ed atom_node's, make it
a darray of atom_node's directly.

This makes the code a bit simpler, saves on some malloc's, and the
memory gain/loss even out.

Unfortunately, we are no longer Three Star Programmers ;(
http://c2.com/cgi/wiki?ThreeStarProgrammer

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agotest/atom: add test for atom table
Ran Benita [Mon, 2 Dec 2013 12:16:45 +0000 (14:16 +0200)]
test/atom: add test for atom table

Mostly a random test.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoatom: tiny style fixes
Ran Benita [Mon, 2 Dec 2013 12:25:51 +0000 (14:25 +0200)]
atom: tiny style fixes

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoatom: allow passing NULLs to find_node_pointer()
Ran Benita [Mon, 2 Dec 2013 12:23:59 +0000 (14:23 +0200)]
atom: allow passing NULLs to find_node_pointer()

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoatom: allow interning empty string
Ran Benita [Mon, 2 Dec 2013 12:15:58 +0000 (14:15 +0200)]
atom: allow interning empty string

Which is different than XKB_ATOM_NONE, as in "" != NULL.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoatom: drop {xkb_,}atom_strdup
Ran Benita [Mon, 2 Dec 2013 12:14:41 +0000 (14:14 +0200)]
atom: drop {xkb_,}atom_strdup

Even though in 112cccb18ad1bc877b3c4a87fa536ea085c761b5 I said it might
be useful, it's not. So remove it.

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