Bochs/bochs/patches/patch.kbd-dieter-for-1.2.1
Bryce Denney e0d36d3850 - added patch from Dieter Mittelmaier <dieter.mittelmaier@freenet.de>
that fixes problems on German keyboards.
2001-06-22 04:54:55 +00:00

532 lines
13 KiB
Groff

diff -urN bochs/gui/gui.h bochs_dieter/gui/gui.h
--- bochs/gui/gui.h Tue May 15 16:49:56 2001
+++ bochs_dieter/gui/gui.h Wed Jun 20 22:36:17 2001
@@ -93,114 +93,114 @@
#define BX_KEY_PRESSED 0x00000000
#define BX_KEY_RELEASED 0x80000000
-#define BX_KEY_CTRL_L 0
-#define BX_KEY_SHIFT_L 1
+#define BX_KEY_CTRL_L 37
+#define BX_KEY_SHIFT_L 50
-#define BX_KEY_F1 2
-#define BX_KEY_F2 3
-#define BX_KEY_F3 4
-#define BX_KEY_F4 5
-#define BX_KEY_F5 6
-#define BX_KEY_F6 7
-#define BX_KEY_F7 8
-#define BX_KEY_F8 9
-#define BX_KEY_F9 10
-#define BX_KEY_F10 11
-#define BX_KEY_F11 12
-#define BX_KEY_F12 13
-
-#define BX_KEY_CTRL_R 14
-#define BX_KEY_SHIFT_R 15
-#define BX_KEY_CAPS_LOCK 16
-#define BX_KEY_NUM_LOCK 17
-#define BX_KEY_ALT_L 18
-#define BX_KEY_ALT_R 19
-
-#define BX_KEY_A 20
-#define BX_KEY_B 21
-#define BX_KEY_C 22
-#define BX_KEY_D 23
-#define BX_KEY_E 24
-#define BX_KEY_F 25
-#define BX_KEY_G 26
-#define BX_KEY_H 27
-#define BX_KEY_I 28
-#define BX_KEY_J 29
-#define BX_KEY_K 30
-#define BX_KEY_L 31
-#define BX_KEY_M 32
-#define BX_KEY_N 33
-#define BX_KEY_O 34
-#define BX_KEY_P 35
-#define BX_KEY_Q 36
-#define BX_KEY_R 37
-#define BX_KEY_S 38
-#define BX_KEY_T 39
-#define BX_KEY_U 40
-#define BX_KEY_V 41
-#define BX_KEY_W 42
-#define BX_KEY_X 43
-#define BX_KEY_Y 44
-#define BX_KEY_Z 45
-
-#define BX_KEY_0 46
-#define BX_KEY_1 47
-#define BX_KEY_2 48
-#define BX_KEY_3 49
-#define BX_KEY_4 50
-#define BX_KEY_5 51
-#define BX_KEY_6 52
-#define BX_KEY_7 53
-#define BX_KEY_8 54
-#define BX_KEY_9 55
+#define BX_KEY_F1 67
+#define BX_KEY_F2 68
+#define BX_KEY_F3 69
+#define BX_KEY_F4 70
+#define BX_KEY_F5 71
+#define BX_KEY_F6 72
+#define BX_KEY_F7 73
+#define BX_KEY_F8 74
+#define BX_KEY_F9 75
+#define BX_KEY_F10 76
+#define BX_KEY_F11 95
+#define BX_KEY_F12 96
+
+#define BX_KEY_CTRL_R 109
+#define BX_KEY_SHIFT_R 62
+#define BX_KEY_CAPS_LOCK 66
+#define BX_KEY_NUM_LOCK 77
+#define BX_KEY_ALT_L 64
+#define BX_KEY_ALT_R 113
+
+#define BX_KEY_A 38
+#define BX_KEY_B 56
+#define BX_KEY_C 54
+#define BX_KEY_D 40
+#define BX_KEY_E 26
+#define BX_KEY_F 41
+#define BX_KEY_G 42
+#define BX_KEY_H 43
+#define BX_KEY_I 31
+#define BX_KEY_J 44
+#define BX_KEY_K 45
+#define BX_KEY_L 46
+#define BX_KEY_M 58
+#define BX_KEY_N 57
+#define BX_KEY_O 32
+#define BX_KEY_P 33
+#define BX_KEY_Q 24
+#define BX_KEY_R 27
+#define BX_KEY_S 39
+#define BX_KEY_T 28
+#define BX_KEY_U 30
+#define BX_KEY_V 55
+#define BX_KEY_W 25
+#define BX_KEY_X 53
+#define BX_KEY_Y 29
+#define BX_KEY_Z 52
+
+#define BX_KEY_0 19
+#define BX_KEY_1 10
+#define BX_KEY_2 11
+#define BX_KEY_3 12
+#define BX_KEY_4 13
+#define BX_KEY_5 14
+#define BX_KEY_6 15
+#define BX_KEY_7 16
+#define BX_KEY_8 17
+#define BX_KEY_9 18
-#define BX_KEY_ESC 56
+#define BX_KEY_ESC 9
-#define BX_KEY_SPACE 57
-#define BX_KEY_SINGLE_QUOTE 58
+#define BX_KEY_SPACE 65
+#define BX_KEY_SINGLE_QUOTE 48
#define BX_KEY_COMMA 59
#define BX_KEY_PERIOD 60
#define BX_KEY_SLASH 61
-#define BX_KEY_SEMICOLON 62
-#define BX_KEY_EQUALS 63
+#define BX_KEY_SEMICOLON 47
+#define BX_KEY_EQUALS 21
-#define BX_KEY_LEFT_BRACKET 64
-#define BX_KEY_BACKSLASH 65
-#define BX_KEY_RIGHT_BRACKET 66
-#define BX_KEY_MINUS 67
-#define BX_KEY_GRAVE 68
-
-#define BX_KEY_BACKSPACE 69
-#define BX_KEY_ENTER 70
-#define BX_KEY_TAB 71
-
-#define BX_KEY_INSERT 76
-#define BX_KEY_DELETE 77
-#define BX_KEY_HOME 78
-#define BX_KEY_END 79
-#define BX_KEY_PAGE_UP 80
-#define BX_KEY_PAGE_DOWN 81
-
-#define BX_KEY_KP_ADD 82
-#define BX_KEY_KP_SUBTRACT 83
-#define BX_KEY_KP_END 84
-#define BX_KEY_KP_DOWN 85
-#define BX_KEY_KP_PAGE_DOWN 86
-#define BX_KEY_KP_LEFT 87
-#define BX_KEY_KP_RIGHT 88
-#define BX_KEY_KP_HOME 89
-#define BX_KEY_KP_UP 90
-#define BX_KEY_KP_PAGE_UP 91
-#define BX_KEY_KP_INSERT 92
-#define BX_KEY_KP_DELETE 93
-#define BX_KEY_KP_5 94
-
-#define BX_KEY_UP 95
-#define BX_KEY_DOWN 96
-#define BX_KEY_LEFT 97
-#define BX_KEY_RIGHT 98
-
-#define BX_KEY_KP_ENTER 99
-#define BX_KEY_KP_MULTIPLY 100
-#define BX_KEY_KP_DIVIDE 101
+#define BX_KEY_LEFT_BRACKET 34
+#define BX_KEY_BACKSLASH 51
+#define BX_KEY_RIGHT_BRACKET 35
+#define BX_KEY_MINUS 20
+#define BX_KEY_GRAVE 49
+
+#define BX_KEY_BACKSPACE 22
+#define BX_KEY_ENTER 36
+#define BX_KEY_TAB 23
+
+#define BX_KEY_INSERT 106
+#define BX_KEY_DELETE 107
+#define BX_KEY_HOME 97
+#define BX_KEY_END 103
+#define BX_KEY_PAGE_UP 99
+#define BX_KEY_PAGE_DOWN 105
+
+#define BX_KEY_KP_ADD 86
+#define BX_KEY_KP_SUBTRACT 82
+#define BX_KEY_KP_END 87
+#define BX_KEY_KP_DOWN 88
+#define BX_KEY_KP_PAGE_DOWN 89
+#define BX_KEY_KP_LEFT 83
+#define BX_KEY_KP_RIGHT 85
+#define BX_KEY_KP_HOME 79
+#define BX_KEY_KP_UP 80
+#define BX_KEY_KP_PAGE_UP 81
+#define BX_KEY_KP_INSERT 90
+#define BX_KEY_KP_DELETE 91
+#define BX_KEY_KP_5 84
+
+#define BX_KEY_UP 98
+#define BX_KEY_DOWN 104
+#define BX_KEY_LEFT 100
+#define BX_KEY_RIGHT 102
+
+#define BX_KEY_KP_ENTER 108
+#define BX_KEY_KP_MULTIPLY 63
+#define BX_KEY_KP_DIVIDE 112
diff -urN bochs/gui/x.cc bochs_dieter/gui/x.cc
--- bochs/gui/x.cc Thu May 24 16:08:54 2001
+++ bochs_dieter/gui/x.cc Wed Jun 20 22:56:31 2001
@@ -102,137 +102,11 @@
static void headerbar_click(int x, int y);
static void send_keyboard_mouse_status(void);
-
-
-
-Bit32u ascii_to_key_event[0x5f] = {
- // !"#$%&'
- BX_KEY_SPACE,
- BX_KEY_1,
- BX_KEY_SINGLE_QUOTE,
- BX_KEY_3,
- BX_KEY_4,
- BX_KEY_5,
- BX_KEY_7,
- BX_KEY_SINGLE_QUOTE,
-
- // ()*+,-./
- BX_KEY_9,
- BX_KEY_0,
- BX_KEY_8,
- BX_KEY_EQUALS,
- BX_KEY_COMMA,
- BX_KEY_MINUS,
- BX_KEY_PERIOD,
- BX_KEY_SLASH,
-
- // 01234567
- BX_KEY_0,
- BX_KEY_1,
- BX_KEY_2,
- BX_KEY_3,
- BX_KEY_4,
- BX_KEY_5,
- BX_KEY_6,
- BX_KEY_7,
-
- // 89:;<=>?
- BX_KEY_8,
- BX_KEY_9,
- BX_KEY_SEMICOLON,
- BX_KEY_SEMICOLON,
- BX_KEY_COMMA,
- BX_KEY_EQUALS,
- BX_KEY_PERIOD,
- BX_KEY_SLASH,
-
- // @ABCDEFG
- BX_KEY_2,
- BX_KEY_A,
- BX_KEY_B,
- BX_KEY_C,
- BX_KEY_D,
- BX_KEY_E,
- BX_KEY_F,
- BX_KEY_G,
-
-
- // HIJKLMNO
- BX_KEY_H,
- BX_KEY_I,
- BX_KEY_J,
- BX_KEY_K,
- BX_KEY_L,
- BX_KEY_M,
- BX_KEY_N,
- BX_KEY_O,
-
-
- // PQRSTUVW
- BX_KEY_P,
- BX_KEY_Q,
- BX_KEY_R,
- BX_KEY_S,
- BX_KEY_T,
- BX_KEY_U,
- BX_KEY_V,
- BX_KEY_W,
-
- // XYZ[\]^_
- BX_KEY_X,
- BX_KEY_Y,
- BX_KEY_Z,
- BX_KEY_LEFT_BRACKET,
- BX_KEY_BACKSLASH,
- BX_KEY_RIGHT_BRACKET,
- BX_KEY_6,
- BX_KEY_MINUS,
-
- // `abcdefg
- BX_KEY_GRAVE,
- BX_KEY_A,
- BX_KEY_B,
- BX_KEY_C,
- BX_KEY_D,
- BX_KEY_E,
- BX_KEY_F,
- BX_KEY_G,
-
- // hijklmno
- BX_KEY_H,
- BX_KEY_I,
- BX_KEY_J,
- BX_KEY_K,
- BX_KEY_L,
- BX_KEY_M,
- BX_KEY_N,
- BX_KEY_O,
-
- // pqrstuvw
- BX_KEY_P,
- BX_KEY_Q,
- BX_KEY_R,
- BX_KEY_S,
- BX_KEY_T,
- BX_KEY_U,
- BX_KEY_V,
- BX_KEY_W,
-
- // xyz{|}~
- BX_KEY_X,
- BX_KEY_Y,
- BX_KEY_Z,
- BX_KEY_LEFT_BRACKET,
- BX_KEY_BACKSLASH,
- BX_KEY_RIGHT_BRACKET,
- BX_KEY_GRAVE
- };
-
extern Bit8u graphics_snapshot[32 * 1024];
static void load_font(void);
-static void xkeypress(KeySym keysym, int press_release);
+static void xkeypress(KeyCode keycode, int press_release);
// extern "C" void select_visual(void);
#define ROUNDUP(nbytes, pad) ((((nbytes) + ((pad)-1)) / (pad)) * ((pad)>>3))
@@ -533,6 +407,7 @@
XEvent report;
XKeyEvent *key_event;
KeySym keysym;
+ KeyCode keycode;
XComposeStatus compose;
char buffer[MAX_MAPPED_STRING_LENGTH];
int bufsize = MAX_MAPPED_STRING_LENGTH;
@@ -680,13 +555,15 @@
case KeyPress:
key_event = (XKeyEvent *) &report;
charcount = XLookupString(key_event, buffer, bufsize, &keysym, &compose);
- xkeypress(keysym, 0);
+ keycode = XKeysymToKeycode(bx_x_display, keysym);
+ xkeypress(keycode, 0);
break;
case KeyRelease:
key_event = (XKeyEvent *) &report;
charcount = XLookupString(key_event, buffer, bufsize, &keysym, &compose);
- xkeypress(keysym, 1);
+ keycode = XKeysymToKeycode(bx_x_display, keysym);
+ xkeypress(keycode, 1);
break;
case MotionNotify:
@@ -780,137 +657,13 @@
void
-xkeypress(KeySym keysym, int press_release)
+xkeypress(KeyCode keycode, int press_release)
{
Bit32u key_event;
-
-
-
-
- // this depends on the fact that the X11 keysyms which
- // correspond to the ascii characters space .. tilde
- // are in consequtive order.
- if ((keysym >= XK_space) && (keysym <= XK_asciitilde)) {
- key_event = ascii_to_key_event[keysym - XK_space];
- }
- else switch (keysym) {
- case XK_KP_1:
-#ifdef XK_KP_End
- case XK_KP_End:
-#endif
- key_event = BX_KEY_KP_END; break;
-
- case XK_KP_2:
-#ifdef XK_KP_Down
- case XK_KP_Down:
-#endif
- key_event = BX_KEY_KP_DOWN; break;
-
- case XK_KP_3:
-#ifdef XK_KP_Page_Down
- case XK_KP_Page_Down:
-#endif
- key_event = BX_KEY_KP_PAGE_DOWN; break;
-
- case XK_KP_4:
-#ifdef XK_KP_Left
- case XK_KP_Left:
-#endif
- key_event = BX_KEY_KP_LEFT; break;
-
- case XK_KP_5:
- key_event = BX_KEY_KP_5; break;
-
- case XK_KP_6:
-#ifdef XK_KP_Right
- case XK_KP_Right:
-#endif
- key_event = BX_KEY_KP_RIGHT; break;
-
- case XK_KP_7:
-#ifdef XK_KP_Home
- case XK_KP_Home:
-#endif
- key_event = BX_KEY_KP_HOME; break;
-
- case XK_KP_8:
-#ifdef XK_KP_Up
- case XK_KP_Up:
-#endif
- key_event = BX_KEY_KP_UP; break;
-
- case XK_KP_9:
-#ifdef XK_KP_Page_Up
- case XK_KP_Page_Up:
-#endif
- key_event = BX_KEY_KP_PAGE_UP; break;
-
- case XK_KP_0:
-#ifdef XK_KP_Insert
- case XK_KP_Insert:
- key_event = BX_KEY_KP_INSERT; break;
-#endif
-
- case XK_KP_Decimal:
-#ifdef XK_KP_Delete
- case XK_KP_Delete:
- key_event = BX_KEY_KP_DELETE; break;
-#endif
-
-#ifdef XK_KP_Enter
- case XK_KP_Enter:
- key_event = BX_KEY_KP_ENTER; break;
-#endif
-
- case XK_KP_Subtract: key_event = BX_KEY_KP_SUBTRACT; break;
- case XK_KP_Add: key_event = BX_KEY_KP_ADD; break;
-
- case XK_KP_Multiply: key_event = BX_KEY_KP_MULTIPLY; break;
- case XK_KP_Divide: key_event = BX_KEY_KP_DIVIDE; break;
-
-
- case XK_Up: key_event = BX_KEY_UP; break;
- case XK_Down: key_event = BX_KEY_DOWN; break;
- case XK_Left: key_event = BX_KEY_LEFT; break;
- case XK_Right: key_event = BX_KEY_RIGHT; break;
-
-
- case XK_Delete: key_event = BX_KEY_DELETE; break;
- case XK_BackSpace: key_event = BX_KEY_BACKSPACE; break;
- case XK_Tab: key_event = BX_KEY_TAB; break;
- case XK_Return: key_event = BX_KEY_ENTER; break;
- case XK_Escape: key_event = BX_KEY_ESC; break;
- case XK_F1: key_event = BX_KEY_F1; break;
- case XK_F2: key_event = BX_KEY_F2; break;
- case XK_F3: key_event = BX_KEY_F3; break;
- case XK_F4: key_event = BX_KEY_F4; break;
- case XK_F5: key_event = BX_KEY_F5; break;
- case XK_F6: key_event = BX_KEY_F6; break;
- case XK_F7: key_event = BX_KEY_F7; break;
- case XK_F8: key_event = BX_KEY_F8; break;
- case XK_F9: key_event = BX_KEY_F9; break;
- case XK_F10: key_event = BX_KEY_F10; break;
- case XK_F11: key_event = BX_KEY_F11; break;
- case XK_F12: key_event = BX_KEY_F12; break;
- case XK_Control_L: key_event = BX_KEY_CTRL_L; break;
- case XK_Shift_L: key_event = BX_KEY_SHIFT_L; break;
- case XK_Shift_R: key_event = BX_KEY_SHIFT_R; break;
- case XK_Caps_Lock: key_event = BX_KEY_CAPS_LOCK; break;
- case XK_Num_Lock: key_event = BX_KEY_NUM_LOCK; break;
- case XK_Alt_L: key_event = BX_KEY_ALT_L; break;
-
- case XK_Insert: key_event = BX_KEY_INSERT; break;
- case XK_Home: key_event = BX_KEY_HOME; break;
- case XK_End: key_event = BX_KEY_END; break;
- case XK_Page_Up: key_event = BX_KEY_PAGE_UP; break;
- case XK_Page_Down: key_event = BX_KEY_PAGE_DOWN; break;
-
- default:
- BX_ERROR(( "xkeypress(): keysym %x unhandled!\n", (unsigned) keysym ));
- return;
- break;
- }
+ //dieter
+ key_event = (unsigned) keycode;
+// BX_INFO(("keycode: %d\n", (unsigned) keycode));
if (press_release)
key_event |= BX_KEY_RELEASED;