diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2018-09-27 16:00:55 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2018-10-04 07:00:30 +0000 |
commit | 28c831fa13db29bd06666abefcb76f5bdf886320 (patch) | |
tree | 07bbbc60324732a2db911c95a4cd6d11110c0e1b /src/plugins/platforms/cocoa | |
parent | 21355b3630882932be940a48a88d8c40cf7ebf63 (diff) |
QCocoaKeyMapper: Properly initialize all members and reset on update
Previously some of the members would have random initial values. Also,
on updateKeyboard() if we don't find usable uchrData, we should just
reset keyboard_layout_format and keyboard_mode, rather than keep the
previous values.
Task-number: QTBUG-50865
Change-Id: I1297fa55bb1593dd549d0bc122713d5d98f7b1fc
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoakeymapper.h | 13 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoakeymapper.mm | 9 |
2 files changed, 10 insertions, 12 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoakeymapper.h b/src/plugins/platforms/cocoa/qcocoakeymapper.h index a75e275077..2624f19978 100644 --- a/src/plugins/platforms/cocoa/qcocoakeymapper.h +++ b/src/plugins/platforms/cocoa/qcocoakeymapper.h @@ -89,15 +89,12 @@ public: void clearMappings(); private: - QCFType<TISInputSourceRef> currentInputSource; + QCFType<TISInputSourceRef> currentInputSource = nullptr; - enum { NullMode, UnicodeMode, OtherMode } keyboard_mode; - union { - const UCKeyboardLayout *unicode; - void *other; - } keyboard_layout_format; - KeyboardLayoutKind keyboard_kind; - UInt32 keyboard_dead; + enum { NullMode, UnicodeMode, OtherMode } keyboard_mode = NullMode; + const UCKeyboardLayout *keyboard_layout_format = nullptr; + KeyboardLayoutKind keyboard_kind = kKLKCHRuchrKind; + UInt32 keyboard_dead = 0; KeyboardLayoutItem *keyLayout[256]; }; diff --git a/src/plugins/platforms/cocoa/qcocoakeymapper.mm b/src/plugins/platforms/cocoa/qcocoakeymapper.mm index 5e279a400b..c18b7d6bc0 100644 --- a/src/plugins/platforms/cocoa/qcocoakeymapper.mm +++ b/src/plugins/platforms/cocoa/qcocoakeymapper.mm @@ -341,8 +341,6 @@ static int qt_mac_get_key(int modif, const QChar &key, int virtualKey) QCocoaKeyMapper::QCocoaKeyMapper() { memset(keyLayout, 0, sizeof(keyLayout)); - keyboard_layout_format.unicode = 0; - currentInputSource = 0; } QCocoaKeyMapper::~QCocoaKeyMapper() @@ -371,8 +369,11 @@ bool QCocoaKeyMapper::updateKeyboard() keyboard_kind = LMGetKbdType(); if (uchrData) { - keyboard_layout_format.unicode = uchrData; + keyboard_layout_format = uchrData; keyboard_mode = UnicodeMode; + } else { + keyboard_layout_format = nullptr; + keyboard_mode = NullMode; } currentInputSource = source; keyboard_dead = 0; @@ -414,7 +415,7 @@ void QCocoaKeyMapper::updateKeyMap(unsigned short macVirtualKey, QChar unicodeKe keyLayout[macVirtualKey]->qtKey[i] = 0; const UInt32 keyModifier = ((qt_mac_get_mac_modifiers(ModsTbl[i]) >> 8) & 0xFF); - OSStatus err = UCKeyTranslate(keyboard_layout_format.unicode, macVirtualKey, kUCKeyActionDown, keyModifier, + OSStatus err = UCKeyTranslate(keyboard_layout_format, macVirtualKey, kUCKeyActionDown, keyModifier, keyboard_kind, 0, &keyboard_dead, buffer_size, &out_buffer_size, buffer); if (err == noErr && out_buffer_size) { const QChar unicode(buffer[0]); |