From: Ian Jackson Date: Wed, 7 May 2008 14:11:07 +0000 (+0100) Subject: merge from in xen-unstable tip (17318:b5fea3aeb04b): record whether keys are shift... X-Git-Tag: xen-3.3.0-rc1~206 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=3bac5a861c8cd42d608b3fa8642d0623033d3077;p=qemu-xen-4.1-testing.git merge from in xen-unstable tip (17318:b5fea3aeb04b): record whether keys are shift as well as numlock, for the benefit of some fancier keymaps --- diff --git a/keymaps.c b/keymaps.c index 15c40fadc..0691d1e15 100644 --- a/keymaps.c +++ b/keymaps.c @@ -49,6 +49,7 @@ typedef struct { int extra_count; struct key_range *keypad_range; struct key_range *numlock_range; + struct key_range *shift_range; } kbd_layout_t; static void add_to_key_range(struct key_range **krp, int code) { @@ -127,6 +128,10 @@ static kbd_layout_t *parse_keyboard_layout(const char *language, add_to_key_range(&k->numlock_range, keysym); //fprintf(stderr, "keypad keysym %04x keycode %d\n", keysym, keycode); } + if (rest && strstr(rest, "shift")) { + add_to_key_range(&k->shift_range, keysym); + //fprintf(stderr, "shift keysym %04x keycode %d\n", keysym, keycode); + } /* if(keycode&0x80) keycode=(keycode<<8)^0x80e0; */ @@ -205,3 +210,14 @@ static inline int keysym_is_numlock(void *kbd_layout, int keysym) return 1; return 0; } + +static inline int keysym_is_shift(void *kbd_layout, int keysym) +{ + kbd_layout_t *k = kbd_layout; + struct key_range *kr; + + for (kr = k->shift_range; kr; kr = kr->next) + if (keysym >= kr->start && keysym <= kr->end) + return 1; + return 0; +}