Commit Graph

1145 Commits (2c259f178229ec8b71f8a62d4e23b7dbdac007c7)

Author SHA1 Message Date
Ran Benita 3d7aff5fcd keymap: rename wrap_group_into_range -> XkbWrapGroupIntoRange
It better fits with the naming convention in keymap.h.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-04-19 16:15:05 +03:00
Ran Benita 51a1df2f21 keymap: move ModNameToIndex from text.c and use it in keymap.c
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-04-19 16:12:26 +03:00
Ran Benita 120c5c317e symbols: separate ctx
Same as was done for compat and types.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-04-17 22:16:34 +03:00
Ran Benita 659eacc9fc compat: separate ctx
Same as was done for types.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-04-17 22:16:34 +03:00
Ran Benita 36cbecc5b5 types: separate ctx
Separate the ctx object to its own field in CompatInfo, instead of doing
keymap->ctx.

The compilation functions should not have direct access to the keymap;
instead they should process the files with their own independent state
(in the *Info structs) as much as possible, and only at the end should
they be copied (i.e. commited) to the keymap. If the compilation fails,
it leaves no by-products. It's also just good form.

This was seemingly the original author's intention, but I suppose he cut
a few corners (mostly with the handling of virtual modifiers, which are
threaded through types -> compat -> symbols).

This commit is the first step and may look artificial; however the
'keymap' field will be removed shortly.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-04-16 23:19:49 +03:00
Ran Benita 999f3792ac action: convert a few missed unsigned -> enum xkb_action_type
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-04-16 23:19:49 +03:00
Ran Benita 9c8fcee195 expr: fix handling of unknown integer binary operator
We can't reach the default branch but at least make it do something
sensible.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-04-16 21:25:40 +03:00
Ran Benita 5417440970 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>
2014-03-27 19:38:30 +02:00
Ran Benita 3cfa7fdac8 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>
2014-03-22 20:07:30 +02:00
Ran Benita b973d71e82 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>
2014-03-22 17:17:16 +02:00
Ran Benita 2bbaf7c7d1 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>
2014-03-22 02:10:28 +02:00
Ran Benita 3c14d23367 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>
2014-03-06 13:43:02 +02:00
Ran Benita caf8f3be98 symbols, keycodes: fix int return type when bool is intended
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-22 23:45:52 +02:00
Ran Benita 09bcf0ffc0 symbols: cleanup SetSymbolsField
Normalize the style and error message levels.

Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-22 23:45:52 +02:00
Ran Benita 35dea49b0a 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>
2014-02-22 23:45:31 +02:00
Jasper St. Pierre 4fb7b06b0f 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.
2014-02-22 02:23:37 +02:00
Ran Benita 1fa7d6d3ab 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>
2014-02-16 18:39:31 +02:00
Ran Benita af75353a88 action: add a common CheckBooleanFlag function
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-16 11:05:34 +02:00
Ran Benita 18191702ae 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>
2014-02-16 11:05:32 +02:00
Ran Benita af261cb605 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>
2014-02-16 11:05:17 +02:00
Ran Benita 8d3db622b8 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>
2014-02-15 23:50:21 +02:00
Ran Benita 11a9f76bf2 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>
2014-02-15 23:31:54 +02:00
Ran Benita be27b60306 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>
2014-02-15 23:13:21 +02:00
Ran Benita b95df2a6cc expr: simplify ExprResolveButton
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-15 22:59:12 +02:00
Ran Benita efe2880e85 action: don't pass a keymap where a ctx is sufficient
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-15 22:47:57 +02:00
Ran Benita 3acea3b3bb 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>
2014-02-15 22:47:57 +02:00
Ran Benita 477407f710 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>
2014-02-15 22:47:57 +02:00
Ran Benita 7c5e79159b 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>
2014-02-15 21:48:31 +02:00
Ran Benita 1b2bb204e0 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>
2014-02-14 00:37:15 +02:00
Ran Benita 6248b09feb 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>
2014-02-14 00:37:13 +02:00
Ran Benita d3d55f1c4e darray: fix indentation
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-12 11:07:39 +02:00
Ran Benita 5bd273a724 vmod: bring back support for direct vmod -> real mod mapping
This brings back the functionality that was removed in
b9c87eb710. 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>
2014-02-12 10:00:16 +02:00
Ran Benita e55a0cead1 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>
2014-02-10 20:57:27 +02:00
Ran Benita 28d5f7708c 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>
2014-02-10 20:33:34 +02:00
Ran Benita c4259ff268 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>
2014-02-10 15:18:22 +02:00
Ran Benita 2ecc0f8316 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>
2014-02-10 13:15:58 +02:00
Ran Benita c11f05e064 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>
2014-02-10 12:26:40 +02:00
Ran Benita 537564cb10 rules: include the path in failed-to-map error message
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-10 12:26:40 +02:00
Ran Benita 043eda874d context: fix wrong VARIANT instead of LAYOUT getenv
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-10 12:26:40 +02:00
Ran Benita 16aab829bb ast: remove unneeded 'ctx' param to XkbFileCreate
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-09 23:21:19 +02:00
Ran Benita 8be2608a26 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>
2014-02-09 18:02:11 +02:00
Ran Benita 27a245891b keymap: reduce padding in struct xkb_sym_interpret
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-09 17:49:30 +02:00
Ran Benita 71a2593162 symbols: steal keys and modmaps when merging if possible
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-09 17:20:32 +02:00
Ran Benita a7d753e45a compat: steal interps and leds when merging if possible
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-09 17:20:28 +02:00
Ran Benita 35cab168f7 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>
2014-02-09 16:49:45 +02:00
Ran Benita 3923aa71c2 doc: move some file comments into txt files in doc/
Signed-off-by: Ran Benita <ran234@gmail.com>
2014-02-09 14:09:44 +02:00
Ran Benita e89516e976 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>
2014-02-09 14:09:42 +02:00
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 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 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 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 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 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 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 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
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
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 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