diff options
author | Morten Johan Sorvig <morten.sorvig@nokia.com> | 2010-04-01 00:14:01 +0200 |
---|---|---|
committer | Morten Johan Sorvig <morten.sorvig@nokia.com> | 2010-04-01 00:14:01 +0200 |
commit | d7d6e19f046b214ce583f2dfb0df6d396567a3c1 (patch) | |
tree | 3a89a90409a2e6ff0655d96fce2ad716476cd960 | |
parent | f567b551d0f65a34c5b61951262281fcc282e12c (diff) |
Work on key event translation.
Get the key code from the KeyDown event, get
the unicode character from the Char event.
-rw-r--r-- | src/gui/kernel/qeventdispatcher_pepper.cpp | 34 | ||||
-rw-r--r-- | src/gui/kernel/qeventdispatcher_pepper_p.h | 2 |
2 files changed, 22 insertions, 14 deletions
diff --git a/src/gui/kernel/qeventdispatcher_pepper.cpp b/src/gui/kernel/qeventdispatcher_pepper.cpp index a78cd111de..278630a284 100644 --- a/src/gui/kernel/qeventdispatcher_pepper.cpp +++ b/src/gui/kernel/qeventdispatcher_pepper.cpp @@ -354,6 +354,19 @@ Qt::KeyboardModifiers pepperKeyModifiersToQt(int32 modifier) return Qt::KeyboardModifiers((modifier & 0x1F)<< 25); } +/* + Key translation: Pepper sends three types of events. Pressing and + holding a key gives the following sequence: + NPEventType_KeyDown + NPEventType_Char + NPEventType_KeyDown + NPEventType_Char + ... + NPEventType_KeyUp + + Translate this to Qt KeyPress/KeyRelease events by sending + the Press on NPEventType_Char. +*/ void QEventDispatcherPepper::processKeyEvent(NPKeyEvent *key, uint32 eventType) { /* @@ -361,19 +374,15 @@ void QEventDispatcherPepper::processKeyEvent(NPKeyEvent *key, uint32 eventType) uint32 normalizedKeyCode; */ Qt::KeyboardModifiers modifiers = pepperKeyModifiersToQt(key->modifier); - + if (eventType == NPEventType_KeyDown) { - qDebug() << "Key Down" << key->normalizedKeyCode << hex << modifiers; - QKeyEvent keyEvent(QEvent::KeyPress, key->normalizedKeyCode, modifiers, - QString()); - QApplicationPrivate::handleKeyEvent(0, &keyEvent); - + currentPepperKey = key->normalizedKeyCode; + // qDebug() << "Key Down" << key->normalizedKeyCode << hex << modifiers; } if (eventType == NPEventType_KeyUp) { - qDebug() << "Key Up" << key->normalizedKeyCode << hex << modifiers; - QKeyEvent keyEvent(QEvent::KeyRelease, key->normalizedKeyCode, modifiers, - QString()); + // qDebug() << "Key Up" << key->normalizedKeyCode << hex << modifiers; + QKeyEvent keyEvent(QEvent::KeyRelease, key->normalizedKeyCode, modifiers, QString("")); QApplicationPrivate::handleKeyEvent(0, &keyEvent); } } @@ -385,12 +394,9 @@ void QEventDispatcherPepper::processCharacterEvent(NPCharacterEvent *character) uint16 text[4]; uint16 unmodifiedText[4]; */ - QString text(reinterpret_cast<QChar *>(character->text), 4); + QString text(reinterpret_cast<QChar *>(character->text), 1); // ### wide characters? Qt::KeyboardModifiers modifiers = pepperKeyModifiersToQt(character->modifier); - - qDebug() << "CharacterEvent" << text << modifiers; - - QKeyEvent keyEvent(QEvent::KeyPress, 0, modifiers, text); + QKeyEvent keyEvent(QEvent::KeyPress, currentPepperKey, modifiers, text); QApplicationPrivate::handleKeyEvent(0, &keyEvent); } diff --git a/src/gui/kernel/qeventdispatcher_pepper_p.h b/src/gui/kernel/qeventdispatcher_pepper_p.h index fe9c8a5ef0..c0fb8bbd0a 100644 --- a/src/gui/kernel/qeventdispatcher_pepper_p.h +++ b/src/gui/kernel/qeventdispatcher_pepper_p.h @@ -111,6 +111,8 @@ private: QQueue<NPPepperEvent> eventQueue; bool callActivateTimers; + + uint32 currentPepperKey; }; QT_END_NAMESPACE |