Beispiel #1
0
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();
}