From 8791e5b2270b212532103b3965e394fe97e09ff6 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 31 Dec 2024 04:30:42 +0100 Subject: [PATCH] Make sure the blocked combinations are only blocked from the host, not the guest. --- src/qt/qt_main.cpp | 51 +++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 2d9d4e095..d18894bf6 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -143,13 +143,10 @@ keyboard_getkeymap() } } -static LRESULT CALLBACK -input_LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) +static void +kbd_handle(uint16_t scancode, uint16_t flags) { - LPKBDLLHOOKSTRUCT lpKdhs = (LPKBDLLHOOKSTRUCT) lParam; - uint16_t scancode = lpKdhs->scanCode & 0x00ff; - - if (lpKdhs->flags & LLKHF_EXTENDED) + if (flags & LLKHF_EXTENDED) scancode |= 0x100; /* Translate the scan code to 9-bit */ @@ -175,7 +172,15 @@ input_LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) /* Normal scan code pass through, pass it through as is if it's not an invalid scan code. */ if (scancode != 0xFFFF) - keyboard_input(!(lpKdhs->flags & LLKHF_UP), scancode); + keyboard_input(!(flags & LLKHF_UP), scancode); +} + +static LRESULT CALLBACK +input_LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) +{ + LPKBDLLHOOKSTRUCT lpKdhs = (LPKBDLLHOOKSTRUCT) lParam; + + kbd_handle(lpKdhs->scanCode & 0x00ff, lpKdhs->flags); main_window->checkFullscreenHotkey(); @@ -192,26 +197,34 @@ emu_LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) if ((nCode < 0) || (nCode != HC_ACTION) || (!mouse_capture && !video_fullscreen)) return CallNextHookEx(NULL, nCode, wParam, lParam); else if ((lpKdhs->scanCode == 0x01) && (lpKdhs->flags & LLKHF_ALTDOWN) && - !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED))) + !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED))) { + kbd_handle(lpKdhs->scanCode & 0x00ff, lpKdhs->flags); return TRUE; - else if ((lpKdhs->scanCode == 0x01) && bCtrlDown && !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED))) + } else if ((lpKdhs->scanCode == 0x01) && bCtrlDown && !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED))) { + kbd_handle(lpKdhs->scanCode & 0x00ff, lpKdhs->flags); return TRUE; - else if ((lpKdhs->scanCode == 0x0f) && (lpKdhs->flags & LLKHF_ALTDOWN) && - !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED))) + } else if ((lpKdhs->scanCode == 0x0f) && (lpKdhs->flags & LLKHF_ALTDOWN) && + !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED))) { + kbd_handle(lpKdhs->scanCode & 0x00ff, lpKdhs->flags); return TRUE; - else if ((lpKdhs->scanCode == 0x0f) && bCtrlDown && !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED))) + } else if ((lpKdhs->scanCode == 0x0f) && bCtrlDown && !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED))) { + kbd_handle(lpKdhs->scanCode & 0x00ff, lpKdhs->flags); return TRUE; - else if ((lpKdhs->scanCode == 0x39) && (lpKdhs->flags & LLKHF_ALTDOWN) && - !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED))) + } else if ((lpKdhs->scanCode == 0x39) && (lpKdhs->flags & LLKHF_ALTDOWN) && + !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED))) { + kbd_handle(lpKdhs->scanCode & 0x00ff, lpKdhs->flags); return TRUE; - else if ((lpKdhs->scanCode == 0x3e) && (lpKdhs->flags & LLKHF_ALTDOWN) && - !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED))) + } else if ((lpKdhs->scanCode == 0x3e) && (lpKdhs->flags & LLKHF_ALTDOWN) && + !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED))) { + kbd_handle(lpKdhs->scanCode & 0x00ff, lpKdhs->flags); return TRUE; - else if ((lpKdhs->scanCode == 0x49) && bCtrlDown && !(lpKdhs->flags & LLKHF_UP)) + } else if ((lpKdhs->scanCode == 0x49) && bCtrlDown && !(lpKdhs->flags & LLKHF_UP)) { + kbd_handle(lpKdhs->scanCode & 0x00ff, lpKdhs->flags); return TRUE; - else if ((lpKdhs->scanCode >= 0x5b) && (lpKdhs->scanCode <= 0x5d) && (lpKdhs->flags & LLKHF_EXTENDED)) + } else if ((lpKdhs->scanCode >= 0x5b) && (lpKdhs->scanCode <= 0x5d) && (lpKdhs->flags & LLKHF_EXTENDED)) { + kbd_handle(lpKdhs->scanCode & 0x00ff, lpKdhs->flags); return TRUE; - else + } else return CallNextHookEx(NULL, nCode, wParam, lParam); } #endif