platform/upstream/libxkbcommon.git
10 years agoUpdate NEWS
Ran Benita [Thu, 27 Mar 2014 18:11:13 +0000 (20:11 +0200)]
Update NEWS

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agobuild: trim down generated doxygen docs
Ran Benita [Thu, 27 Mar 2014 18:58:16 +0000 (20:58 +0200)]
build: trim down generated doxygen docs

Remove the huge verbatim copies of the header files.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agobuild: add docs to EXTRA_DIST
Ran Benita [Thu, 27 Mar 2014 18:37:21 +0000 (20:37 +0200)]
build: add docs to EXTRA_DIST

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agostate: fix consumed modifier calculation
Ran Benita [Thu, 27 Mar 2014 15:42:20 +0000 (17:42 +0200)]
state: fix consumed modifier calculation

The current calculation is in short:
    entry ? (entry->mask & ~entry->preserve) : 0

This changes it be
    type->mask & ~(entry ? entry->preserve : 0)

This is what Xlib does. While less intuitive, it is actually more
correct, if you follow this deduction:

- The key group's type->mask defines which modifiers the key even cares
  about. The others are completely irrelevant (and in fact they are
  masked out from all sided in the level calculation). Example: NumLock
  for an alphabetic key.

- The type->mask, the mods which are not masked out, are *all* relevant
  (and in fact in the level calculation they must match *exactly* to the
  state). These mods affect which level is chosen for the key, whether
  they are active or not.

- Because the type->mask mods are all relevant, they must be considered
  as consumed by the calculation *even if they are not active*.

Therefore we use type->mask instead of entry->mask.

The second change is what happens when no entry is found: return 0 or
just take preserve to be 0? Let's consider an example, the basic type

    type "ALPHABETIC" {
        modifiers = Shift+Lock;
        map[Shift] = Level2;
        map[Lock] = Level2;
        level_name[Level1] = "Base";
        level_name[Level2] = "Caps";
    };

Suppose Shift+Lock is active - it doesn't match any entry, thus it gets
to level 0. The first interpretation would take them both to be
unconsumed, the second (new one) would take them both to be consumed.
This seems much better: Caps is active, and Shift disables it, they both
do something.

This change also fixes a pretty lousy bug (since 0.3.2), where Shift
appears to apparently *not* disable Caps. What actually happens is that
Caps is not consumed (see above) but active, thus the implicit
capitalization in get_one_sym() kicks in and capitalizes it anyway.

Reported-by: Davinder Pal Singh Bhamra
Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoReformat README markdown
Ran Benita [Sun, 23 Mar 2014 13:04:51 +0000 (15:04 +0200)]
Reformat README markdown

So that github displays it as markdown, and correctly.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agodoc: add a quick guide to the library
Ran Benita [Sun, 23 Mar 2014 12:32:12 +0000 (14:32 +0200)]
doc: add a quick guide to the library

This is a nice intro to the documentation, and also preferably gently
pushes users to the "proper way" of using the library, which can be
confusing.

See also: http://fooishbar.org/tell-me-about/xkbcommon-intro/

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agostate: apply control transformation on utf8/utf32 keysym strings
Ran Benita [Fri, 21 Mar 2014 21:00:37 +0000 (23:00 +0200)]
state: apply control transformation on utf8/utf32 keysym strings

This is required by the specification:
http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Interpreting_the_Control_Modifier
and clients expect this to happen.

https://bugs.freedesktop.org/show_bug.cgi?id=75892

Reported-by: Gatis Paeglis <gatis.paeglis@digia.com>
Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agostate: add xkb_state_key_get_{utf8,utf32}() API functions
Ran Benita [Fri, 21 Mar 2014 21:00:17 +0000 (23:00 +0200)]
state: add xkb_state_key_get_{utf8,utf32}() API functions

These functions generally have the same effect as
xkb_state_key_get_syms() + xkb_keysym_to_utf{8,32}().

So why add them?

- They provide a slightly nicer interface, especially if the string is
  the only interest.

- It makes the handling of multiple-keysyms-to-utf8 transparent. For the
  designated use-case of multiple-keysyms (unicode combining
  characters), this is a must. We also validate the UTF-8, which the
  user might not otherwise do.

- We will need to apply some transformation on the resulting string
  which depend on the xkb_state. This is not possible with the
  xkb_keysym_* functions.

With these functions, the existing xkb_keysym_to_utf{8,32}() are not
expected to be used by a typical user; they are "raw" functions.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoAdd utf8.{c,h} for common UTF-8 util functions
Ran Benita [Sun, 9 Feb 2014 11:50:21 +0000 (13:50 +0200)]
Add utf8.{c,h} for common UTF-8 util functions

We need to validate some UTF-8, so this adds an is_valid_utf8()
function, which is probably pretty slow but should work correctly.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoconfigure.ac: fix message when X11 support is disabled
Ran Benita [Fri, 21 Mar 2014 17:54:30 +0000 (19:54 +0200)]
configure.ac: fix message when X11 support is disabled

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agox11: relax XkbGetNames requirements
Ran Benita [Thu, 6 Mar 2014 11:43:02 +0000 (13:43 +0200)]
x11: relax XkbGetNames requirements

It is valid for a keymap to not have key aliases, group names and
various other things. But the current test requires all of them to be
present in the reply, which causes us the fail on such keymaps (as the
XQuartz one).

