summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorten Johan Sorvig <morten.sorvig@nokia.com>2010-04-01 00:14:01 +0200
committerMorten Johan Sorvig <morten.sorvig@nokia.com>2010-04-01 00:14:01 +0200
commitd7d6e19f046b214ce583f2dfb0df6d396567a3c1 (patch)
tree3a89a90409a2e6ff0655d96fce2ad716476cd960
parentf567b551d0f65a34c5b61951262281fcc282e12c (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.cpp34
-rw-r--r--src/gui/kernel/qeventdispatcher_pepper_p.h2
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