bool TextComposition::MaybeDispatchCompositionUpdate(const WidgetTextEvent* aEvent) { if (Destroyed()) { return false; } if (mLastData == aEvent->theText) { return true; } WidgetCompositionEvent compositionUpdate(aEvent->mFlags.mIsTrusted, NS_COMPOSITION_UPDATE, aEvent->widget); compositionUpdate.time = aEvent->time; compositionUpdate.timeStamp = aEvent->timeStamp; compositionUpdate.data = aEvent->theText; compositionUpdate.mFlags.mIsSynthesizedForTests = aEvent->mFlags.mIsSynthesizedForTests; nsEventStatus status = nsEventStatus_eConsumeNoDefault; if (aEvent->mFlags.mIsSynthesizedForTests && (mIsRequestingCommit || mIsRequestingCancel)) { // At emulating commit/cancel request, compositionupdate should be // dispatched via widget since it's more similar path to native event. aEvent->widget->DispatchEvent(&compositionUpdate, status); } else { mLastData = compositionUpdate.data; EventDispatcher::Dispatch(mNode, mPresContext, &compositionUpdate, nullptr, &status, nullptr); } return !Destroyed(); }
bool TextComposition::MaybeDispatchCompositionUpdate( const WidgetCompositionEvent* aCompositionEvent) { if (Destroyed()) { return false; } if (mLastData == aCompositionEvent->mData) { return true; } WidgetCompositionEvent compositionUpdate(aCompositionEvent->mFlags.mIsTrusted, NS_COMPOSITION_UPDATE, aCompositionEvent->widget); compositionUpdate.time = aCompositionEvent->time; compositionUpdate.timeStamp = aCompositionEvent->timeStamp; compositionUpdate.mData = aCompositionEvent->mData; compositionUpdate.mFlags.mIsSynthesizedForTests = aCompositionEvent->mFlags.mIsSynthesizedForTests; nsEventStatus status = nsEventStatus_eConsumeNoDefault; mLastData = compositionUpdate.mData; EventDispatcher::Dispatch(mNode, mPresContext, &compositionUpdate, nullptr, &status, nullptr); return !Destroyed(); }