Commit Graph

1964 Commits (db985753277c705b805e9d20e2c6b1245a2781b1)

Author SHA1 Message Date
Ran Benita d53eef0d94 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>
2014-02-09 14:05:59 +02:00
Ran Benita 032f8b67f5 Remove m4/.gitkeep
Now there's a file in there.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-08 22:44:59 +02:00
Ran Benita 3d56aa3e60 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>
2014-02-08 17:58:39 +02:00
Ran Benita 68b0309792 scanner: make line and column unsigned
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-08 17:22:14 +02:00
Ran Benita cf513f70a2 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>
2014-02-08 17:15:37 +02:00
Ran Benita 973b8fd47e 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>
2014-02-08 16:40:20 +02:00
Ran Benita 8cc9434fd2 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>
2014-02-08 16:38:18 +02:00
Ran Benita ac42103b0d x11: make some #defines unsigned
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-08 16:25:22 +02:00
Ran Benita 8fcb44b8a6 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>
2014-02-08 16:19:47 +02:00
Ran Benita f5465b56a3 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>
2014-02-08 16:12:09 +02:00
Ran Benita a088c9ba77 keysym: fix types in bin_search
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-08 16:03:06 +02:00
Ran Benita 04bacf87ba 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>
2014-02-08 15:57:22 +02:00
Ran Benita 769b91c580 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>
2014-02-08 15:30:05 +02:00
Ran Benita 50b73ec0e7 Use unsigned int for saving darray_size return value
See: b9b3593cbd
So these should be unsigned int's now.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-08 15:10:09 +02:00
Ran Benita e2c336cb96 action: fix misleading cast
The type is uint8_t and so is the checked range.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-08 15:06:28 +02:00
Ran Benita bbd2a9c048 action: fix printing of underflowed value in error message
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-08 15:05:05 +02:00
Ran Benita 27e2066229 scanner-utils: add some likely/unlikely annotations
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-08 12:42:17 +02:00
Ran Benita 10643d8aa4 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>
2014-02-08 12:42:16 +02:00
Ran Benita 0e20cfed67 Partially revert "ast: pack the ParseCommon struct"
This reverts commit 1e6e5669c6.

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>
2014-02-08 02:02:32 +02:00
Ran Benita 8aa2202d9d 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>
2014-02-08 01:51:38 +02:00
Ran Benita 6ea15719d1 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>
2014-02-08 01:50:22 +02:00
Ran Benita b9b3593cbd 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>
2014-02-08 01:50:22 +02:00
Ran Benita 94e0be0dc7 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>
2014-02-08 00:54:53 +02:00
Ran Benita 623b10f8c5 Fix sign-compare warnings
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-08 00:54:53 +02:00
Ran Benita 893f01301b symbols: reduce some loop iterators scope
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-08 00:19:12 +02:00
Ran Benita 5547a82f2a 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>
2014-02-08 00:11:44 +02:00
Ran Benita 5dbd136435 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>
2014-02-08 00:11:42 +02:00
Ran Benita fa87cdb8bd 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>
2014-02-08 00:10:56 +02:00
Ran Benita 6f2df7df8c ast: make symsMapIndex unsigned
It doesn't need to be signed.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-08 00:10:56 +02:00
Ran Benita e9e3993221 action: Use ResolveInteger for PtrBtn.count, not ResolveButton
It's not a button.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-07 18:51:35 +02:00
Ran Benita e0137caceb action: check range of MovePtr X,Y values
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-07 18:48:16 +02:00
Ran Benita b82a0a8650 scanner: avoid strlen in keyword lookup, we know the len
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-07 18:12:29 +02:00
Ran Benita 2abff2a098 state: use the XKB_MOD_MASK constant
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-07 17:29:34 +02:00
Ran Benita ed18f7dde6 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>
2014-02-07 17:13:03 +02:00
Ran Benita 125bb19ede x11: add explicit cast in mods conversion
Explicit is better and all.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-07 17:11:49 +02:00
Ran Benita 623602cb78 test: don't print control characters in interactive tests
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-07 01:35:56 +02:00
Ran Benita 779eec3b8b x11: add missing #ifdef __cplusplus to header
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-04 22:18:12 +02:00
Ran Benita 109fe7059c 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>
2014-02-04 02:53:05 +02:00
Ran Benita bdd8c113a5 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>
2014-02-04 02:52:31 +02:00
Ran Benita be16858c92 Bump version to 0.4.0
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-02 12:13:26 +02:00
Ran Benita a15b4a5535 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>
2014-02-02 12:08:43 +02:00
Ran Benita 87e0e47462 Update NEWS
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-02 12:05:35 +02:00
Ran Benita 70717c5686 build: add configure summary
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-02 11:21:18 +02:00
Ran Benita 2f93c78894 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>
2014-02-02 11:16:40 +02:00
Ran Benita eb34825560 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>
2014-02-02 11:16:40 +02:00
Ran Benita ddbefda383 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>
2014-01-13 18:24:24 +02:00
Ran Benita a9c56f643d context: split private functions to context-priv.c
(Same as keymap-priv.c).

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-01-13 17:22:15 +02:00
Ran Benita 7210497c63 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>
2014-01-13 17:22:02 +02:00
Ran Benita 4884a8e636 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>
2014-01-13 17:21:56 +02:00
Ran Benita d63e0ab838 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>
2014-01-13 17:21:56 +02:00