summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorKent Hansen <kent.hansen@nokia.com>2012-03-19 10:03:48 +0100
committerKent Hansen <kent.hansen@nokia.com>2012-03-19 10:03:48 +0100
commit95d6f8a4cf3fba2fd675f0e6b5de0ce1d702da26 (patch)
treea0bb36e478c97761afa36baf8026726b3d2fdbc8 /src/plugins
parent3f64a7b67bfbcaab65ebb03f84962cce5834790b (diff)
parent25e004bfe493e18be255b057ae5c132a5ec5458b (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')
-rw-r--r--src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaclipboard.mm4
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm57
3 files changed, 36 insertions, 27 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
index fc600ebddd..e405c81726 100644
--- a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
+++ b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
@@ -354,7 +354,7 @@ static void cleanupCocoaApplicationDelegate()
- (void)qtDispatcherToQAction:(id)sender
{
Q_UNUSED(sender);
- //[[NSApp QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)] qtDispatcherToQAction:sender];
+ [qtMenuLoader qtDispatcherToQAction:sender];
}
@end
diff --git a/src/plugins/platforms/cocoa/qcocoaclipboard.mm b/src/plugins/platforms/cocoa/qcocoaclipboard.mm
index 799fb85183..87c085457f 100644
--- a/src/plugins/platforms/cocoa/qcocoaclipboard.mm
+++ b/src/plugins/platforms/cocoa/qcocoaclipboard.mm
@@ -64,6 +64,10 @@ QMimeData *QCocoaClipboard::mimeData(QClipboard::Mode mode)
void QCocoaClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode)
{
if (QMacPasteboard *pasteBoard = pasteboardForMode(mode)) {
+ if (data == 0) {
+ pasteBoard->clear();
+ }
+
pasteBoard->sync();
pasteBoard->setMimeData(data);
emitChanged(mode);
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