diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-04-30 14:36:56 +0200 |
---|---|---|
committer | Oliver Wolff <oliver.wolff@qt.io> | 2018-09-28 05:24:26 +0000 |
commit | 34af9fa0dc38ec19d85c0ef2464715b1e9661233 (patch) | |
tree | 0bf96c94fbb46b27c3ef65be6035199caa607353 | |
parent | 9f5b63a337fa6f0ec8eb3e3b365d6b6410a22d2c (diff) |
Windows QPA: Fix programmable keyboard shortcuts being triggered twice
Suppress keyboard events following a WM_APPCOMMAND except for
APPCOMMAND_BROWSER_HOME, which does not trigger two events.
Task-number: QTBUG-62838
Change-Id: If04206c9ef9409224b4cbc96190792b9be4f656d
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
-rw-r--r-- | src/plugins/platforms/windows/qwindowskeymapper.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/plugins/platforms/windows/qwindowskeymapper.cpp b/src/plugins/platforms/windows/qwindowskeymapper.cpp index 1209b6c4b4..9e6101b758 100644 --- a/src/plugins/platforms/windows/qwindowskeymapper.cpp +++ b/src/plugins/platforms/windows/qwindowskeymapper.cpp @@ -877,10 +877,26 @@ bool QWindowsKeyMapper::translateKeyEvent(QWindow *widget, HWND hwnd, bool QWindowsKeyMapper::translateMultimediaKeyEventInternal(QWindow *window, const MSG &msg) { #if defined(WM_APPCOMMAND) + const int cmd = GET_APPCOMMAND_LPARAM(msg.lParam); // QTBUG-57198, do not send mouse-synthesized commands as key events in addition - if (GET_DEVICE_LPARAM(msg.lParam) == FAPPCOMMAND_MOUSE) + switch (GET_DEVICE_LPARAM(msg.lParam)) { + case FAPPCOMMAND_MOUSE: return false; - const int cmd = GET_APPCOMMAND_LPARAM(msg.lParam); + case FAPPCOMMAND_KEY: + // QTBUG-62838, swallow WM_KEYDOWN, WM_KEYUP for commands that are + // reflected in VK(s) like VK_MEDIA_NEXT_TRACK. Don't do that for + // APPCOMMAND_BROWSER_HOME as that one does not trigger two events + if (cmd != APPCOMMAND_BROWSER_HOME) { + MSG peekedMsg; + if (PeekMessage(&peekedMsg, msg.hwnd, 0, 0, PM_NOREMOVE) + && peekedMsg.message == WM_KEYDOWN) { + PeekMessage(&peekedMsg, msg.hwnd, 0, 0, PM_REMOVE); + PeekMessage(&peekedMsg, msg.hwnd, 0, 0, PM_REMOVE); + } + } + break; + } + const int dwKeys = GET_KEYSTATE_LPARAM(msg.lParam); int state = 0; state |= (dwKeys & MK_SHIFT ? int(Qt::ShiftModifier) : 0); |