summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBradley T. Hughes <bradley.hughes@nokia.com>2012-03-14 15:06:39 +0100
committerQt by Nokia <qt-info@nokia.com>2012-03-18 16:09:23 +0100
commit60c59b5cf57612216cb55fbfbe6e3ceebcda18e7 (patch)
tree0215978ecb8c386d441dcfd23c800088fc963bf1
parentfbc251b364f9335be3c22df31ede449fb965d8d8 (diff)
Fix shortcut handling in the Cocoa plugin
KeyPress events could be shortcuts or deadkeys, but we don't know which until we try. Shortcuts take precedence over deadkeys, so send them through QWindowSystemInterface::tryHandleSynchronousShortcutEvent() before passing it onto the input method. Change-Id: I479a3a7ff1c35e7c5692e8a17fb2173576dd0a29 Reviewed-by: Tasuku Suzuki <tasuku.suzuki@nokia.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm51
1 files changed, 26 insertions, 25 deletions
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
index a28c5959ce..202ad6cc11 100644
--- a/src/plugins/platforms/cocoa/qnsview.mm
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -570,42 +570,43 @@ static QTouchDevice *touchDevice = 0;
return qtMods;
}
-- (void)handleKeyEvent:(NSEvent *)theEvent eventType:(int)eventType
+- (void)handleKeyEvent:(NSEvent *)nsevent eventType:(int)eventType
{
- NSTimeInterval timestamp = [theEvent timestamp];
+ NSTimeInterval timestamp = [nsevent timestamp];
ulong qt_timestamp = timestamp * 1000;
- QString characters = QString::fromUtf8([[theEvent characters] UTF8String]);
- Qt::KeyboardModifiers modifiers = [self convertKeyModifiers : [theEvent modifierFlags]];
- QChar ch([[theEvent charactersIgnoringModifiers] characterAtIndex:0]);
- int keyCode = [self convertKeyCode : ch];
+ QString characters = QString::fromUtf8([[nsevent characters] UTF8String]);
+ Qt::KeyboardModifiers modifiers = [self convertKeyModifiers:[nsevent modifierFlags]];
+ QChar ch([[nsevent charactersIgnoringModifiers] characterAtIndex:0]);
+ int keyCode = [self convertKeyCode:ch];
- QWindowSystemInterface::handleKeyEvent(m_window, qt_timestamp, QEvent::Type(eventType), keyCode, modifiers, characters);
-}
+ if (eventType == QEvent::KeyPress) {
+ if (!m_keyEventsAccepted && m_composingText.isEmpty())
+ m_keyEventsAccepted = QWindowSystemInterface::tryHandleSynchronousShortcutEvent(m_window, qt_timestamp, keyCode, modifiers, characters);
-- (void)keyDown:(NSEvent *)theEvent
-{
- QObject *fo = QGuiApplication::focusObject();
- m_keyEventsAccepted = false;
- if (fo) {
- QInputMethodQueryEvent queryEvent(Qt::ImHints);
- if (QCoreApplication::sendEvent(fo, &queryEvent)) {
- Qt::InputMethodHints hints = static_cast<Qt::InputMethodHints>(queryEvent.value(Qt::ImHints).toUInt());
- if (!(hints & Qt::ImhDigitsOnly || hints & Qt::ImhFormattedNumbersOnly || hints & Qt::ImhHiddenText)) {
- [self interpretKeyEvents:[NSArray arrayWithObject: theEvent]];
+ QObject *fo = QGuiApplication::focusObject();
+ if (!m_keyEventsAccepted && fo) {
+ QInputMethodQueryEvent queryEvent(Qt::ImHints);
+ if (QCoreApplication::sendEvent(fo, &queryEvent)) {
+ Qt::InputMethodHints hints = static_cast<Qt::InputMethodHints>(queryEvent.value(Qt::ImHints).toUInt());
+ if (!(hints & Qt::ImhDigitsOnly || hints & Qt::ImhFormattedNumbersOnly || hints & Qt::ImhHiddenText))
+ [self interpretKeyEvents:[NSArray arrayWithObject:nsevent]];
}
}
}
- if (!m_keyEventsAccepted && m_composingText.isEmpty()) {
- [self handleKeyEvent : theEvent eventType :int(QEvent::KeyPress)];
- }
+ if (!m_keyEventsAccepted && m_composingText.isEmpty())
+ QWindowSystemInterface::handleKeyEvent(m_window, qt_timestamp, QEvent::Type(eventType), keyCode, modifiers, characters);
}
-- (void)keyUp:(NSEvent *)theEvent
+- (void)keyDown:(NSEvent *)nsevent
{
- if (!m_keyEventsAccepted && m_composingText.isEmpty()) {
- [self handleKeyEvent : theEvent eventType :int(QEvent::KeyRelease)];
- }
+ m_keyEventsAccepted = false;
+ [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)];
+}
+
+- (void)keyUp:(NSEvent *)nsevent
+{
+ [self handleKeyEvent:nsevent eventType:int(QEvent::KeyRelease)];
}
- (void) doCommandBySelector:(SEL)aSelector