diff options
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/platforms/cocoa/qnsview_keys.mm | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/plugins/platforms/cocoa/qnsview_keys.mm b/src/plugins/platforms/cocoa/qnsview_keys.mm index 37c46204e1..f6599edb81 100644 --- a/src/plugins/platforms/cocoa/qnsview_keys.mm +++ b/src/plugins/platforms/cocoa/qnsview_keys.mm @@ -192,14 +192,20 @@ - (void)flagsChanged:(NSEvent *)nsevent { ulong timestamp = [nsevent timestamp] * 1000; - ulong modifiers = [nsevent modifierFlags]; - Qt::KeyboardModifiers qmodifiers = QCocoaKeyMapper::fromCocoaModifiers(modifiers); + ulong nativeModifiers = [nsevent modifierFlags]; + Qt::KeyboardModifiers modifiers = QCocoaKeyMapper::fromCocoaModifiers(nativeModifiers); + + // There is no way to get the scan code from carbon/cocoa. But we cannot + // use the value 0, since it indicates that the event originates from somewhere + // else than the keyboard. + quint32 nativeScanCode = 1; + quint32 nativeVirtualKey = [nsevent keyCode]; // calculate the delta and remember the current modifiers for next time static ulong m_lastKnownModifiers; ulong lastKnownModifiers = m_lastKnownModifiers; - ulong delta = lastKnownModifiers ^ modifiers; - m_lastKnownModifiers = modifiers; + ulong delta = lastKnownModifiers ^ nativeModifiers; + m_lastKnownModifiers = nativeModifiers; struct qt_mac_enum_mapper { @@ -225,11 +231,14 @@ else if (qtCode == Qt::Key_Control) qtCode = Qt::Key_Meta; } - QWindowSystemInterface::handleKeyEvent(m_platformWindow->window(), - timestamp, - (lastKnownModifiers & mac_mask) ? QEvent::KeyRelease : QEvent::KeyPress, - qtCode, - qmodifiers ^ QCocoaKeyMapper::fromCocoaModifiers(mac_mask)); + QWindowSystemInterface::handleExtendedKeyEvent(m_platformWindow->window(), + timestamp, + (lastKnownModifiers & mac_mask) ? QEvent::KeyRelease + : QEvent::KeyPress, + qtCode, + modifiers ^ QCocoaKeyMapper::fromCocoaModifiers(mac_mask), + nativeScanCode, nativeVirtualKey, + nativeModifiers ^ mac_mask); } } |