diff options
author | Prasanth Ullattil <prasanth.ullattil@nokia.com> | 2009-04-17 09:13:34 (GMT) |
---|---|---|
committer | Prasanth Ullattil <prasanth.ullattil@nokia.com> | 2009-04-17 09:19:11 (GMT) |
commit | 5d39d424a92d89243207d8370d0fa1c6c8061668 (patch) | |
tree | f3ef13f76f7d54fce029bccd6fba69d760f08f60 | |
parent | 5ed3f621255079b3688a792c1a964d6cd6cda743 (diff) | |
download | Qt-5d39d424a92d89243207d8370d0fa1c6c8061668.zip Qt-5d39d424a92d89243207d8370d0fa1c6c8061668.tar.gz Qt-5d39d424a92d89243207d8370d0fa1c6c8061668.tar.bz2 |
Line edit displays garbage when pressing up or down arrow keys (Cocoa).
The unicode characters between 0xF700 & 0xF8FF are special function-key
code characters used by the NSEvent. These characters have to be ignored
when converting to a QString.
Task-number:244486
Reviewed-by:nrc
-rw-r--r-- | src/gui/kernel/qt_cocoa_helpers_mac.mm | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm index 9c381b4..52e76d8 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac.mm +++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm @@ -555,12 +555,15 @@ bool qt_dispatchKeyEventWithCocoa(void * /*NSEvent * */ keyEvent, QWidget *widge int keyLength = [keyChars length]; if (keyLength == 0) return false; // Dead Key, nothing to do! + bool ignoreText = false; Qt::Key qtKey = Qt::Key_unknown; if (keyLength == 1) { QChar ch([keyChars characterAtIndex:0]); if (ch.isLower()) ch = ch.toUpper(); qtKey = cocoaKey2QtKey(ch); + // Do not set the text for Function-Key Unicodes characters (0xF700–0xF8FF). + ignoreText = (ch.unicode() >= 0xF700 && ch.unicode() <= 0xF8FF); } Qt::KeyboardModifiers keyMods = qt_cocoaModifiers2QtModifiers([event modifierFlags]); QString text; @@ -568,7 +571,7 @@ bool qt_dispatchKeyEventWithCocoa(void * /*NSEvent * */ keyEvent, QWidget *widge // To quote from the Carbon port: This is actually wrong--but it is the best that // can be done for now because of the Control/Meta mapping issues // (we always get text on the Mac) - if (!(keyMods & (Qt::ControlModifier | Qt::MetaModifier))) + if (!ignoreText && !(keyMods & (Qt::ControlModifier | Qt::MetaModifier))) text = QCFString::toQString(reinterpret_cast<CFStringRef>(keyChars)); UInt32 macScanCode = 1; |