зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1077345 part.2 Add TextComposition::CloneAndDispatchAs() for dispatching WidgetCompositionEvent only whose message is different from original composition event r=smaug
This commit is contained in:
Родитель
e33c5a94b9
Коммит
8dbdea703b
|
@ -80,21 +80,32 @@ TextComposition::MaybeDispatchCompositionUpdate(
|
||||||
if (mLastData == aCompositionEvent->mData) {
|
if (mLastData == aCompositionEvent->mData) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
CloneAndDispatchAs(aCompositionEvent, NS_COMPOSITION_UPDATE);
|
||||||
|
return IsValidStateForComposition(aCompositionEvent->widget);
|
||||||
|
}
|
||||||
|
|
||||||
WidgetCompositionEvent compositionUpdate(aCompositionEvent->mFlags.mIsTrusted,
|
void
|
||||||
NS_COMPOSITION_UPDATE,
|
TextComposition::CloneAndDispatchAs(
|
||||||
aCompositionEvent->widget);
|
const WidgetCompositionEvent* aCompositionEvent,
|
||||||
compositionUpdate.time = aCompositionEvent->time;
|
uint32_t aMessage)
|
||||||
compositionUpdate.timeStamp = aCompositionEvent->timeStamp;
|
{
|
||||||
compositionUpdate.mData = aCompositionEvent->mData;
|
MOZ_ASSERT(IsValidStateForComposition(aCompositionEvent->widget),
|
||||||
compositionUpdate.mFlags.mIsSynthesizedForTests =
|
"Should be called only when it's safe to dispatch an event");
|
||||||
|
|
||||||
|
WidgetCompositionEvent compositionEvent(aCompositionEvent->mFlags.mIsTrusted,
|
||||||
|
aMessage, aCompositionEvent->widget);
|
||||||
|
compositionEvent.time = aCompositionEvent->time;
|
||||||
|
compositionEvent.timeStamp = aCompositionEvent->timeStamp;
|
||||||
|
compositionEvent.mData = aCompositionEvent->mData;
|
||||||
|
compositionEvent.mFlags.mIsSynthesizedForTests =
|
||||||
aCompositionEvent->mFlags.mIsSynthesizedForTests;
|
aCompositionEvent->mFlags.mIsSynthesizedForTests;
|
||||||
|
|
||||||
nsEventStatus status = nsEventStatus_eConsumeNoDefault;
|
nsEventStatus status = nsEventStatus_eConsumeNoDefault;
|
||||||
mLastData = compositionUpdate.mData;
|
if (aMessage == NS_COMPOSITION_UPDATE) {
|
||||||
|
mLastData = compositionEvent.mData;
|
||||||
|
}
|
||||||
EventDispatcher::Dispatch(mNode, mPresContext,
|
EventDispatcher::Dispatch(mNode, mPresContext,
|
||||||
&compositionUpdate, nullptr, &status, nullptr);
|
&compositionEvent, nullptr, &status, nullptr);
|
||||||
return IsValidStateForComposition(aCompositionEvent->widget);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -275,6 +275,14 @@ private:
|
||||||
bool MaybeDispatchCompositionUpdate(
|
bool MaybeDispatchCompositionUpdate(
|
||||||
const WidgetCompositionEvent* aCompositionEvent);
|
const WidgetCompositionEvent* aCompositionEvent);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CloneAndDispatchAs() dispatches a composition event which is
|
||||||
|
* duplicateed from aCompositionEvent and set the aMessage.
|
||||||
|
*/
|
||||||
|
void CloneAndDispatchAs(
|
||||||
|
const WidgetCompositionEvent* aCompositionEvent,
|
||||||
|
uint32_t aMessage);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If IME has already dispatched compositionend event but it was discarded
|
* If IME has already dispatched compositionend event but it was discarded
|
||||||
* by PresShell due to not safe to dispatch, this returns true.
|
* by PresShell due to not safe to dispatch, this returns true.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче