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. * IME event handlers.
*/ */
virtual nsresult BeginIMEComposition(WidgetCompositionEvent* aEvent); virtual nsresult BeginIMEComposition(WidgetCompositionEvent* aEvent);
virtual nsresult UpdateIMEComposition(nsIDOMEvent* aDOMTextEvent) = 0; virtual nsresult UpdateIMEComposition(
WidgetCompositionEvent* aCompositionChangeEvent) = 0;
void EndIMEComposition(); void EndIMEComposition();
void SwitchTextDirectionTo(uint32_t aDirection); void SwitchTextDirectionTo(uint32_t aDirection);

View file

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

View file

@ -130,7 +130,8 @@ public:
virtual already_AddRefed<dom::EventTarget> GetDOMEventTarget() override; virtual already_AddRefed<dom::EventTarget> GetDOMEventTarget() override;
virtual nsresult BeginIMEComposition(WidgetCompositionEvent* aEvent) 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; virtual already_AddRefed<nsIContent> GetInputEventTargetContent() override;