Use [NSEvent characters] to retrieve the input character.
This is how it was done in Qt 4. An issue with the current approach was that it did not consider modifiers when setting a Qt::Key_* value, which would assign the same Qt keycode for: a = a(65) Alt + a = ā(65) [here it should return a unicode value for 'ā'] This is inconsistent with the other platform plugins. Also in the combination with a dead keys it was returning nothing in the output. Task-number: QTBUG-29005 Change-Id: Ic28eb55b3a9798ecb6012cc2e3fb18589b8b0392 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com> Reviewed-by: Cyril Oblikov <munknex@gmail.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
This commit is contained in:
parent
87e27eb870
commit
3f46b03a66
@ -869,7 +869,6 @@ static QTouchDevice *touchDevice = 0;
|
||||
ulong timestamp = [nsevent timestamp] * 1000;
|
||||
ulong nativeModifiers = [nsevent modifierFlags];
|
||||
Qt::KeyboardModifiers modifiers = [QNSView convertKeyModifiers: nativeModifiers];
|
||||
NSString *charactersIgnoringModifiers = [nsevent charactersIgnoringModifiers];
|
||||
NSString *characters = [nsevent characters];
|
||||
|
||||
// There is no way to get the scan code from carbon/cocoa. But we cannot
|
||||
@ -878,19 +877,11 @@ static QTouchDevice *touchDevice = 0;
|
||||
quint32 nativeScanCode = 1;
|
||||
quint32 nativeVirtualKey = [nsevent keyCode];
|
||||
|
||||
QChar ch;
|
||||
int keyCode;
|
||||
if ([charactersIgnoringModifiers length] > 0) { // convert the first character into a key code
|
||||
if ((modifiers & Qt::ControlModifier) && ([characters length] != 0)) {
|
||||
ch = QChar([characters characterAtIndex:0]);
|
||||
} else {
|
||||
ch = QChar([charactersIgnoringModifiers characterAtIndex:0]);
|
||||
}
|
||||
QChar ch = QChar::ReplacementCharacter;
|
||||
int keyCode = Qt::Key_unknown;
|
||||
if ([characters length] != 0) {
|
||||
ch = QChar([characters characterAtIndex:0]);
|
||||
keyCode = [self convertKeyCode:ch];
|
||||
} else {
|
||||
// might be a dead key
|
||||
ch = QChar::ReplacementCharacter;
|
||||
keyCode = Qt::Key_unknown;
|
||||
}
|
||||
|
||||
// we will send a key event unless the input method sets m_sendKeyEvent to false
|
||||
@ -900,7 +891,7 @@ static QTouchDevice *touchDevice = 0;
|
||||
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))
|
||||
if (ch.unicode() < 0xf700 || ch.unicode() > 0xf8ff)
|
||||
text = QCFString::toQString(characters);
|
||||
|
||||
if (m_composingText.isEmpty())
|
||||
|
Loading…
x
Reference in New Issue
Block a user