author | Masayuki Nakano <masayuki@d-toybox.com> |
Fri, 30 Sep 2016 15:32:10 +0900 | |
changeset 316359 | bb92cb94dcac0e4c968d6c712ef1fded2b5d6567 |
parent 316358 | 54940e9b9a1b663c95782dde5d6e8aa02caa7231 |
child 316360 | 2e45f263fb199c054454f1c841160a7ff01c7173 |
push id | 30770 |
push user | kwierso@gmail.com |
push date | Wed, 05 Oct 2016 00:00:48 +0000 |
treeherder | mozilla-central@3470e326025c [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | m_kato |
bugs | 1306549 |
milestone | 52.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
widget/windows/KeyboardLayout.cpp | file | annotate | diff | comparison | revisions | |
widget/windows/KeyboardLayout.h | file | annotate | diff | comparison | revisions |
--- a/widget/windows/KeyboardLayout.cpp +++ b/widget/windows/KeyboardLayout.cpp @@ -3648,44 +3648,43 @@ KeyboardLayout::InitNativeKey(NativeKey& } MOZ_ASSERT(virtualKey != VK_PACKET, "At handling VK_PACKET, we shouldn't refer keyboard layout"); MOZ_ASSERT(aNativeKey.mKeyNameIndex == KEY_NAME_INDEX_USE_STRING, "Printable key's key name index must be KEY_NAME_INDEX_USE_STRING"); bool isKeyDown = aNativeKey.IsKeyDownMessage(); - uint8_t shiftState = - VirtualKey::ModifiersToShiftState(aModKeyState.GetModifiers()); if (IsDeadKey(virtualKey, aModKeyState)) { if ((isKeyDown && mActiveDeadKey < 0) || (!isKeyDown && mActiveDeadKey == virtualKey)) { // First dead key event doesn't generate characters. if (isKeyDown) { // Dead-key state activated at keydown. mActiveDeadKey = virtualKey; - mDeadKeyShiftState = shiftState; + mDeadKeyShiftState = + VirtualKey::ModifierKeyStateToShiftState(aModKeyState); } UniCharsAndModifiers deadChars = - mVirtualKeys[virtualKeyIndex].GetNativeUniChars(shiftState); + mVirtualKeys[virtualKeyIndex].GetNativeUniChars(aModKeyState); NS_ASSERTION(deadChars.mLength == 1, "dead key must generate only one character"); aNativeKey.mKeyNameIndex = KEY_NAME_INDEX_Dead; return; } // At keydown message handling, we need to forget the first dead key // because there is no guarantee coming WM_KEYUP for the second dead // key before next WM_KEYDOWN. E.g., due to auto key repeat or pressing // another dead key before releasing current key. Therefore, we can // set only a character for current key for keyup event. if (mActiveDeadKey < 0) { aNativeKey.mCommittedCharsAndModifiers = - mVirtualKeys[virtualKeyIndex].GetUniChars(shiftState); + mVirtualKeys[virtualKeyIndex].GetUniChars(aModKeyState); return; } int32_t activeDeadKeyIndex = GetKeyIndex(mActiveDeadKey); if (activeDeadKeyIndex < 0 || activeDeadKeyIndex >= NS_NUM_OF_KEYS) { #if defined(DEBUG) || defined(MOZ_CRASHREPORTER) nsPrintfCString warning("The virtual key index (%d) of mActiveDeadKey " "(0x%02X) is not a printable key (virtualKey=" @@ -3706,31 +3705,31 @@ KeyboardLayout::InitNativeKey(NativeKey& return; } // Otherwise, dead key followed by another dead key causes inputting both // character. UniCharsAndModifiers prevDeadChars = mVirtualKeys[activeDeadKeyIndex].GetUniChars(mDeadKeyShiftState); UniCharsAndModifiers newChars = - mVirtualKeys[virtualKeyIndex].GetUniChars(shiftState); + mVirtualKeys[virtualKeyIndex].GetUniChars(aModKeyState); // But keypress events should be fired for each committed character. aNativeKey.mCommittedCharsAndModifiers = prevDeadChars + newChars; if (isKeyDown) { DeactivateDeadKeyState(); } return; } if (MaybeInitNativeKeyWithCompositeChar(aNativeKey, aModKeyState)) { return; } UniCharsAndModifiers baseChars = - mVirtualKeys[virtualKeyIndex].GetUniChars(shiftState); + mVirtualKeys[virtualKeyIndex].GetUniChars(aModKeyState); if (mActiveDeadKey < 0) { // No dead-keys are active. Just return the produced characters. aNativeKey.mCommittedCharsAndModifiers = baseChars; return; } int32_t activeDeadKeyIndex = GetKeyIndex(mActiveDeadKey); if (NS_WARN_IF(activeDeadKeyIndex < 0)) { @@ -3741,18 +3740,16 @@ KeyboardLayout::InitNativeKey(NativeKey& // Return dead-key character followed by base character. UniCharsAndModifiers deadChars = mVirtualKeys[activeDeadKeyIndex].GetUniChars(mDeadKeyShiftState); // But keypress events should be fired for each committed character. aNativeKey.mCommittedCharsAndModifiers = deadChars + baseChars; if (isKeyDown) { DeactivateDeadKeyState(); } - - return; } bool KeyboardLayout::MaybeInitNativeKeyWithCompositeChar( NativeKey& aNativeKey, const ModifierKeyState& aModKeyState) { if (mActiveDeadKey < 0) { @@ -3764,21 +3761,18 @@ KeyboardLayout::MaybeInitNativeKeyWithCo return false; } int32_t virtualKeyIndex = GetKeyIndex(aNativeKey.mOriginalVirtualKeyCode); if (NS_WARN_IF(virtualKeyIndex < 0)) { return false; } - uint8_t shiftState = - VirtualKey::ModifiersToShiftState(aModKeyState.GetModifiers()); - UniCharsAndModifiers baseChars = - mVirtualKeys[virtualKeyIndex].GetUniChars(shiftState); + mVirtualKeys[virtualKeyIndex].GetUniChars(aModKeyState); if (baseChars.IsEmpty() || !baseChars.mChars[0]) { return false; } char16_t compositeChar = mVirtualKeys[activeDeadKeyIndex].GetCompositeChar(mDeadKeyShiftState, baseChars.mChars[0]); if (!compositeChar) {
--- a/widget/windows/KeyboardLayout.h +++ b/widget/windows/KeyboardLayout.h @@ -113,16 +113,21 @@ public: STATE_CONTROL = 0x02, STATE_ALT = 0x04, STATE_CAPSLOCK = 0x08 }; typedef uint8_t ShiftState; static ShiftState ModifiersToShiftState(Modifiers aModifiers); + static ShiftState ModifierKeyStateToShiftState( + const ModifierKeyState& aModKeyState) + { + return ModifiersToShiftState(aModKeyState.GetModifiers()); + } static Modifiers ShiftStateToModifiers(ShiftState aShiftState); private: union KeyShiftState { struct { char16_t Chars[4]; @@ -162,18 +167,33 @@ public: void SetNormalChars(ShiftState aShiftState, const char16_t* aChars, uint32_t aNumOfChars); void SetDeadChar(ShiftState aShiftState, char16_t aDeadChar); const DeadKeyTable* MatchingDeadKeyTable(const DeadKeyEntry* aDeadKeyArray, uint32_t aEntries) const; inline char16_t GetCompositeChar(ShiftState aShiftState, char16_t aBaseChar) const; + char16_t GetCompositeChar(const ModifierKeyState& aModKeyState, + char16_t aBaseChar) const + { + return GetCompositeChar(ModifierKeyStateToShiftState(aModKeyState), + aBaseChar); + } UniCharsAndModifiers GetNativeUniChars(ShiftState aShiftState) const; + UniCharsAndModifiers GetNativeUniChars( + const ModifierKeyState& aModKeyState) const + { + return GetNativeUniChars(ModifierKeyStateToShiftState(aModKeyState)); + } UniCharsAndModifiers GetUniChars(ShiftState aShiftState) const; + UniCharsAndModifiers GetUniChars(const ModifierKeyState& aModKeyState) const + { + return GetUniChars(ModifierKeyStateToShiftState(aModKeyState)); + } }; class MOZ_STACK_CLASS NativeKey final { friend class KeyboardLayout; public: struct FakeCharMsg