Someone asked for a copy in unified diff format. So, here's the version that also
translates F25-F32 into control-alt-shift (F1-F8). I don't know my way around the
rest of the tree to encode this cleanly as an option for winecfg.
--- wine-0.9.29/dlls/winex11.drv/keyboard.c 2007-01-09 09:42:47.000000000 -0600
+++ wine-0.9.29.patch/dlls/winex11.drv/keyboard.c 2007-01-22 14:18:23.000000000 -0600
@@ -1020,9 +1020,9 @@
/* function keys */
VK_F1, VK_F2,
VK_F3, VK_F4, VK_F5, VK_F6, VK_F7, VK_F8, VK_F9, VK_F10, /* FFC0 */
- VK_F11, VK_F12, VK_F13, VK_F14, VK_F15, VK_F16, 0, 0, /* FFC8 */
- 0, 0, 0, 0, 0, 0, 0, 0, /* FFD0 */
- 0, 0, 0, 0, 0, 0, 0, 0, /* FFD8 */
+ VK_F11, VK_F12, VK_F13, VK_F14, VK_F15, VK_F16, VK_F17, VK_F18, /* FFC8 */
+ VK_F19, VK_F20, VK_F21, VK_F22, VK_F23, VK_F24, VK_F25, VK_F26, /* FFD0 */
+ VK_F27, VK_F28, VK_F29, VK_F30, VK_F31, VK_F32, 0, 0, /* FFD8 */
/* modifier keys */
0, VK_SHIFT, VK_SHIFT, VK_CONTROL, /* FFE0 */
VK_CONTROL, VK_CAPITAL, 0, VK_MENU,
@@ -1066,8 +1066,8 @@
/* function keys */
0x3B, 0x3C,
0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, /* FFC0 */
- 0x57, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* FFC8 */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* FFD0 */
+ 0x57, 0x58, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, /* FFC8 */
+ 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x76, 0x00, 0x00, /* FFD0 */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* FFD8 */
/* modifier keys */
0x00, 0x2A, 0x36, 0x1D, 0x11D, 0x3A, 0x00, 0x38, /* FFE0 */
@@ -1465,7 +1465,35 @@
if ( event->type == KeyRelease ) dwFlags |= KEYEVENTF_KEYUP;
if ( vkey & 0x100 ) dwFlags |= KEYEVENTF_EXTENDEDKEY;
- X11DRV_send_keyboard_input( vkey & 0xff, bScan, dwFlags, event_time, 0, 0 );
+ if ((vkey & 0xFF) >= VK_F13 && (vkey & 0xFF) <= VK_F24) {
+ /* translate to control-alt-F(N-12) */
+ vkey = vkey - 12;
+ if (event->type != KeyRelease) {
+ X11DRV_send_keyboard_input(VK_MENU, 0, 0, event_time, 0, 0 );
+ X11DRV_send_keyboard_input(VK_CONTROL, 0, 0, event_time, 0, 0 );
+ }
+ X11DRV_send_keyboard_input( vkey & 0xff, bScan, dwFlags, event_time, 0, 0 );
+ if (event->type != KeyRelease) {
+ X11DRV_send_keyboard_input(VK_CONTROL, 0, KEYEVENTF_KEYUP, event_time, 0, 0 );
+ X11DRV_send_keyboard_input(VK_MENU, 0, KEYEVENTF_KEYUP, event_time, 0, 0 );
+ }
+ } else if ((vkey & 0xFF) >= VK_F25 && (vkey & 0xFF) <= VK_F32) {
+ /* translate to control-alt-shift-F(N-24) */
+ vkey = vkey - 24;
+ if (event->type != KeyRelease) {
+ X11DRV_send_keyboard_input(VK_MENU, 0, 0, event_time, 0, 0 );
+ X11DRV_send_keyboard_input(VK_CONTROL, 0, 0, event_time, 0, 0 );
+ X11DRV_send_keyboard_input(VK_SHIFT, 0, 0, event_time, 0, 0 );
+ }
+ X11DRV_send_keyboard_input( vkey & 0xff, bScan, dwFlags, event_time, 0, 0 );
+ if (event->type != KeyRelease) {
+ X11DRV_send_keyboard_input(VK_SHIFT, 0, KEYEVENTF_KEYUP, event_time, 0, 0 );
+ X11DRV_send_keyboard_input(VK_CONTROL, 0, KEYEVENTF_KEYUP, event_time, 0, 0 );
+ X11DRV_send_keyboard_input(VK_MENU, 0, KEYEVENTF_KEYUP, event_time, 0, 0 );
+ }
+ } else {
+ X11DRV_send_keyboard_input( vkey & 0xff, bScan, dwFlags, event_time, 0, 0 );
+ }
}
}
}
@@ -2253,8 +2281,10 @@
function keys. Soooo.. We will leave the table alone and
fudge the lookup here till the other part is found and fixed!!! */
- if ( ((scanCode >= 0x13b) && (scanCode <= 0x144)) ||
- (scanCode == 0x157) || (scanCode == 0x158))
+ if (((scanCode >= 0x13b) && (scanCode <= 0x144)) ||
+ ((scanCode >= 0x164) && (scanCode <= 0x16e)) ||
+ (scanCode == 0x157) || (scanCode == 0x158) ||
+ (scanCode == 0x176))
scanCode &= 0xff; /* remove "extended-key" flag for Fx keys */
/* let's do scancode -> keycode -> keysym -> String */
--- wine-0.9.29/include/winuser.h 2007-01-09 09:42:47.000000000 -0600
+++ wine-0.9.29.patch/include/winuser.h 2007-01-22 13:56:34.000000000 -0600
@@ -3595,7 +3595,14 @@
#define VK_F22 0x85
#define VK_F23 0x86
#define VK_F24 0x87
-/* 0x88-0x8F Unassigned */
+#define VK_F25 0x88
+#define VK_F26 0x89
+#define VK_F27 0x8A
+#define VK_F28 0x8B
+#define VK_F29 0x8C
+#define VK_F30 0x8D
+#define VK_F31 0x8E
+#define VK_F32 0x8F
#define VK_NUMLOCK 0x90
#define VK_SCROLL 0x91
#define VK_OEM_NEC_EQUAL 0x92