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 <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
Ran Benita 2011-12-30 22:48:46 +02:00 committed by David Herrmann
parent 7c9fb7bf29
commit 8d28790ba4
3 changed files with 24 additions and 12 deletions

View File

@ -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 */
};

View File

@ -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)

View File

@ -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)