]> git.proxmox.com Git - qemu.git/blobdiff - keymaps.c
qjson: Handle "\f"
[qemu.git] / keymaps.c
index 668556298ac1c88c36d6b98dd7f45cf486b36e24..78c7ea375cc9906c2ed8518d8428a2389d33f002 100644 (file)
--- a/keymaps.c
+++ b/keymaps.c
@@ -59,6 +59,29 @@ static void add_to_key_range(struct key_range **krp, int code) {
     }
 }
 
+static void add_keysym(char *line, int keysym, int keycode, kbd_layout_t *k) {
+    if (keysym < MAX_NORMAL_KEYCODE) {
+       //fprintf(stderr,"Setting keysym %s (%d) to %d\n",line,keysym,keycode);
+       k->keysym2keycode[keysym] = keycode;
+    } else {
+       if (k->extra_count >= MAX_EXTRA_COUNT) {
+           fprintf(stderr,
+                   "Warning: Could not assign keysym %s (0x%x) because of memory constraints.\n",
+                   line, keysym);
+       } else {
+#if 0
+           fprintf(stderr, "Setting %d: %d,%d\n",
+                   k->extra_count, keysym, keycode);
+#endif
+           k->keysym2keycode_extra[k->extra_count].
+               keysym = keysym;
+           k->keysym2keycode_extra[k->extra_count].
+               keycode = keycode;
+           k->extra_count++;
+       }
+    }
+}
+
 static kbd_layout_t *parse_keyboard_layout(const name2keysym_t *table,
                                           const char *language,
                                           kbd_layout_t * k)
@@ -111,27 +134,22 @@ static kbd_layout_t *parse_keyboard_layout(const name2keysym_t *table,
                        //fprintf(stderr, "keypad keysym %04x keycode %d\n", keysym, keycode);
                    }
 
-                   /* if(keycode&0x80)
-                      keycode=(keycode<<8)^0x80e0; */
-                   if (keysym < MAX_NORMAL_KEYCODE) {
-                       //fprintf(stderr,"Setting keysym %s (%d) to %d\n",line,keysym,keycode);
-                       k->keysym2keycode[keysym] = keycode;
-                   } else {
-                       if (k->extra_count >= MAX_EXTRA_COUNT) {
-                           fprintf(stderr,
-                                   "Warning: Could not assign keysym %s (0x%x) because of memory constraints.\n",
-                                   line, keysym);
-                       } else {
-#if 0
-                           fprintf(stderr, "Setting %d: %d,%d\n",
-                                   k->extra_count, keysym, keycode);
-#endif
-                           k->keysym2keycode_extra[k->extra_count].
-                               keysym = keysym;
-                           k->keysym2keycode_extra[k->extra_count].
-                               keycode = keycode;
-                           k->extra_count++;
-                       }
+                   if (rest && strstr(rest, "shift"))
+                       keycode |= SCANCODE_SHIFT;
+                   if (rest && strstr(rest, "altgr"))
+                       keycode |= SCANCODE_ALTGR;
+                   if (rest && strstr(rest, "ctrl"))
+                       keycode |= SCANCODE_CTRL;
+
+                   add_keysym(line, keysym, keycode, k);
+
+                   if (rest && strstr(rest, "addupper")) {
+                       char *c;
+                       for (c = line; *c; c++)
+                           *c = toupper(*c);
+                       keysym = get_keysym(table, line);
+                       if (keysym)
+                           add_keysym(line, keysym, keycode | SCANCODE_SHIFT, k);
                    }
                }
            }