Added possibleKeys(QKeyEvent *) to QWindowsIntegration

Task-number: QTBUG-26902
Change-Id: I08d244816eae8794b52f244f049ee1fb825dac8b
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
This commit is contained in:
Oliver Wolff 2012-10-11 07:42:08 +02:00 committed by The Qt Project
parent 889444b403
commit 9e44b76093
6 changed files with 41 additions and 0 deletions

View File

@ -331,6 +331,11 @@ bool QWindowsContext::useRTLExtensions() const
return d->m_keyMapper.useRTLExtensions();
}
QList<int> QWindowsContext::possibleKeys(const QKeyEvent *e) const
{
return d->m_keyMapper.possibleKeys(e);
}
void QWindowsContext::setWindowCreationContext(const QSharedPointer<QWindowCreationContext> &ctx)
{
d->m_creationContext = ctx;

View File

@ -60,6 +60,7 @@ class QWindowsMimeConverter;
struct QWindowCreationContext;
struct QWindowsContextPrivate;
class QPoint;
class QKeyEvent;
#ifndef Q_OS_WINCE
struct QWindowsUser32DLL
@ -170,6 +171,7 @@ public:
unsigned systemInfo() const;
bool useRTLExtensions() const;
QList<int> possibleKeys(const QKeyEvent *e) const;
QWindowsMimeConverter &mimeConverter() const;
QWindowsScreenManager &screenManager();

View File

@ -447,6 +447,11 @@ Qt::KeyboardModifiers QWindowsIntegration::queryKeyboardModifiers() const
return QWindowsKeyMapper::queryKeyboardModifiers();
}
QList<int> QWindowsIntegration::possibleKeys(const QKeyEvent *e) const
{
return d->m_context.possibleKeys(e);
}
QPlatformNativeInterface *QWindowsIntegration::nativeInterface() const
{
return &d->m_nativeInterface;

View File

@ -81,6 +81,7 @@ public:
virtual QVariant styleHint(StyleHint hint) const;
virtual Qt::KeyboardModifiers queryKeyboardModifiers() const;
virtual QList<int> possibleKeys(const QKeyEvent *e) const;
static QWindowsIntegration *instance();

View File

@ -1119,4 +1119,30 @@ Qt::KeyboardModifiers QWindowsKeyMapper::queryKeyboardModifiers()
return modifiers;
}
QList<int> QWindowsKeyMapper::possibleKeys(const QKeyEvent *e) const
{
QList<int> result;
KeyboardLayoutItem *kbItem = keyLayout[e->nativeVirtualKey()];
if (!kbItem)
return result;
quint32 baseKey = kbItem->qtKey[0];
Qt::KeyboardModifiers keyMods = e->modifiers();
if (baseKey == Qt::Key_Return && (e->nativeModifiers() & ExtendedKey)) {
result << int(Qt::Key_Enter + keyMods);
return result;
}
result << int(baseKey + keyMods); // The base key is _always_ valid, of course
for (int i = 1; i < 9; ++i) {
Qt::KeyboardModifiers neededMods = ModsTbl[i];
quint32 key = kbItem->qtKey[i];
if (key && key != baseKey && ((keyMods & neededMods) == neededMods))
result << int(key + (keyMods & ~neededMods));
}
return result;
}
QT_END_NAMESPACE

View File

@ -48,6 +48,7 @@
QT_BEGIN_NAMESPACE
class QKeyEvent;
class QWindow;
struct KeyboardLayoutItem;
@ -70,6 +71,7 @@ public:
void setKeyGrabber(QWindow *w) { m_keyGrabber = w; }
static Qt::KeyboardModifiers queryKeyboardModifiers();
QList<int> possibleKeys(const QKeyEvent *e) const;
private:
bool translateKeyEventInternal(QWindow *receiver, const MSG &msg, bool grab);