Just some renames/moving/prefixing to conform to the style of the
other files.
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
- Use the number of groups we actually have instead of the maximum
number of groups, when wrapping according to group_wrap control.
- Be careful with negative relative group actions. The group fields of
xkb_state are all unsigned (and have a weird FIXME..), so don't use
them directly.
- Add the grp:ctrl_shift_toggle option to the rmlvo set to also test
locking the previous group (i.e. a negative relative group action).
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit introduces a new kmscon_input_event structure which is
delivered to the input consumer. The information provided is
- The evdev scancode (=physical keyboard key).
- The X keysym (a symbol representing what the typist really intended).
- The active modifiers (e.g. Shift, Control..)
- The unicode (UCS-4) value, when it makes sense.
To achieve this we add two dependencies:
- libxkbcommon (this entails xproto and kbproto, but shouldn't bring any of
big X dependencies)
- A function to translate keysyms to unicode values (taken from xlib,
copied in-tree).
libxkbcommon is not an all-around solution, and requires various degrees
of supporting code, depending on how much we wish to support. This
commit implements the common, basic uses:
- Choosing layouts, variants and options
- Switching groups
- Switching shift-levels
- Setting modifiers
Though some stuff is missing. Further information in the comments.
test_input.c is updated to use the new input event interface. You can
change the layouts in input.c:init_input() and see what works and what
doesn't.
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This is currently broken, anyway as we do not unref the object. However, if we
take a reference, then kmscon_input_unref() would never destroy the object as
there are still references. The caller would have to call kmscon_input_sleep()
first to have the desired effect.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We either need to adjust our filters to only receive inputX/eventY events or we
simply ignore all other events silently to avoid useless warnings.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The diff may look a bit wild but this mostly fixes coding style issues:
- sort includes alphabetically
- add missing includes
- rearrange structures/functions to avoid forward declarations
- adding "data" user-defineable field to input structure (for callbacks)
- correctly handle errors in device_data_arrived
- remove device_added/device_removed
- merge input_init into constructor
- add some log messages for debugging
- remove devices when wake-up fails
- set cb/data fields on eloop connection, not on initialization
- remove all devices when disconnecting eloop so the eloop is guaranteed to be
not used by the input subsystem after disconnection.
- some error handling fixes
- remove some TODOs which are correctly implemented
- Add O_NONBLOCK when opening the device node (I don't know how it actually
worked without it in the data_arrived callback)
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This does all the boring stuff for an input subsystem:
- Input device discovery using udev
- Input device hotplug (add/remove)
- Reading the evdev data from the devices
- Publishing input events to a callback through the eloop
- Suspending and resuming the input capture
Currently the delivered input events are basically just evdev's
"struct input_event" (type, code, value). More work is required to
have it pass out useful data.
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>