Issue #12 Part 1: Stop using nsIDOMEvent in UpdateIMEComposition.

This commit is contained in:
wolfbeast 2018-06-26 13:26:07 +02:00 committed by Roy Tam
commit 32326ee192
4 changed files with 22 additions and 14 deletions

View file

@ -247,7 +247,8 @@ public:
* IME event handlers.
*/
virtual nsresult BeginIMEComposition(WidgetCompositionEvent* aEvent);
virtual nsresult UpdateIMEComposition(nsIDOMEvent* aDOMTextEvent) = 0;
virtual nsresult UpdateIMEComposition(
WidgetCompositionEvent* aCompositionChangeEvent) = 0;
void EndIMEComposition();
void SwitchTextDirectionTo(uint32_t aDirection);

View file

@ -791,7 +791,11 @@ EditorEventListener::HandleText(nsIDOMEvent* aTextEvent)
return NS_OK;
}
return mEditorBase->UpdateIMEComposition(aTextEvent);
// AsCompositionEvent() should always return non-nullptr. Anyway, it'll be
// checked in TextEditor::UpdateIMEComposition().
WidgetCompositionEvent* compositionChangeEvent =
aTextEvent->WidgetEventPtr()->AsCompositionEvent();
return mEditorBase->UpdateIMEComposition(compositionChangeEvent);
}
/**

View file

@ -834,17 +834,19 @@ TextEditor::BeginIMEComposition(WidgetCompositionEvent* aEvent)
}
nsresult
TextEditor::UpdateIMEComposition(nsIDOMEvent* aDOMTextEvent)
TextEditor::UpdateIMEComposition(WidgetCompositionEvent* aCompositionChangeEvent)
{
MOZ_ASSERT(aDOMTextEvent, "aDOMTextEvent must not be nullptr");
MOZ_ASSERT(aCompsitionChangeEvent,
"aCompositionChangeEvent must not be nullptr");
WidgetCompositionEvent* compositionChangeEvent =
aDOMTextEvent->WidgetEventPtr()->AsCompositionEvent();
NS_ENSURE_TRUE(compositionChangeEvent, NS_ERROR_INVALID_ARG);
MOZ_ASSERT(compositionChangeEvent->mMessage == eCompositionChange,
"The internal event should be eCompositionChange");
if (NS_WARN_IF(!aCompositionChangeEvent)) {
return NS_ERROR_INVALID_ARG;
}
if (!EnsureComposition(compositionChangeEvent)) {
MOZ_ASSERT(aCompositionChangeEvent->mMessage == eCompositionChange,
"The event should be eCompositionChange");
if (!EnsureComposition(aCompositionChangeEvent)) {
return NS_OK;
}
@ -865,7 +867,7 @@ TextEditor::UpdateIMEComposition(nsIDOMEvent* aDOMTextEvent)
MOZ_ASSERT(!mPlaceHolderBatch,
"UpdateIMEComposition() must be called without place holder batch");
TextComposition::CompositionChangeEventHandlingMarker
compositionChangeEventHandlingMarker(mComposition, compositionChangeEvent);
compositionChangeEventHandlingMarker(mComposition, aCompositionChangeEvent);
NotifyEditorObservers(eNotifyEditorObserversOfBefore);
@ -875,7 +877,7 @@ TextEditor::UpdateIMEComposition(nsIDOMEvent* aDOMTextEvent)
{
AutoPlaceHolderBatch batch(this, nsGkAtoms::IMETxnName);
rv = InsertText(compositionChangeEvent->mData);
rv = InsertText(aCompositionChangeEvent->mData);
if (caretP) {
caretP->SetSelection(selection);
@ -887,7 +889,7 @@ TextEditor::UpdateIMEComposition(nsIDOMEvent* aDOMTextEvent)
// compositionend event, we don't need to notify editor observes of this
// change.
// NOTE: We must notify after the auto batch will be gone.
if (!compositionChangeEvent->IsFollowedByCompositionEnd()) {
if (!aCompositionChangeEvent->IsFollowedByCompositionEnd()) {
NotifyEditorObservers(eNotifyEditorObserversOfEnd);
}

View file

@ -130,7 +130,8 @@ public:
virtual already_AddRefed<dom::EventTarget> GetDOMEventTarget() override;
virtual nsresult BeginIMEComposition(WidgetCompositionEvent* aEvent) override;
virtual nsresult UpdateIMEComposition(nsIDOMEvent* aTextEvent) override;
virtual nsresult UpdateIMEComposition(
WidgetCompositionEvent* aCompositionChangeEvent) override;
virtual already_AddRefed<nsIContent> GetInputEventTargetContent() override;