From d4aef8052511027195106d043d8d5f977cfa4d5a Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 27 Mar 2018 12:54:30 +0200 Subject: Windows QPA: Improve debug output of keyboard shortcut handling Add a debug operator for KeyboardLayoutItem and output keys in QWindowsKeyMapper::possibleKeys(). Change-Id: I28215f44da2a9c08a27541ef0e906d37be2bad72 Reviewed-by: Joerg Bornemann --- .../platforms/windows/qwindowskeymapper.cpp | 75 +++++++++++++++++----- 1 file changed, 59 insertions(+), 16 deletions(-) (limited to 'src/plugins/platforms/windows') diff --git a/src/plugins/platforms/windows/qwindowskeymapper.cpp b/src/plugins/platforms/windows/qwindowskeymapper.cpp index 35f81f0165..127e7598c4 100644 --- a/src/plugins/platforms/windows/qwindowskeymapper.cpp +++ b/src/plugins/platforms/windows/qwindowskeymapper.cpp @@ -50,6 +50,7 @@ #include #include #include +#include #if defined(WM_APPCOMMAND) # ifndef FAPPCOMMAND_MOUSE @@ -544,6 +545,59 @@ static const Qt::KeyboardModifiers ModsTbl[] = { static const size_t NumMods = sizeof ModsTbl / sizeof *ModsTbl; Q_STATIC_ASSERT((NumMods == KeyboardLayoutItem::NumQtKeys)); +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const KeyboardLayoutItem &k) +{ + QDebugStateSaver saver(d); + d.nospace(); + d << "KeyboardLayoutItem("; + if (k.exists) { + for (size_t i = 0; i < NumMods; ++i) { + if (const quint32 qtKey = k.qtKey[i]) { + d << '[' << i << ' '; + QtDebugUtils::formatQFlags(d, ModsTbl[i]); + d << ' ' << hex << showbase << qtKey << dec << noshowbase << ' '; + QtDebugUtils::formatQEnum(d, Qt::Key(qtKey)); + if (qtKey >= 32 && qtKey < 128) + d << " '" << char(qtKey) << '\''; + if (k.deadkeys & (1< &keys) : m_keys(keys) {} + +private: + friend QDebug operator<<(QDebug d, const formatKeys &keys); + const QList &m_keys; +}; + +QDebug operator<<(QDebug d, const formatKeys &k) +{ + QDebugStateSaver saver(d); + d.nospace(); + d << '('; + for (int i =0, size = k.m_keys.size(); i < size; ++i) { + if (i) + d << ", "; + d << QKeySequence(k.m_keys.at(i)); + } + d << ')'; + return d; +} +#else // !QT_NO_DEBUG_STREAM +static int formatKeys(const QList &) { return 0; } +#endif // QT_NO_DEBUG_STREAM + /** Remap return or action key to select key for windows mobile. */ @@ -722,21 +776,8 @@ void QWindowsKeyMapper::updatePossibleKeyCodes(unsigned char *kbdBuffer, quint32 ::ToAscii(VK_SPACE, 0, emptyBuffer, reinterpret_cast(&buffer), 0); ::ToAscii(vk_key, scancode, kbdBuffer, reinterpret_cast(&buffer), 0); } - if (QWindowsContext::verbose > 1 && lcQpaEvents().isDebugEnabled()) { - QString message; - QDebug debug(&message); - debug <<__FUNCTION__ << " for virtual key = 0x" << hex << vk_key << dec<< '\n'; - for (size_t i = 0; i < NumMods; ++i) { - const quint32 qtKey = keyLayout[vk_key].qtKey[i]; - debug << " [" << i << "] (" << qtKey << ',' - << hex << showbase << qtKey << noshowbase << dec - << ",'" << char(qtKey ? qtKey : 0x03) << "')"; - if (keyLayout[vk_key].deadkeys & (1<