diff options
author | Kent Hansen <kent.hansen@nokia.com> | 2012-03-19 10:03:48 +0100 |
---|---|---|
committer | Kent Hansen <kent.hansen@nokia.com> | 2012-03-19 10:03:48 +0100 |
commit | 95d6f8a4cf3fba2fd675f0e6b5de0ce1d702da26 (patch) | |
tree | a0bb36e478c97761afa36baf8026726b3d2fdbc8 /src/plugins/platforms/cocoa/qnsview.mm | |
parent | 3f64a7b67bfbcaab65ebb03f84962cce5834790b (diff) | |
parent | 25e004bfe493e18be255b057ae5c132a5ec5458b (diff) |
Merge master into api_changes
Conflicts:
src/corelib/tools/qvector.h
tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
Change-Id: I877256e95f3788e617437f4e9661a88047f38cd6
Diffstat (limited to 'src/plugins/platforms/cocoa/qnsview.mm')
-rw-r--r-- | src/plugins/platforms/cocoa/qnsview.mm | 57 |
1 files changed, 31 insertions, 26 deletions
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index a28c5959ce..3a697a3602 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -570,42 +570,47 @@ static QTouchDevice *touchDevice = 0; return qtMods; } -- (void)handleKeyEvent:(NSEvent *)theEvent eventType:(int)eventType +- (void)handleKeyEvent:(NSEvent *)nsevent eventType:(int)eventType { - NSTimeInterval timestamp = [theEvent 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]; + ulong timestamp = [nsevent timestamp] * 1000; + Qt::KeyboardModifiers modifiers = [self convertKeyModifiers:[nsevent modifierFlags]]; + NSString *charactersIgnoringModifiers = [nsevent charactersIgnoringModifiers]; + QChar ch([charactersIgnoringModifiers characterAtIndex:0]); + int keyCode = [self convertKeyCode:ch]; - QWindowSystemInterface::handleKeyEvent(m_window, qt_timestamp, QEvent::Type(eventType), keyCode, modifiers, characters); -} + QString text; + if (eventType == QEvent::KeyPress) { + // ignore text for the U+F700-U+F8FF range. This is used by Cocoa when + // delivering function keys (e.g. arrow keys, backspace, F1-F35, etc.) + if ([charactersIgnoringModifiers length] == 1 && (ch.unicode() < 0xf700 || ch.unicode() > 0xf8ff)) + text = QString::fromUtf8([[nsevent characters] UTF8String]); -- (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]]; + if (!m_keyEventsAccepted && m_composingText.isEmpty()) + m_keyEventsAccepted = QWindowSystemInterface::tryHandleSynchronousShortcutEvent(m_window, timestamp, keyCode, modifiers, text); + + 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()) + QWindowSystemInterface::handleKeyEvent(m_window, timestamp, QEvent::Type(eventType), keyCode, modifiers, text); +} - if (!m_keyEventsAccepted && m_composingText.isEmpty()) { - [self handleKeyEvent : theEvent eventType :int(QEvent::KeyPress)]; - } +- (void)keyDown:(NSEvent *)nsevent +{ + m_keyEventsAccepted = false; + [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)]; } -- (void)keyUp:(NSEvent *)theEvent +- (void)keyUp:(NSEvent *)nsevent { - if (!m_keyEventsAccepted && m_composingText.isEmpty()) { - [self handleKeyEvent : theEvent eventType :int(QEvent::KeyRelease)]; - } + [self handleKeyEvent:nsevent eventType:int(QEvent::KeyRelease)]; } - (void) doCommandBySelector:(SEL)aSelector |