From 43f87b4a0f47c43b5cffc754f56372ee5331ff24 Mon Sep 17 00:00:00 2001 From: Harold L Hunt II Date: Sat, 3 Apr 2004 22:21:56 +0000 Subject: [PATCH] Properly pass Alt+Tab to X. Setup handling for VK_LWIN and VK_RWIN, but these aren't in our modmap yet (XK_Super_L, XK_Super_R) nor are they in our keymap yet, so pressing the Windows key still does nothing. --- hw/xwin/winglobals.c | 2 + hw/xwin/winkeybd.c | 12 +- hw/xwin/winkeyhook.c | 54 ++++++-- hw/xwin/winkeymap.h | 285 ------------------------------------------ hw/xwin/winkeynames.h | 1 - hw/xwin/winwndproc.c | 7 ++ 6 files changed, 62 insertions(+), 299 deletions(-) diff --git a/hw/xwin/winglobals.c b/hw/xwin/winglobals.c index d0e454508..e749c9d37 100644 --- a/hw/xwin/winglobals.c +++ b/hw/xwin/winglobals.c @@ -62,6 +62,7 @@ Bool g_fUseMsg = FALSE; DWORD g_dwCurrentThreadID = 0; Bool g_fKeyboardHookLL = FALSE; HHOOK g_hhookKeyboardLL = NULL; +HWND g_hwndKeyboardFocus = NULL; /* @@ -111,6 +112,7 @@ void winInitializeGlobals (void) { g_dwCurrentThreadID = GetCurrentThreadId (); + g_hwndKeyboardFocus = NULL; #ifdef XWIN_CLIPBOARD g_fClipboardLaunched = FALSE; g_fClipboardStarted = FALSE; diff --git a/hw/xwin/winkeybd.c b/hw/xwin/winkeybd.c index 1d68d72f5..f9cb6709d 100644 --- a/hw/xwin/winkeybd.c +++ b/hw/xwin/winkeybd.c @@ -42,7 +42,6 @@ #define XKB_IN_SERVER #include "XKBsrv.h" #endif -#include "../../Xext/xf86miscproc.h" static Bool g_winKeyState[NUM_KEYCODES]; @@ -130,11 +129,18 @@ winGetKeyMappings (KeySymsPtr pKeySyms, CARD8 *pModMap) pModMap[i] = ScrollLockMask; break; +#if 0 + case XK_Super_L: + case XK_Super_R: + pModMap[i] = Mod4Mask; + break; +#else /* Hirigana/Katakana toggle */ case XK_Kana_Lock: case XK_Kana_Shift: pModMap[i] = KanaMask; break; +#endif /* alternate toggle for multinational support */ case XK_Mode_switch: @@ -268,8 +274,6 @@ winKeybdProc (DeviceIntPtr pDeviceInt, int iState) } #endif - - g_winInternalModeKeyStatesPtr = &(pDeviceInt->key->state); break; @@ -415,7 +419,7 @@ winIsFakeCtrl_L (UINT message, WPARAM wParam, LPARAM lParam) /* Get time of current message */ lTime = GetMessageTime (); - + /* Look for fake Ctrl_L preceeding an Alt_R press. */ fReturn = PeekMessage (&msgNext, NULL, WM_KEYDOWN, WM_KEYDOWN, diff --git a/hw/xwin/winkeyhook.c b/hw/xwin/winkeyhook.c index ce2d7ff9e..96b74756b 100755 --- a/hw/xwin/winkeyhook.c +++ b/hw/xwin/winkeyhook.c @@ -37,6 +37,7 @@ extern HHOOK g_hhookKeyboardLL; extern DWORD g_dwCurrentThreadID; +extern HWND g_hwndKeyboardFocus; /* @@ -47,6 +48,14 @@ static LRESULT CALLBACK winKeyboardMessageHookLL (int iCode, WPARAM wParam, LPARAM lParam); +#ifndef LLKHF_EXTENDED +# define LLKHF_EXTENDED 0x00000001 +#endif +#ifndef LLKHF_UP +# define LLKHF_UP 0x00000080 +#endif + + /* * KeyboardMessageHook */ @@ -54,26 +63,53 @@ winKeyboardMessageHookLL (int iCode, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK winKeyboardMessageHookLL (int iCode, WPARAM wParam, LPARAM lParam) { - BOOL fEatKeystroke = FALSE; + BOOL fPassKeystroke = FALSE; PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam; - /* Swallow keystrokes only for our app */ + /* Pass keystrokes on to our main message loop */ if (iCode == HC_ACTION) { switch (wParam) { case WM_KEYDOWN: case WM_SYSKEYDOWN: case WM_KEYUP: case WM_SYSKEYUP: - p = (PKBDLLHOOKSTRUCT) lParam; - - fEatKeystroke = - (p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0); + fPassKeystroke = + (p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0) + || (p->vkCode == VK_LWIN) || (p->vkCode == VK_RWIN); break; } } - - return (fEatKeystroke ? 1 : CallNextHookEx (NULL, iCode, wParam, - lParam)); + + /* + * Pass message on to our main message loop. + * We process this immediately with SendMessage so that the keystroke + * appears in, hopefully, the correct order. + */ + if (fPassKeystroke) + { + LPARAM lParamKey = 0x0; + + /* Construct the lParam from KBDLLHOOKSTRUCT */ + lParamKey = lParamKey | (0x0000FFFF & 0x00000001); /* Repeat count */ + lParamKey = lParamKey | (0x00FF0000 & (p->scanCode << 16)); + lParamKey = lParamKey + | (0x01000000 & ((p->flags & LLKHF_EXTENDED) << 23)); + lParamKey = lParamKey + | (0x20000000 + & ((p->flags & LLKHF_ALTDOWN) << 24)); + lParamKey = lParamKey | (0x80000000 & ((p->flags & LLKHF_UP) << 24)); + + /* Send message to our main window that has the keyboard focus */ + PostMessage (g_hwndKeyboardFocus, + (UINT) wParam, + (WPARAM) p->vkCode, + lParamKey); + + return 1; + } + + /* Call next hook */ + return CallNextHookEx (NULL, iCode, wParam, lParam); } diff --git a/hw/xwin/winkeymap.h b/hw/xwin/winkeymap.h index 562b85407..31e6cf21b 100755 --- a/hw/xwin/winkeymap.h +++ b/hw/xwin/winkeymap.h @@ -7,9 +7,6 @@ /* $XConsortium: xf86Keymap.h /main/14 1996/02/21 17:38:47 kaleb $ */ static KeySym map[NUM_KEYCODES * GLYPHS_PER_KEY] = { - -#if !defined(__SOL8__) && (!defined(sun) || defined(i386)) - /* 0x00 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, /* 0x01 */ XK_Escape, NoSymbol, NoSymbol, NoSymbol, /* 0x02 */ XK_1, XK_exclam, NoSymbol, NoSymbol, @@ -138,286 +135,4 @@ static KeySym map[NUM_KEYCODES * GLYPHS_PER_KEY] = { /* 0x7d */ XK_backslash, XK_bar, NoSymbol, NoSymbol, /* 0x7e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, /* 0x7f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - -#else /* SunOS */ - -/* Assumes a US English keyboard as default - sorry 'bout that - * - * Hopefully it'll be enough someone can have a sorta working - * keyboard, if they're not using XKB - * - * DWH 9/12/99 - */ - - /* 0x00 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x01 */ XK_quoteleft, XK_asciitilde, NoSymbol, NoSymbol, - /* 0x02 */ XK_1, XK_exclam, NoSymbol, NoSymbol, - /* 0x03 */ XK_2, XK_at, NoSymbol, NoSymbol, - /* 0x04 */ XK_3, XK_numbersign, NoSymbol, NoSymbol, - /* 0x05 */ XK_4, XK_dollar, NoSymbol, NoSymbol, - /* 0x06 */ XK_5, XK_percent, NoSymbol, NoSymbol, - /* 0x07 */ XK_6, XK_asciicircum, NoSymbol, NoSymbol, - /* 0x08 */ XK_7, XK_ampersand, NoSymbol, NoSymbol, - /* 0x09 */ XK_8, XK_asterisk, NoSymbol, NoSymbol, - /* 0x0a */ XK_9, XK_parenleft, NoSymbol, NoSymbol, - /* 0x0b */ XK_0, XK_parenright, NoSymbol, NoSymbol, - /* 0x0c */ XK_minus, XK_underscore, NoSymbol, NoSymbol, - /* 0x0d */ XK_equal, XK_plus, NoSymbol, NoSymbol, - /* 0x0e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x0f */ XK_BackSpace, NoSymbol, NoSymbol, NoSymbol, - /* 0x10 */ XK_Tab, NoSymbol, NoSymbol, NoSymbol, - /* 0x11 */ XK_Q, NoSymbol, NoSymbol, NoSymbol, - /* 0x12 */ XK_W, NoSymbol, NoSymbol, NoSymbol, - /* 0x13 */ XK_E, NoSymbol, NoSymbol, NoSymbol, - /* 0x14 */ XK_R, NoSymbol, NoSymbol, NoSymbol, - /* 0x15 */ XK_T, NoSymbol, NoSymbol, NoSymbol, - /* 0x16 */ XK_Y, NoSymbol, NoSymbol, NoSymbol, - /* 0x17 */ XK_U, NoSymbol, NoSymbol, NoSymbol, - /* 0x18 */ XK_I, NoSymbol, NoSymbol, NoSymbol, - /* 0x19 */ XK_O, NoSymbol, NoSymbol, NoSymbol, - /* 0x1a */ XK_P, NoSymbol, NoSymbol, NoSymbol, - /* 0x1b */ XK_bracketleft, XK_braceleft, NoSymbol, NoSymbol, - /* 0x1c */ XK_bracketright,XK_braceright, NoSymbol, NoSymbol, - /* 0x1d */ XK_backslash, XK_bar, NoSymbol, NoSymbol, - /* 0x1e */ XK_Caps_Lock, NoSymbol, NoSymbol, NoSymbol, - /* 0x1f */ XK_A, NoSymbol, NoSymbol, NoSymbol, - /* 0x20 */ XK_S, NoSymbol, NoSymbol, NoSymbol, - /* 0x21 */ XK_D, NoSymbol, NoSymbol, NoSymbol, - /* 0x22 */ XK_F, NoSymbol, NoSymbol, NoSymbol, - /* 0x23 */ XK_G, NoSymbol, NoSymbol, NoSymbol, - /* 0x24 */ XK_H, NoSymbol, NoSymbol, NoSymbol, - /* 0x25 */ XK_J, NoSymbol, NoSymbol, NoSymbol, - /* 0x26 */ XK_K, NoSymbol, NoSymbol, NoSymbol, - /* 0x27 */ XK_L, NoSymbol, NoSymbol, NoSymbol, - /* 0x28 */ XK_semicolon, XK_colon, NoSymbol, NoSymbol, - /* 0x29 */ XK_quoteright, XK_quotedbl, NoSymbol, NoSymbol, - /* 0x2a */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x2b */ XK_Return, NoSymbol, NoSymbol, NoSymbol, - /* 0x2c */ XK_Shift_L, NoSymbol, NoSymbol, NoSymbol, - /* 0x2d */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x2e */ XK_Z, NoSymbol, NoSymbol, NoSymbol, - /* 0x2f */ XK_X, NoSymbol, NoSymbol, NoSymbol, - /* 0x30 */ XK_C, NoSymbol, NoSymbol, NoSymbol, - /* 0x31 */ XK_V, NoSymbol, NoSymbol, NoSymbol, - /* 0x32 */ XK_B, NoSymbol, NoSymbol, NoSymbol, - /* 0x33 */ XK_N, NoSymbol, NoSymbol, NoSymbol, - /* 0x34 */ XK_M, NoSymbol, NoSymbol, NoSymbol, - /* 0x35 */ XK_comma, XK_less, NoSymbol, NoSymbol, - /* 0x36 */ XK_period, XK_greater, NoSymbol, NoSymbol, - /* 0x37 */ XK_slash, XK_question, NoSymbol, NoSymbol, - /* 0x38 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x39 */ XK_Shift_R, NoSymbol, NoSymbol, NoSymbol, - /* 0x3a */ XK_Control_L, NoSymbol, NoSymbol, NoSymbol, - /* 0x3b */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x3c */ XK_Alt_L, XK_Meta_L, NoSymbol, NoSymbol, - /* 0x3d */ XK_space, NoSymbol, NoSymbol, NoSymbol, - /* 0x3e */ XK_Alt_R, XK_Meta_R, NoSymbol, NoSymbol, - /* 0x3f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x40 */ XK_Control_R, NoSymbol, NoSymbol, NoSymbol, - /* 0x41 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x42 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x43 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x44 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x45 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x46 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x47 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x48 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x49 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x4a */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x4b */ XK_Insert, NoSymbol, NoSymbol, NoSymbol, - /* 0x4c */ XK_Delete, NoSymbol, NoSymbol, NoSymbol, - /* 0x4d */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x4e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x4f */ XK_Left, NoSymbol, NoSymbol, NoSymbol, - /* 0x50 */ XK_Home, NoSymbol, NoSymbol, NoSymbol, - /* 0x51 */ XK_End, NoSymbol, NoSymbol, NoSymbol, - /* 0x52 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x53 */ XK_Up, NoSymbol, NoSymbol, NoSymbol, - /* 0x54 */ XK_Down, NoSymbol, NoSymbol, NoSymbol, - /* 0x55 */ XK_Prior, NoSymbol, NoSymbol, NoSymbol, - /* 0x56 */ XK_Next, NoSymbol, NoSymbol, NoSymbol, - /* 0x57 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x58 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x59 */ XK_Right, NoSymbol, NoSymbol, NoSymbol, - /* 0x5a */ XK_Num_Lock, NoSymbol, NoSymbol, NoSymbol, - /* 0x5b */ XK_KP_Home, XK_KP_7, NoSymbol, NoSymbol, - /* 0x5c */ XK_KP_Left, XK_KP_4, NoSymbol, NoSymbol, - /* 0x5d */ XK_KP_End, XK_KP_1, NoSymbol, NoSymbol, - /* 0x5e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x5f */ XK_KP_Divide, NoSymbol, NoSymbol, NoSymbol, - /* 0x60 */ XK_KP_Up, XK_KP_8, NoSymbol, NoSymbol, - /* 0x61 */ NoSymbol, XK_KP_5, NoSymbol, NoSymbol, - /* 0x62 */ XK_KP_Down, XK_KP_2, NoSymbol, NoSymbol, - /* 0x63 */ XK_KP_Insert, XK_KP_0, NoSymbol, NoSymbol, - /* 0x64 */ XK_KP_Multiply, NoSymbol, NoSymbol, NoSymbol, - /* 0x65 */ XK_KP_Prior, XK_KP_9, NoSymbol, NoSymbol, - /* 0x66 */ XK_KP_Right, XK_KP_6, NoSymbol, NoSymbol, - /* 0x67 */ XK_KP_Next, XK_KP_3, NoSymbol, NoSymbol, - /* 0x68 */ XK_KP_Delete, XK_KP_Decimal, NoSymbol, NoSymbol, - /* 0x69 */ XK_KP_Subtract, NoSymbol, NoSymbol, NoSymbol, - /* 0x6a */ XK_KP_Add, NoSymbol, NoSymbol, NoSymbol, - /* 0x6b */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x6c */ XK_KP_Enter, NoSymbol, NoSymbol, NoSymbol, - /* 0x6d */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x6e */ XK_Escape, NoSymbol, NoSymbol, NoSymbol, - /* 0x6f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x70 */ XK_F1, NoSymbol, NoSymbol, NoSymbol, - /* 0x71 */ XK_F2, NoSymbol, NoSymbol, NoSymbol, - /* 0x72 */ XK_F3, NoSymbol, NoSymbol, NoSymbol, - /* 0x73 */ XK_F4, NoSymbol, NoSymbol, NoSymbol, - /* 0x74 */ XK_F5, NoSymbol, NoSymbol, NoSymbol, - /* 0x75 */ XK_F6, NoSymbol, NoSymbol, NoSymbol, - /* 0x76 */ XK_F7, NoSymbol, NoSymbol, NoSymbol, - /* 0x77 */ XK_F8, NoSymbol, NoSymbol, NoSymbol, - /* 0x78 */ XK_F9, NoSymbol, NoSymbol, NoSymbol, - /* 0x79 */ XK_F10, NoSymbol, NoSymbol, NoSymbol, - /* 0x7a */ XK_F11, NoSymbol, NoSymbol, NoSymbol, - /* 0x7b */ XK_F12, NoSymbol, NoSymbol, NoSymbol, - /* 0x7c */ XK_Print, NoSymbol, NoSymbol, NoSymbol, - /* 0x7d */ XK_Scroll_Lock, NoSymbol, NoSymbol, NoSymbol, - /* 0x7e */ XK_Pause, NoSymbol, NoSymbol, NoSymbol, - /* 0x7f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - -#endif /* SunOS */ - }; - -#if !defined(Lynx) && \ - !defined(__UNIXOS2__) && \ - !defined(__mips__) && \ - !defined(linux) && \ - !defined(CSRG_BASED) && \ - !defined(__CYGWIN__) && \ - !defined(__SOL8__) && \ - (!defined(sun) || defined(i386)) - -static KeySym map84[NUM_KEYCODES * GLYPHS_PER_KEY] = { - /* 0x00 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x01 */ XK_Escape, NoSymbol, NoSymbol, NoSymbol, - /* 0x02 */ XK_1, XK_exclam, NoSymbol, NoSymbol, - /* 0x03 */ XK_2, XK_at, NoSymbol, NoSymbol, - /* 0x04 */ XK_3, XK_numbersign, NoSymbol, NoSymbol, - /* 0x05 */ XK_4, XK_dollar, NoSymbol, NoSymbol, - /* 0x06 */ XK_5, XK_percent, NoSymbol, NoSymbol, - /* 0x07 */ XK_6, XK_asciicircum, NoSymbol, NoSymbol, - /* 0x08 */ XK_7, XK_ampersand, NoSymbol, NoSymbol, - /* 0x09 */ XK_8, XK_asterisk, NoSymbol, NoSymbol, - /* 0x0a */ XK_9, XK_parenleft, NoSymbol, NoSymbol, - /* 0x0b */ XK_0, XK_parenright, NoSymbol, NoSymbol, - /* 0x0c */ XK_minus, XK_underscore, NoSymbol, NoSymbol, - /* 0x0d */ XK_equal, XK_plus, NoSymbol, NoSymbol, - /* 0x0e */ XK_BackSpace, NoSymbol, NoSymbol, NoSymbol, - /* 0x0f */ XK_Tab, NoSymbol, NoSymbol, NoSymbol, - /* 0x10 */ XK_Q, NoSymbol, NoSymbol, NoSymbol, - /* 0x11 */ XK_W, NoSymbol, NoSymbol, NoSymbol, - /* 0x12 */ XK_E, NoSymbol, NoSymbol, NoSymbol, - /* 0x13 */ XK_R, NoSymbol, NoSymbol, NoSymbol, - /* 0x14 */ XK_T, NoSymbol, NoSymbol, NoSymbol, - /* 0x15 */ XK_Y, NoSymbol, NoSymbol, NoSymbol, - /* 0x16 */ XK_U, NoSymbol, NoSymbol, NoSymbol, - /* 0x17 */ XK_I, NoSymbol, NoSymbol, NoSymbol, - /* 0x18 */ XK_O, NoSymbol, NoSymbol, NoSymbol, - /* 0x19 */ XK_P, NoSymbol, NoSymbol, NoSymbol, - /* 0x1a */ XK_bracketleft, XK_braceleft, NoSymbol, NoSymbol, - /* 0x1b */ XK_bracketright,XK_braceright, NoSymbol, NoSymbol, - /* 0x1c */ XK_Return, NoSymbol, NoSymbol, NoSymbol, - /* 0x1d */ XK_Control_L, NoSymbol, NoSymbol, NoSymbol, - /* 0x1e */ XK_A, NoSymbol, NoSymbol, NoSymbol, - /* 0x1f */ XK_S, NoSymbol, NoSymbol, NoSymbol, - /* 0x20 */ XK_D, NoSymbol, NoSymbol, NoSymbol, - /* 0x21 */ XK_F, NoSymbol, NoSymbol, NoSymbol, - /* 0x22 */ XK_G, NoSymbol, NoSymbol, NoSymbol, - /* 0x23 */ XK_H, NoSymbol, NoSymbol, NoSymbol, - /* 0x24 */ XK_J, NoSymbol, NoSymbol, NoSymbol, - /* 0x25 */ XK_K, NoSymbol, NoSymbol, NoSymbol, - /* 0x26 */ XK_L, NoSymbol, NoSymbol, NoSymbol, - /* 0x27 */ XK_semicolon, XK_colon, NoSymbol, NoSymbol, - /* 0x28 */ XK_quoteright, XK_quotedbl, NoSymbol, NoSymbol, - /* 0x29 */ XK_quoteleft, XK_asciitilde, NoSymbol, NoSymbol, - /* 0x2a */ XK_Shift_L, NoSymbol, NoSymbol, NoSymbol, - /* 0x2b */ XK_backslash, XK_bar, NoSymbol, NoSymbol, - /* 0x2c */ XK_Z, NoSymbol, NoSymbol, NoSymbol, - /* 0x2d */ XK_X, NoSymbol, NoSymbol, NoSymbol, - /* 0x2e */ XK_C, NoSymbol, NoSymbol, NoSymbol, - /* 0x2f */ XK_V, NoSymbol, NoSymbol, NoSymbol, - /* 0x30 */ XK_B, NoSymbol, NoSymbol, NoSymbol, - /* 0x31 */ XK_N, NoSymbol, NoSymbol, NoSymbol, - /* 0x32 */ XK_M, NoSymbol, NoSymbol, NoSymbol, - /* 0x33 */ XK_comma, XK_less, NoSymbol, NoSymbol, - /* 0x34 */ XK_period, XK_greater, NoSymbol, NoSymbol, - /* 0x35 */ XK_slash, XK_question, NoSymbol, NoSymbol, - /* 0x36 */ XK_Shift_R, NoSymbol, NoSymbol, NoSymbol, - /* 0x37 */ XK_KP_Multiply, NoSymbol, NoSymbol, NoSymbol, - /* 0x38 */ XK_Alt_L, XK_Meta_L, NoSymbol, NoSymbol, - /* 0x39 */ XK_space, NoSymbol, NoSymbol, NoSymbol, - /* 0x3a */ XK_Caps_Lock, NoSymbol, NoSymbol, NoSymbol, - /* 0x3b */ XK_F1, NoSymbol, NoSymbol, NoSymbol, - /* 0x3c */ XK_F2, NoSymbol, NoSymbol, NoSymbol, - /* 0x3d */ XK_F3, NoSymbol, NoSymbol, NoSymbol, - /* 0x3e */ XK_F4, NoSymbol, NoSymbol, NoSymbol, - /* 0x3f */ XK_F5, NoSymbol, NoSymbol, NoSymbol, - /* 0x40 */ XK_F6, NoSymbol, NoSymbol, NoSymbol, - /* 0x41 */ XK_F7, NoSymbol, NoSymbol, NoSymbol, - /* 0x42 */ XK_F8, NoSymbol, NoSymbol, NoSymbol, - /* 0x43 */ XK_F9, NoSymbol, NoSymbol, NoSymbol, - /* 0x44 */ XK_F10, NoSymbol, NoSymbol, NoSymbol, - /* 0x45 */ XK_Num_Lock, NoSymbol, NoSymbol, NoSymbol, - /* 0x46 */ XK_Scroll_Lock, NoSymbol, NoSymbol, NoSymbol, - /* 0x47 */ XK_KP_Home, XK_KP_7, NoSymbol, NoSymbol, - /* 0x48 */ XK_KP_Up, XK_KP_8, NoSymbol, NoSymbol, - /* 0x49 */ XK_KP_Prior, XK_KP_9, NoSymbol, NoSymbol, - /* 0x4a */ XK_KP_Subtract, NoSymbol, NoSymbol, NoSymbol, - /* 0x4b */ XK_KP_Left, XK_KP_4, NoSymbol, NoSymbol, - /* 0x4c */ NoSymbol, XK_KP_5, NoSymbol, NoSymbol, - /* 0x4d */ XK_KP_Right, XK_KP_6, NoSymbol, NoSymbol, - /* 0x4e */ XK_KP_Add, NoSymbol, NoSymbol, NoSymbol, - /* 0x4f */ XK_KP_End, XK_KP_1, NoSymbol, NoSymbol, - /* 0x50 */ XK_KP_Down, XK_KP_2, NoSymbol, NoSymbol, - /* 0x51 */ XK_KP_Next, XK_KP_3, NoSymbol, NoSymbol, - /* 0x52 */ XK_KP_Insert, XK_KP_0, NoSymbol, NoSymbol, - /* 0x53 */ XK_KP_Delete, XK_KP_Decimal, NoSymbol, NoSymbol, - /* 0x54 */ XK_Sys_Req, NoSymbol, NoSymbol, NoSymbol, - /* 0x55 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x56 */ XK_less, XK_greater, NoSymbol, NoSymbol, - /* 0x57 */ XK_F11, NoSymbol, NoSymbol, NoSymbol, - /* 0x58 */ XK_F12, NoSymbol, NoSymbol, NoSymbol, - /* 0x59 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x5a */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x5b */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x5c */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x5d */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x5e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x5f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x60 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x61 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x62 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x63 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x64 */ XK_KP_Enter, NoSymbol, NoSymbol, NoSymbol, - /* 0x65 */ XK_Control_R, NoSymbol, NoSymbol, NoSymbol, - /* 0x66 */ XK_Pause, NoSymbol, NoSymbol, NoSymbol, - /* 0x67 */ XK_Print, NoSymbol, NoSymbol, NoSymbol, - /* 0x68 */ XK_KP_Divide, NoSymbol, NoSymbol, NoSymbol, - /* 0x69 */ XK_Alt_R, XK_Meta_R, NoSymbol, NoSymbol, - /* 0x6a */ XK_Break, NoSymbol, NoSymbol, NoSymbol, - /* 0x6b */ XK_Meta_L, NoSymbol, NoSymbol, NoSymbol, - /* 0x6c */ XK_Meta_R, NoSymbol, NoSymbol, NoSymbol, - /* 0x6d */ XK_Menu, NoSymbol, NoSymbol, NoSymbol, - /* 0x6e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x6f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x70 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x71 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x72 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x73 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x74 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x75 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x76 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x77 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x78 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x79 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x7a */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x7b */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x7c */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x7d */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, - /* 0x7e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol, -}; -#endif diff --git a/hw/xwin/winkeynames.h b/hw/xwin/winkeynames.h index 23760db5e..4d1ffb7cc 100755 --- a/hw/xwin/winkeynames.h +++ b/hw/xwin/winkeynames.h @@ -29,7 +29,6 @@ #define XK_TECHNICAL #define XK_KATAKANA #include "keysym.h" -#include "XF86keysym.h" #define GLYPHS_PER_KEY 4 #define NUM_KEYCODES 248 diff --git a/hw/xwin/winwndproc.c b/hw/xwin/winwndproc.c index 7ddd94373..7b66b0e09 100644 --- a/hw/xwin/winwndproc.c +++ b/hw/xwin/winwndproc.c @@ -53,6 +53,7 @@ Bool g_fCursor = TRUE; extern Bool g_fClipboard; extern HWND g_hDlgDepthChange; extern Bool g_fKeyboardHookLL; +extern HWND g_hwndKeyboardFocus; /* @@ -912,6 +913,9 @@ winWindowProc (HWND hwnd, UINT message, if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) break; + /* Save handle of our main window that last received focus */ + g_hwndKeyboardFocus = hwnd; + /* Restore the state of all mode keys */ winRestoreModeKeyStates (); @@ -924,6 +928,9 @@ winWindowProc (HWND hwnd, UINT message, if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput) break; + /* Clear handle of our main window that last received focus */ + g_hwndKeyboardFocus = NULL; + /* Release any pressed keys */ winKeybdReleaseKeys ();