From 8d28790ba495273b19d204fbb6dbdc9ac31ee3f9 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Fri, 30 Dec 2011 22:48:46 +0200 Subject: [PATCH] input: define our own modifiers Just a direct mapping to X modifiers for now (= Shift, Control, Lock, Mod1-5). This gives us more flexibility to adapt it to our needs in the future. Also we don't have to include libxkbcommon headers just for the modifier definitions. Signed-off-by: Ran Benita Signed-off-by: David Herrmann --- src/input.h | 13 ++++++++++++- src/input_xkb.c | 3 ++- tests/test_input.c | 20 ++++++++++---------- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/input.h b/src/input.h index f1fdf72..579716f 100644 --- a/src/input.h +++ b/src/input.h @@ -54,12 +54,23 @@ struct kmscon_input; +enum kmscon_modifier { + KMSCON_SHIFT_MASK = (1 << 0), + KMSCON_LOCK_MASK = (1 << 1), + KMSCON_CONTROL_MASK = (1 << 2), + KMSCON_MOD1_MASK = (1 << 3), + KMSCON_MOD2_MASK = (1 << 4), + KMSCON_MOD3_MASK = (1 << 5), + KMSCON_MOD4_MASK = (1 << 6), + KMSCON_MOD5_MASK = (1 << 7), +}; + #define KMSCON_INPUT_INVALID 0xffffffff struct kmscon_input_event { uint16_t keycode; /* linux keycode - KEY_* - linux/input.h */ uint32_t keysym; /* X keysym - XK_* - X11/keysym.h */ - uint8_t modifiers; /* xkbcommon modifiers - XKB_COMMON_*_MASK */ + unsigned int mods; /* active modifiers - kmscon_modifier mask */ uint32_t unicode; /* UCS-4 unicode value or KMSCON_INPUT_INVALID */ }; diff --git a/src/input_xkb.c b/src/input_xkb.c index 8a28c4a..ae479f9 100644 --- a/src/input_xkb.c +++ b/src/input_xkb.c @@ -701,7 +701,8 @@ bool kmscon_xkb_process_evdev_key(struct xkb_desc *desc, if (key_state != KMSCON_KEY_RELEASED) { out->keycode = code; out->keysym = sym; - out->modifiers = state->mods; + /* 1-to-1 match - this might change. */ + out->mods = state->mods; out->unicode = KeysymToUcs4(sym); if (out->unicode == 0) diff --git a/tests/test_input.c b/tests/test_input.c index 3bda398..0d349cc 100644 --- a/tests/test_input.c +++ b/tests/test_input.c @@ -62,23 +62,23 @@ static void sig_quit(struct kmscon_signal *sig, int signum, void *data) } } -static void print_modifiers(uint8_t mods) +static void print_modifiers(unsigned int mods) { - if (mods & XKB_COMMON_SHIFT_MASK) + if (mods & KMSCON_SHIFT_MASK) printf("SHIFT "); - if (mods & XKB_COMMON_LOCK_MASK) + if (mods & KMSCON_LOCK_MASK) printf("LOCK "); - if (mods & XKB_COMMON_CONTROL_MASK) + if (mods & KMSCON_CONTROL_MASK) printf("CONTROL "); - if (mods & XKB_COMMON_MOD1_MASK) + if (mods & KMSCON_MOD1_MASK) printf("MOD1 "); - if (mods & XKB_COMMON_MOD2_MASK) + if (mods & KMSCON_MOD2_MASK) printf("MOD2 "); - if (mods & XKB_COMMON_MOD3_MASK) + if (mods & KMSCON_MOD3_MASK) printf("MOD3 "); - if (mods & XKB_COMMON_MOD4_MASK) + if (mods & KMSCON_MOD4_MASK) printf("MOD4 "); - if (mods & XKB_COMMON_MOD5_MASK) + if (mods & KMSCON_MOD5_MASK) printf("MOD5 "); printf("\n"); } @@ -108,7 +108,7 @@ static void input_arrived(struct kmscon_input *input, printf("utf8 %s ", utf8); } - print_modifiers(ev->modifiers); + print_modifiers(ev->mods); } int main(int argc, char **argv)