summaryrefslogtreecommitdiff
path: root/hw/xwin/winkeyhook.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/xwin/winkeyhook.c')
-rw-r--r--hw/xwin/winkeyhook.c126
1 files changed, 54 insertions, 72 deletions
diff --git a/hw/xwin/winkeyhook.c b/hw/xwin/winkeyhook.c
index 124150850..8d68094e3 100644
--- a/hw/xwin/winkeyhook.c
+++ b/hw/xwin/winkeyhook.c
@@ -40,13 +40,13 @@ static HHOOK g_hhookKeyboardLL = NULL;
*/
static LRESULT CALLBACK
-winKeyboardMessageHookLL(int iCode, WPARAM wParam, LPARAM lParam);
+winKeyboardMessageHookLL (int iCode, WPARAM wParam, LPARAM lParam);
#ifndef LLKHF_EXTENDED
-#define LLKHF_EXTENDED 0x00000001
+# define LLKHF_EXTENDED 0x00000001
#endif
#ifndef LLKHF_UP
-#define LLKHF_UP 0x00000080
+# define LLKHF_UP 0x00000080
#endif
/*
@@ -54,34 +54,34 @@ winKeyboardMessageHookLL(int iCode, WPARAM wParam, LPARAM lParam);
*/
static LRESULT CALLBACK
-winKeyboardMessageHookLL(int iCode, WPARAM wParam, LPARAM lParam)
+winKeyboardMessageHookLL (int iCode, WPARAM wParam, LPARAM lParam)
{
- BOOL fPassKeystroke = FALSE;
- BOOL fPassAltTab = TRUE;
- PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
- HWND hwnd = GetActiveWindow();
+ BOOL fPassKeystroke = FALSE;
+ BOOL fPassAltTab = TRUE;
+ PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
+ HWND hwnd = GetActiveWindow();
#ifdef XWIN_MULTIWINDOW
- WindowPtr pWin = NULL;
- winPrivWinPtr pWinPriv = NULL;
- winPrivScreenPtr pScreenPriv = NULL;
- winScreenInfo *pScreenInfo = NULL;
+ WindowPtr pWin = NULL;
+ winPrivWinPtr pWinPriv = NULL;
+ winPrivScreenPtr pScreenPriv = NULL;
+ winScreenInfo *pScreenInfo = NULL;
- /* Check if the Windows window property for our X window pointer is valid */
+ /* Check if the Windows window property for our X window pointer is valid */
if ((pWin = GetProp(hwnd, WIN_WINDOW_PROP)) != NULL) {
- /* Get a pointer to our window privates */
- pWinPriv = winGetWindowPriv(pWin);
+ /* Get a pointer to our window privates */
+ pWinPriv = winGetWindowPriv(pWin);
- /* Get pointers to our screen privates and screen info */
- pScreenPriv = pWinPriv->pScreenPriv;
- pScreenInfo = pScreenPriv->pScreenInfo;
+ /* Get pointers to our screen privates and screen info */
+ pScreenPriv = pWinPriv->pScreenPriv;
+ pScreenInfo = pScreenPriv->pScreenInfo;
- if (pScreenInfo->fMultiWindow)
- fPassAltTab = FALSE;
+ if (pScreenInfo->fMultiWindow)
+ fPassAltTab = FALSE;
}
#endif
- /* Pass keystrokes on to our main message loop */
+ /* Pass keystrokes on to our main message loop */
if (iCode == HC_ACTION) {
winDebug("winKeyboardMessageHook: vkCode: %08x scanCode: %08x\n",
p->vkCode, p->scanCode);
@@ -91,39 +91,39 @@ winKeyboardMessageHookLL(int iCode, WPARAM wParam, LPARAM lParam)
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_SYSKEYUP:
- fPassKeystroke =
- (fPassAltTab &&
- (p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0))
+ fPassKeystroke =
+ (fPassAltTab &&
+ (p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0))
|| (p->vkCode == VK_LWIN) || (p->vkCode == VK_RWIN);
- break;
- }
+ break;
+ }
}
- /*
- * Pass message on to our main message loop.
- * We process this immediately with SendMessage so that the keystroke
- * appears in, hopefully, the correct order.
- */
+ /*
+ * 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
+ 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));
+ lParamKey = lParamKey | (0x80000000 & ((p->flags & LLKHF_UP) << 24));
- /* Send message to our main window that has the keyboard focus */
+ /* Send message to our main window that has the keyboard focus */
PostMessage(hwnd, (UINT) wParam, (WPARAM) p->vkCode, lParamKey);
- return 1;
+ return 1;
}
- /* Call next hook */
- return CallNextHookEx(NULL, iCode, wParam, lParam);
+ /* Call next hook */
+ return CallNextHookEx (NULL, iCode, wParam, lParam);
}
/*
@@ -131,33 +131,15 @@ winKeyboardMessageHookLL(int iCode, WPARAM wParam, LPARAM lParam)
*/
Bool
-winInstallKeyboardHookLL(void)
+winInstallKeyboardHookLL (void)
{
- OSVERSIONINFO osvi = { 0 };
-
- /* Get operating system version information */
- osvi.dwOSVersionInfoSize = sizeof(osvi);
- GetVersionEx(&osvi);
-
- /* Branch on platform ID */
- switch (osvi.dwPlatformId) {
- case VER_PLATFORM_WIN32_NT:
- /* Low-level is supported on NT 4.0 SP3+ only */
- /* TODO: Return FALSE on NT 4.0 with no SP, SP1, or SP2 */
- break;
-
- case VER_PLATFORM_WIN32_WINDOWS:
- /* Low-level hook is not supported on non-NT */
- return FALSE;
- }
-
- /* Install the hook only once */
- if (!g_hhookKeyboardLL)
- g_hhookKeyboardLL = SetWindowsHookEx(WH_KEYBOARD_LL,
- winKeyboardMessageHookLL,
+ /* Install the hook only once */
+ if (!g_hhookKeyboardLL)
+ g_hhookKeyboardLL = SetWindowsHookEx (WH_KEYBOARD_LL,
+ winKeyboardMessageHookLL,
g_hInstance, 0);
- return TRUE;
+ return TRUE;
}
/*
@@ -165,9 +147,9 @@ winInstallKeyboardHookLL(void)
*/
void
-winRemoveKeyboardHookLL(void)
+winRemoveKeyboardHookLL (void)
{
- if (g_hhookKeyboardLL)
- UnhookWindowsHookEx(g_hhookKeyboardLL);
- g_hhookKeyboardLL = NULL;
+ if (g_hhookKeyboardLL)
+ UnhookWindowsHookEx (g_hhookKeyboardLL);
+ g_hhookKeyboardLL = NULL;
}