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.
This commit is contained in:
Harold L Hunt II 2004-04-03 22:21:56 +00:00
parent d60deb1bba
commit 43f87b4a0f
6 changed files with 62 additions and 299 deletions

View file

@ -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;

View file

@ -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,

View file

@ -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);
}

View file

@ -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

View file

@ -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

View file

@ -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 ();