From 1e9d12bfdb601793889f4029e4bcaeb82c03fc39 Mon Sep 17 00:00:00 2001 From: Masayuki Nakano Date: Thu, 28 Jan 2016 13:28:53 +0900 Subject: [PATCH] Bug 1242331 part.3 Rename TextChangeDataBase::mOccurredDuringComposition to mIncludingChangesDuringComposition r=smaug --- dom/events/IMEContentObserver.cpp | 9 ++++++--- widget/IMEData.h | 9 +++++++-- widget/nsBaseWidget.cpp | 21 +++++++++++++++++---- widget/nsGUIEventIPC.h | 4 ++-- widget/windows/TSFTextStore.cpp | 5 +++-- 5 files changed, 35 insertions(+), 13 deletions(-) diff --git a/dom/events/IMEContentObserver.cpp b/dom/events/IMEContentObserver.cpp index d4bee89b99fd..47a9f6fb0592 100644 --- a/dom/events/IMEContentObserver.cpp +++ b/dom/events/IMEContentObserver.cpp @@ -134,9 +134,12 @@ public: return; } AppendPrintf("{ mStartOffset=%u, mRemovedEndOffset=%u, mAddedEndOffset=%u, " - "mCausedOnlyByComposition=%s }", aData.mStartOffset, - aData.mRemovedEndOffset, aData.mAddedEndOffset, - ToChar(aData.mCausedOnlyByComposition)); + "mCausedOnlyByComposition=%s, " + "mIncludingChangesDuringComposition=%s }", + aData.mStartOffset, aData.mRemovedEndOffset, + aData.mAddedEndOffset, + ToChar(aData.mCausedOnlyByComposition), + ToChar(aData.mIncludingChangesDuringComposition)); } virtual ~TextChangeDataToString() {} }; diff --git a/widget/IMEData.h b/widget/IMEData.h index 61eb38b97e30..0e549ddec957 100644 --- a/widget/IMEData.h +++ b/widget/IMEData.h @@ -731,7 +731,11 @@ struct IMENotification final // mCausedOnlyByComposition is true only when *all* merged changes are // caused by composition. bool mCausedOnlyByComposition; - bool mOccurredDuringComposition; + // mIncludingChangesDuringComposition is true if at least one change which + // is not caused by composition occurred during the last composition. + // Note that if after the last composition is finished and there are some + // changes not caused by composition, this is set to false. + bool mIncludingChangesDuringComposition; uint32_t OldLength() const { @@ -803,7 +807,8 @@ struct IMENotification final mRemovedEndOffset = aRemovedEndOffset; mAddedEndOffset = aAddedEndOffset; mCausedOnlyByComposition = aCausedByComposition; - mOccurredDuringComposition = aOccurredDuringComposition; + mIncludingChangesDuringComposition = + !aCausedByComposition && aOccurredDuringComposition; } }; diff --git a/widget/nsBaseWidget.cpp b/widget/nsBaseWidget.cpp index 1babc2408ffa..83f969bedf3f 100644 --- a/widget/nsBaseWidget.cpp +++ b/widget/nsBaseWidget.cpp @@ -2169,10 +2169,23 @@ IMENotification::TextChangeDataBase::MergeWith( // by composition. mCausedOnlyByComposition = newData.mCausedOnlyByComposition && oldData.mCausedOnlyByComposition; - // mOccurredDuringComposition should be true only when all changes occurred - // during composition. - mOccurredDuringComposition = - newData.mOccurredDuringComposition && oldData.mOccurredDuringComposition; + // mIncludingChangesDuringComposition should be true when at least one of + // the merged non-composition changes occurred during the latest composition. + + if (!newData.mCausedOnlyByComposition && + !newData.mIncludingChangesDuringComposition) { + // If new change is neither caused by composition nor occurred during + // composition, set mIncludingChangesDuringComposition to false because + // IME doesn't want outdated text changes as text change during current + // composition. + mIncludingChangesDuringComposition = false; + } else { + // Otherwise, set mIncludingChangesDuringComposition to true if either + // oldData or newData includes changes during composition. + mIncludingChangesDuringComposition = + newData.mIncludingChangesDuringComposition || + oldData.mIncludingChangesDuringComposition; + } if (newData.mStartOffset >= oldData.mAddedEndOffset) { // Case 1: diff --git a/widget/nsGUIEventIPC.h b/widget/nsGUIEventIPC.h index 13fdf89e4d04..ff654a4c3fe2 100644 --- a/widget/nsGUIEventIPC.h +++ b/widget/nsGUIEventIPC.h @@ -786,7 +786,7 @@ struct ParamTraits WriteParam(aMsg, aParam.mRemovedEndOffset); WriteParam(aMsg, aParam.mAddedEndOffset); WriteParam(aMsg, aParam.mCausedOnlyByComposition); - WriteParam(aMsg, aParam.mOccurredDuringComposition); + WriteParam(aMsg, aParam.mIncludingChangesDuringComposition); } static bool Read(const Message* aMsg, void** aIter, paramType* aResult) @@ -795,7 +795,7 @@ struct ParamTraits ReadParam(aMsg, aIter, &aResult->mRemovedEndOffset) && ReadParam(aMsg, aIter, &aResult->mAddedEndOffset) && ReadParam(aMsg, aIter, &aResult->mCausedOnlyByComposition) && - ReadParam(aMsg, aIter, &aResult->mOccurredDuringComposition); + ReadParam(aMsg, aIter, &aResult->mIncludingChangesDuringComposition); } }; diff --git a/widget/windows/TSFTextStore.cpp b/widget/windows/TSFTextStore.cpp index e7a7c9c6cf05..e39889df4fe0 100644 --- a/widget/windows/TSFTextStore.cpp +++ b/widget/windows/TSFTextStore.cpp @@ -4605,14 +4605,15 @@ TSFTextStore::OnTextChangeInternal(const IMENotification& aIMENotification) ("TSF: 0x%p TSFTextStore::OnTextChangeInternal(aIMENotification={ " "mMessage=0x%08X, mTextChangeData={ mStartOffset=%lu, " "mRemovedEndOffset=%lu, mAddedEndOffset=%lu, " - "mCausedOnlyByComposition=%s, mOccurredDuringComposition=%s }), " + "mCausedOnlyByComposition=%s, " + "mIncludingChangesDuringComposition=%s }), " "mSink=0x%p, mSinkMask=%s, mComposition.IsComposing()=%s", this, aIMENotification.mMessage, textChangeData.mStartOffset, textChangeData.mRemovedEndOffset, textChangeData.mAddedEndOffset, GetBoolName(textChangeData.mCausedOnlyByComposition), - GetBoolName(textChangeData.mOccurredDuringComposition), + GetBoolName(textChangeData.mIncludingChangesDuringComposition), mSink.get(), GetSinkMaskNameStr(mSinkMask).get(), GetBoolName(mComposition.IsComposing())));