]> xenbits.xensource.com Git - qemu-xen-4.6-testing.git/commitdiff
merge from in xen-unstable tip (17318:b5fea3aeb04b): record whether keys are shift...
authorIan Jackson <iwj@mariner.uk.xensource.com>
Wed, 7 May 2008 14:11:07 +0000 (15:11 +0100)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Mon, 12 May 2008 11:20:11 +0000 (12:20 +0100)
keymaps.c

index 15c40fadc1baab32309a74eb9f449f17779ede41..0691d1e15e1211279a8c146e8d70acb272a8c318 100644 (file)
--- 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;
+}