Commit Graph

1585 Commits (832e32dc6ccab1a310c1b1f8dbde26a0f09aa005)

Author SHA1 Message Date
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
Ran Benita 917c751523 context: remove mostly useless log wrappers
Just use xkb_log directly.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-01-12 14:37:39 +02:00
Ran Benita 101720a2bc parser: shutup some 'may be used uninitialized' warnings
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-01-12 13:18:39 +02:00
Ran Benita bbc69b6342 action, types: remove unused Report functions
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-01-12 11:26:16 +02:00
Hardening e77712bd27 Add a constant for NumLock
This trivial patch adds the name of the Numlock modifier
2014-01-11 17:29:02 +02:00
Ran Benita 4841ea0c29 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>
2014-01-11 17:01:39 +02:00
Ran Benita 31430670df 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>
2014-01-11 17:01:39 +02:00
Ran Benita 1d5ae2263a makekeys: mark keysym_names as static
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-01-11 00:26:58 +02:00
Ran Benita 51c9f8e24d 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>
2014-01-02 01:19:25 +02:00
Jasper St. Pierre 0628b9b2b3 makekeys: Add a gcc pragma to ignore -Woverlength-strings 2014-01-01 13:03:33 -05:00
Jasper St. Pierre eef3ab2364 makekeys: Put a comment describing the origin of the file 2014-01-01 13:03:32 -05:00
Jasper St. Pierre 68c61e7f7d ks_tables: Put all keysym names in one giant block
This makes the file take two segments instead of potentially many, causing
relocation issues.
2014-01-01 13:03:29 -05:00
Jasper St. Pierre 938a2c379b makekeys: Move all of the table generation to Python
This makes it easier to run the Python script manually.
2014-01-01 13:01:18 -05:00
Jasper St. Pierre 870913c234 makekeys: Remove some semis
Python doesn't have these
2014-01-01 13:01:18 -05:00
Ran Benita 53e7a135c2 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>
2014-01-01 10:40:09 +02:00
Ran Benita e18e760846 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>
2014-01-01 10:38:14 +02:00
Ran Benita 1e6e5669c6 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>
2013-12-14 17:47:12 +02:00
Ran Benita 9a3c115be0 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>
2013-12-02 17:41:49 +02:00
Ran Benita b246edc688 test/atom: add test for atom table
Mostly a random test.

Signed-off-by: Ran Benita <ran234@gmail.com>
2013-12-02 15:13:59 +02:00
Ran Benita 1374b50ed7 atom: tiny style fixes
Signed-off-by: Ran Benita <ran234@gmail.com>
2013-12-02 14:26:37 +02:00
Ran Benita 048ee7031d atom: allow passing NULLs to find_node_pointer()
Signed-off-by: Ran Benita <ran234@gmail.com>
2013-12-02 14:26:37 +02:00
Ran Benita d873693ba6 atom: allow interning empty string
Which is different than XKB_ATOM_NONE, as in "" != NULL.

Signed-off-by: Ran Benita <ran234@gmail.com>
2013-12-02 14:15:58 +02:00
Ran Benita 58345f4e9c atom: drop {xkb_,}atom_strdup
Even though in 112cccb18a I said it might
be useful, it's not. So remove it.

Signed-off-by: Ran Benita <ran234@gmail.com>
2013-12-02 14:14:41 +02:00
Ran Benita b63fa3b1e7 expr: make Expr creation naming and file location consistent
Signed-off-by: Ran Benita <ran234@gmail.com>
2013-12-01 13:32:51 +02:00
Ran Benita 07334f4db6 expr: add wrapper macro for ExprCreate
Signed-off-by: Ran Benita <ran234@gmail.com>
2013-12-01 13:29:30 +02:00
Ran Benita 972395b856 expr: split expression types and allocate them separately
Currently, we have one ExprDef type, which contains a tagged union with
the value of all expression types. Turns out, this union is quite
wasteful memory-wise. Instead, create separate types for all expressions
(e.g ExprBinary, ExprInteger) which embed the common fields
(ExprCommon), and malloc them per their size; ExprDef then becomes a
union of all these types, but is just used as a generic pointer.

[Instead of making ExprDef a union, another option is to use
ExprCommon as the generic pointer type and then do up-castings, like we
do with ParseCommon. But this makes the code much uglier.]

The diff is mostly straightforward mechanical adaptations. It could have
been much smaller with the help of C11 anonymous structs (which were
previously a gnu extension). This will have saved all of the 'op' ->
'expr->op', etc changes. But if we can be a bit more portable for a
little effort, we should.

Before (./test/rulescomp, x86 32 bit, -O2):
==12974==   total heap usage: 145,217 allocs, 145,217 frees, 10,476,238 bytes allocated

After:
==11145==   total heap usage: 145,217 allocs, 145,217 frees, 8,270,358 bytes allocated

Signed-off-by: Ran Benita <ran234@gmail.com>
2013-12-01 12:58:01 +02:00
Ran Benita 068016e4dd parser, symbols: drop unnecessary casts
It's casted into ExprDef and then uncasted for no reason.

Signed-off-by: Ran Benita <ran234@gmail.com>
2013-12-01 11:20:35 +02:00
Ran Benita 4a7bfb6844 expr: use ExprCreate in more places
Signed-off-by: Ran Benita <ran234@gmail.com>
2013-12-01 11:20:34 +02:00
Ran Benita fd98d64bba parser: remove 'uval' yylval type
We don't care about DoodadType.

Signed-off-by: Ran Benita <ran234@gmail.com>
2013-12-01 10:47:56 +02:00
Ran Benita c24b642025 expr: add constructor for boolean expressions
Also add a 'bool set' to the ExprDef union, instead of using 'ival' as a
bool.

Signed-off-by: Ran Benita <ran234@gmail.com>
2013-12-01 10:47:56 +02:00