summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
authorJuan Luis Boya GarcĂ­a <ntrrgc@gmail.com>2013-10-16 15:34:52 (GMT)
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-25 08:32:32 (GMT)
commit72f6bd8d51911f8a2a0dadc7fa10509fa86970a1 (patch)
tree30337747795b6d2feb8bde381569e324a2176d10 /src/corelib/kernel
parent106335e4659530125faf8cce62e3367e88ddae14 (diff)
downloadQt-72f6bd8d51911f8a2a0dadc7fa10509fa86970a1.zip
Qt-72f6bd8d51911f8a2a0dadc7fa10509fa86970a1.tar.gz
Qt-72f6bd8d51911f8a2a0dadc7fa10509fa86970a1.tar.bz2
Fix virtual key mapping on MS Windows
In order to map MS Windows virtual keys to Qt keys without messing with dead keys now I use the built-in keyMap structure of QWindowsKeyMapper and assert every cell in the keymap is properly updated. In order to guarantee this even when the user changes the keyboard layout, WndProc now manages the WM_INPUTLANGCHANGE message, which is handled by QWindowsKeyMapper, resetting the layout structure. I don't fully understand yet some things about QWindowsKeyMapper, i.e. how QWindowsKeyMapper::updatePossibleKeyCodes workarounds the dead key issue with ToAscii; but it seems to work fine in all the tests I've done. Any further testing is highly appreciated, though. [ChangeLog][[QtGui][Platform Specific Changes][Windows] Fixed virtual key mapping on Windows. Task-number: QTBUG-33409 Task-number: QTBUG-8764 Task-number: QTBUG-10032 Change-Id: I4f7709a90906b03f4504deea1ff5c361e9f94b3f (cherry picked from commit f0d014a16b5c9b55245834459c46ea34d15d14be) Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r--src/corelib/kernel/qcoreapplication_win.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/corelib/kernel/qcoreapplication_win.cpp b/src/corelib/kernel/qcoreapplication_win.cpp
index 025690b..983d1f5 100644
--- a/src/corelib/kernel/qcoreapplication_win.cpp
+++ b/src/corelib/kernel/qcoreapplication_win.cpp
@@ -875,6 +875,11 @@ QString decodeMSG(const MSG& msg)
}
break;
#endif
+#ifdef WM_INPUTLANGCHANGE
+ case WM_INPUTLANGCHANGE:
+ parameters = QLatin1String("Keyboard layout changed");
+ break;
+#endif // WM_INPUTLANGCHANGE
#ifdef WM_NCACTIVATE
case WM_NCACTIVATE:
{