void IMEContentObserver::AttributeWillChange(nsIDocument* aDocument, dom::Element* aElement, int32_t aNameSpaceID, nsIAtom* aAttribute, int32_t aModType) { nsIContent *content = GetContentBR(aElement); mPreAttrChangeLength = content ? ContentEventHandler::GetNativeTextLength(content) : 0; }
void IMEContentObserver::AttributeChanged(nsIDocument* aDocument, dom::Element* aElement, int32_t aNameSpaceID, nsIAtom* aAttribute, int32_t aModType, const nsAttrValue* aOldValue) { mEndOfAddedTextCache.Clear(); mStartOfRemovingTextRangeCache.Clear(); bool causedByComposition = IsEditorHandlingEventForComposition(); if (!mTextChangeData.IsValid() && causedByComposition && !mUpdatePreference.WantChangesCausedByComposition()) { return; } nsIContent *content = GetContentBR(aElement); if (!content) { return; } uint32_t postAttrChangeLength = ContentEventHandler::GetNativeTextLength(content); if (postAttrChangeLength == mPreAttrChangeLength) { return; } uint32_t start; nsresult rv = ContentEventHandler::GetFlatTextOffsetOfRange(mRootContent, content, 0, &start, LINE_BREAK_TYPE_NATIVE); NS_ENSURE_SUCCESS_VOID(rv); TextChangeData data(start, start + mPreAttrChangeLength, start + postAttrChangeLength, causedByComposition); MaybeNotifyIMEOfTextChange(data); }