Instead, require only what we really need. The virtual-mods names may
not be strictly required, but it seems safer to leave it in for now.

https://bugs.freedesktop.org/show_bug.cgi?id=75798

Reported-by: Gatis Paeglis <gatis.paeglis@digia.com>
Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agodoc: extend xkb_rule_names default-value description
Ran Benita [Tue, 4 Mar 2014 17:26:56 +0000 (19:26 +0200)]
doc: extend xkb_rule_names default-value description

Especially a mention of the XKB_DEFAULT_* envvars was missing.

Reported-by: Paeglis Gatis <Gatis.Paeglis@digia.com> (thanks!)
Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agodoc: remove possibly confusing comment
Ran Benita [Tue, 4 Mar 2014 16:24:11 +0000 (18:24 +0200)]
doc: remove possibly confusing comment

There are valid reasons to use the other keymap-creation functions, if
one needs them. On the other hand, if one is supposed to use RMLVO, it
is more or less the only choice, so the comment is not needed in this
case as well.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agointeractive-x11: beef up select_events a bit
Ran Benita [Fri, 28 Feb 2014 13:12:16 +0000 (15:12 +0200)]
interactive-x11: beef up select_events a bit

- Specify in detail which parts of the events we care about. In theory
  the X server should not bother us with things we didn't ask for. In
  practice it still does, but oh well.

- Use the _aux version of select_events. This is the correct one to use,
  the non-aux version is useless.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agodoc: add comments about update_key() and get_syms() order
Ran Benita [Fri, 28 Feb 2014 12:50:48 +0000 (14:50 +0200)]
doc: add comments about update_key() and get_syms() order

I remember we had a comment about this, but I can't find it. So add it
again.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agosymbols, keycodes: fix int return type when bool is intended
Ran Benita [Sat, 22 Feb 2014 21:43:19 +0000 (23:43 +0200)]
symbols, keycodes: fix int return type when bool is intended

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agosymbols: cleanup SetSymbolsField
Ran Benita [Sat, 22 Feb 2014 21:37:37 +0000 (23:37 +0200)]
symbols: cleanup SetSymbolsField

Normalize the style and error message levels.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agosymbols: fix possible use of uninitialized value
Ran Benita [Sat, 22 Feb 2014 21:20:04 +0000 (23:20 +0200)]
symbols: fix possible use of uninitialized value

Nothing bad can come out of it, but for some reason this error didn't
return early (inherited from xkbcomp).
Also promote the log message to an error, as it clearly is.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agostate: Add xkb_state_key_get_consumed_mods
Jasper St. Pierre [Fri, 21 Feb 2014 23:09:00 +0000 (18:09 -0500)]
state: Add xkb_state_key_get_consumed_mods

This retrieves the mask of consumed modifiers for a given key and state,
which is helpful for toolkits without having them to do it one modifier
at a time, or pass in 0xFFFFFFFF to xkb_state_remove_consumed_mods to
"reverse-engineer" the consumed mods.

10 years agoaction: unify SetLatch and Lock handler functions
Ran Benita [Sun, 16 Feb 2014 16:32:44 +0000 (18:32 +0200)]
action: unify SetLatch and Lock handler functions

This is a little shorter and follows easier from the spec flag
description table.
Also a few were too permissive (like allowing LatchToLock in SetMods).

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoaction: add a common CheckBooleanFlag function
Ran Benita [Sun, 16 Feb 2014 08:20:32 +0000 (10:20 +0200)]
action: add a common CheckBooleanFlag function

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agokeymap: change action flag NO_ACCEL -> ACCEL
Ran Benita [Sun, 16 Feb 2014 08:59:42 +0000 (10:59 +0200)]
keymap: change action flag NO_ACCEL -> ACCEL

It's easier to deal with, but we need to set it as "factory default".

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agoaction: fix SwitchScreen "same" field handling
Ran Benita [Sun, 16 Feb 2014 08:22:32 +0000 (10:22 +0200)]
action: fix SwitchScreen "same" field handling

This used to *unset* a flag called "SwitchApplication"; we changed the
flag to "same" but forgot to switch the cases.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agokeymap-dump: add missing support for NoLock and NoUnlock flags
Ran Benita [Sat, 15 Feb 2014 21:50:21 +0000 (23:50 +0200)]
keymap-dump: add missing support for NoLock and NoUnlock flags

Based on a libxkbfile patch by Andreas Wettstein.

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agokeymap-dump: don't print "affect=lock" in PtrLock
Ran Benita [Sat, 15 Feb 2014 21:27:23 +0000 (23:27 +0200)]
keymap-dump: don't print "affect=lock" in PtrLock

It's the same as no flags, so might as well not print it.
(In fact it is slightly harmful, because it actively *clears* the affect
flags, which might have been set in some other manner. But in practice
this cannot happen).

Signed-off-by: Ran Benita <ran234@gmail.com>
10 years agokeymap-dump: unbreak some complex lines
Ran Benita [Sat, 15 Feb 2014 21:13:21 +0000 (23:13 +0200)]
keymap-dump: unbreak some complex lines

It's very hard to read as-is. Apologies for those reading over a VT100.

Signed-off-by: Ran Benita <ran234@gmail.com>
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>