author | Masayuki Nakano <masayuki@d-toybox.com> |
Mon, 11 Jan 2016 17:25:43 +0900 | |
changeset 279346 | 43eaceeb5a48a961daa219895e1e8ee4f6975467 |
parent 279345 | 5e658e7ae8dedf177e5eed21313cdd74be732c8e |
child 279347 | 6aee0abef4656489d6da543c1bc50384a776420e |
push id | 70040 |
push user | masayuki@d-toybox.com |
push date | Mon, 11 Jan 2016 08:25:44 +0000 |
treeherder | mozilla-inbound@43eaceeb5a48 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | emk |
bugs | 1208977 |
milestone | 46.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
|
--- a/widget/windows/TSFTextStore.cpp +++ b/widget/windows/TSFTextStore.cpp @@ -3539,54 +3539,54 @@ TSFTextStore::GetTextExt(TsViewCookie vc mLockedContent.IsLayoutChangedAfter(acpEnd)) { const Selection& currentSel = CurrentSelection(); // The bug of Microsoft Office IME 2010 for Japanese is similar to // MS-IME for Win 8.1 and Win 10. Newer version of MS Office IME is not // released yet. So, we can hack it without prefs because there must be // no developers who want to disable this hack for tests. const bool kIsMSOfficeJapaneseIME2010 = kSink->IsMSOfficeJapaneseIME2010Active(); + // MS IME for Japanese doesn't support asynchronous handling at deciding + // its suggest list window position. The feature was implemented + // starting from Windows 8. And also we may meet same trouble in e10s + // mode on Win7. So, we should never return TS_E_NOLAYOUT to MS IME for + // Japanese. if (kIsMSOfficeJapaneseIME2010 || ((sDoNotReturnNoLayoutErrorToMSJapaneseIMEAtFirstChar || sDoNotReturnNoLayoutErrorToMSJapaneseIMEAtCaret) && kSink->IsMSJapaneseIMEActive())) { - // MS IME for Japanese doesn't support asynchronous handling at deciding - // its suggest list window position. The feature was implemented - // starting from Windows 8. - if (IsWin8OrLater() || kIsMSOfficeJapaneseIME2010) { - // Basically, MS-IME tries to retrieve whole composition string rect - // at deciding suggest window immediately after unlocking the document. - // However, in e10s mode, the content hasn't updated yet in most cases. - // Therefore, if the first character at the retrieving range rect is - // available, we should use it as the result. - if ((kIsMSOfficeJapaneseIME2010 || - sDoNotReturnNoLayoutErrorToMSJapaneseIMEAtFirstChar) && - !mLockedContent.IsLayoutChangedAfter(acpStart) && - acpStart < acpEnd) { - acpEnd = acpStart; - MOZ_LOG(sTextStoreLog, LogLevel::Debug, - ("TSF: 0x%p TSFTextStore::GetTextExt() hacked the offsets " - "of the first character of changing range of the composition " - "string for TIP acpStart=%d, acpEnd=%d", - this, acpStart, acpEnd)); - } - // Although, the condition is not clear, MS-IME sometimes retrieves the - // caret rect immediately after modifying the composition string but - // before unlocking the document. In such case, we should return the - // nearest character rect. - else if ((kIsMSOfficeJapaneseIME2010 || - sDoNotReturnNoLayoutErrorToMSJapaneseIMEAtCaret) && - acpStart == acpEnd && - currentSel.IsCollapsed() && currentSel.EndOffset() == acpEnd) { - acpEnd = acpStart = mLockedContent.MinOffsetOfLayoutChanged(); - MOZ_LOG(sTextStoreLog, LogLevel::Debug, - ("TSF: 0x%p TSFTextStore::GetTextExt() hacked the offsets " - "of the caret of the composition string for TIP acpStart=%d, " - "acpEnd=%d", this, acpStart, acpEnd)); - } + // Basically, MS-IME tries to retrieve whole composition string rect + // at deciding suggest window immediately after unlocking the document. + // However, in e10s mode, the content hasn't updated yet in most cases. + // Therefore, if the first character at the retrieving range rect is + // available, we should use it as the result. + if ((kIsMSOfficeJapaneseIME2010 || + sDoNotReturnNoLayoutErrorToMSJapaneseIMEAtFirstChar) && + !mLockedContent.IsLayoutChangedAfter(acpStart) && + acpStart < acpEnd) { + acpEnd = acpStart; + MOZ_LOG(sTextStoreLog, LogLevel::Debug, + ("TSF: 0x%p TSFTextStore::GetTextExt() hacked the offsets " + "of the first character of changing range of the composition " + "string for TIP acpStart=%d, acpEnd=%d", + this, acpStart, acpEnd)); + } + // Although, the condition is not clear, MS-IME sometimes retrieves the + // caret rect immediately after modifying the composition string but + // before unlocking the document. In such case, we should return the + // nearest character rect. + else if ((kIsMSOfficeJapaneseIME2010 || + sDoNotReturnNoLayoutErrorToMSJapaneseIMEAtCaret) && + acpStart == acpEnd && + currentSel.IsCollapsed() && currentSel.EndOffset() == acpEnd) { + acpEnd = acpStart = mLockedContent.MinOffsetOfLayoutChanged(); + MOZ_LOG(sTextStoreLog, LogLevel::Debug, + ("TSF: 0x%p TSFTextStore::GetTextExt() hacked the offsets " + "of the caret of the composition string for TIP acpStart=%d, " + "acpEnd=%d", this, acpStart, acpEnd)); } } // Free ChangJie 2010 and Easy Changjei 1.0.12.0 doesn't handle // ITfContextView::GetTextExt() properly. Prehaps, it's due to the bug of // TSF. We need to check if this is necessary on Windows 10 before // disabling this on Windows 10. else if ((sDoNotReturnNoLayoutErrorToFreeChangJie && kSink->IsFreeChangJieActive()) ||