]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Add new flag SHIFT
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 19 Aug 2010 00:21:36 +0000 (02:21 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 19 Aug 2010 00:21:36 +0000 (02:21 +0200)
include/grub/term.h
term/at_keyboard.c
term/usb_keyboard.c

index fa813d1b576e044dd5fe35566b011f2aaa6eba34..1f64bebc7605a43fbfa4ad37d365b45a403d2a26 100644 (file)
@@ -20,6 +20,8 @@
 #define GRUB_TERM_HEADER       1
 
 /* Internal codes used by GRUB to represent terminal input.  */
+/* Only for keys otherwise not having shifted modification.  */
+#define GRUB_TERM_SHIFT         0x01000000
 #define GRUB_TERM_CTRL          0x02000000
 #define GRUB_TERM_ALT           0x04000000
 /* Used by keylayouts code. Never returned in grub_getkey.  */
@@ -27,8 +29,8 @@
 #define GRUB_TERM_CAPS          0x10000000
 
 /* Keys without associated character.  */
-#define GRUB_TERM_EXTENDED      0x1000000
-#define GRUB_TERM_KEY_MASK      0x1ffffff
+#define GRUB_TERM_EXTENDED      0x00800000
+#define GRUB_TERM_KEY_MASK      0x00ffffff
 #define GRUB_TERM_KEY_LEFT      (GRUB_TERM_EXTENDED | 1)
 #define GRUB_TERM_KEY_RIGHT     (GRUB_TERM_EXTENDED | 2)
 #define GRUB_TERM_KEY_UP        (GRUB_TERM_EXTENDED | 3)
index 4c9c2a23a108dea96281c6fc6417f7eb972cf297..cc0c69e225c6fddf80e1af17af6aaecf0a303d89 100644 (file)
@@ -187,10 +187,14 @@ grub_at_keyboard_getkey_noblock (void)
        key = -1;
        break;
       default:
-       if ((at_keyboard_status & (KEYBOARD_STATUS_SHIFT_L
-                                  | KEYBOARD_STATUS_SHIFT_R))
-           && keyboard_map_shift[code])
-         key = keyboard_map_shift[code];
+       if (at_keyboard_status & (KEYBOARD_STATUS_SHIFT_L
+                                 | KEYBOARD_STATUS_SHIFT_R))
+         {
+           if (keyboard_map_shift[code])
+             key = keyboard_map_shift[code];
+           else
+             key = keyboard_map[code] | GRUB_TERM_SHIFT;
+         }
        else
          key = keyboard_map[code];
 
index e18f205e88cfc436db38d84b756ff8c0a97863cc..9e1ce5e60f5150cc1831074bb8b97cf5cf4de0c6 100644 (file)
@@ -162,10 +162,14 @@ grub_usb_keyboard_checkkey (struct grub_term_input *term __attribute__ ((unused)
 #define GRUB_USB_KEYBOARD_RIGHT_ALT   0x40
 
   /* Check if the Shift key was pressed.  */
-  if ((data[0] & GRUB_USB_KEYBOARD_LEFT_SHIFT
+  if (data[0] & GRUB_USB_KEYBOARD_LEFT_SHIFT
        || data[0] & GRUB_USB_KEYBOARD_RIGHT_SHIFT)
-      && keyboard_map_shift[data[2]])
-    key = keyboard_map_shift[data[2]];
+    {
+      if (keyboard_map_shift[data[2]])
+       key = keyboard_map_shift[data[2]];
+      else
+       key = keyboard_map[data[2]] | GRUB_TERM_SHIFT;
+    }
   else
     key = keyboard_map[data[2]];