Bug 1337718 part.3 Make EditorEventListener::KeyPress() take WidgetKeyboardEvent* instead of nsIDOMKeyEvent* r?m_kato
MozReview-Commit-ID: 49fcZXPSsQ4
--- a/editor/libeditor/EditorEventListener.cpp
+++ b/editor/libeditor/EditorEventListener.cpp
@@ -401,20 +401,18 @@ EditorEventListener::HandleEvent(nsIDOME
}
// keyup
case eKeyUp: {
nsCOMPtr<nsIDOMKeyEvent> keyEvent = do_QueryInterface(aEvent);
return KeyUp(keyEvent);
}
#endif // #ifdef HANDLE_NATIVE_TEXT_DIRECTION_SWITCH
// keypress
- case eKeyPress: {
- nsCOMPtr<nsIDOMKeyEvent> keyEvent = do_QueryInterface(aEvent);
- return KeyPress(keyEvent);
- }
+ case eKeyPress:
+ return KeyPress(internalEvent->AsKeyboardEvent());
// mousedown
case eMouseDown: {
nsCOMPtr<nsIDOMMouseEvent> mouseEvent = do_QueryInterface(aEvent);
NS_ENSURE_TRUE(mouseEvent, NS_OK);
// EditorEventListener may receive (1) all mousedown, mouseup and click
// events, (2) only mousedown event or (3) only mouseup event.
// mMouseDownOrUpConsumedByIME is used only for ignoring click event if
// preceding mousedown and/or mouseup event is consumed by IME.
@@ -594,58 +592,54 @@ EditorEventListener::KeyDown(nsIDOMKeyEv
// In case the user presses any other key besides Ctrl and Shift
mShouldSwitchTextDirection = false;
}
return NS_OK;
}
#endif
nsresult
-EditorEventListener::KeyPress(nsIDOMKeyEvent* aKeyEvent)
+EditorEventListener::KeyPress(WidgetKeyboardEvent* aKeyboardEvent)
{
- if (NS_WARN_IF(!aKeyEvent)) {
+ if (NS_WARN_IF(!aKeyboardEvent)) {
return NS_OK;
}
RefPtr<EditorBase> editorBase(mEditorBase);
- WidgetKeyboardEvent* keypressEvent =
- aKeyEvent->AsEvent()->WidgetEventPtr()->AsKeyboardEvent();
- MOZ_ASSERT(keypressEvent,
- "DOM key event's internal event must be WidgetKeyboardEvent");
- if (!editorBase->IsAcceptableInputEvent(keypressEvent) ||
- DetachedFromEditorOrDefaultPrevented(keypressEvent)) {
+ if (!editorBase->IsAcceptableInputEvent(aKeyboardEvent) ||
+ DetachedFromEditorOrDefaultPrevented(aKeyboardEvent)) {
return NS_OK;
}
- nsresult rv = editorBase->HandleKeyPressEvent(keypressEvent);
+ nsresult rv = editorBase->HandleKeyPressEvent(aKeyboardEvent);
NS_ENSURE_SUCCESS(rv, rv);
- if (DetachedFromEditorOrDefaultPrevented(keypressEvent)) {
+ if (DetachedFromEditorOrDefaultPrevented(aKeyboardEvent)) {
return NS_OK;
}
- if (!ShouldHandleNativeKeyBindings(keypressEvent)) {
+ if (!ShouldHandleNativeKeyBindings(aKeyboardEvent)) {
return NS_OK;
}
// Now, ask the native key bindings to handle the event.
- nsIWidget* widget = keypressEvent->mWidget;
+ nsIWidget* widget = aKeyboardEvent->mWidget;
// If the event is created by chrome script, the widget is always nullptr.
if (!widget) {
nsCOMPtr<nsIPresShell> ps = GetPresShell();
nsPresContext* pc = ps ? ps->GetPresContext() : nullptr;
widget = pc ? pc->GetNearestWidget() : nullptr;
NS_ENSURE_TRUE(widget, NS_OK);
}
nsCOMPtr<nsIDocument> doc = editorBase->GetDocument();
bool handled = widget->ExecuteNativeKeyBinding(
nsIWidget::NativeKeyBindingsForRichTextEditor,
- *keypressEvent, DoCommandCallback, doc);
+ *aKeyboardEvent, DoCommandCallback, doc);
if (handled) {
- aKeyEvent->AsEvent()->PreventDefault();
+ aKeyboardEvent->PreventDefault();
}
return NS_OK;
}
nsresult
EditorEventListener::MouseClick(nsIDOMMouseEvent* aMouseEvent)
{
if (NS_WARN_IF(!aMouseEvent) || DetachedFromEditor()) {
--- a/editor/libeditor/EditorEventListener.h
+++ b/editor/libeditor/EditorEventListener.h
@@ -55,17 +55,17 @@ protected:
nsresult InstallToEditor();
void UninstallFromEditor();
#ifdef HANDLE_NATIVE_TEXT_DIRECTION_SWITCH
nsresult KeyDown(nsIDOMKeyEvent* aKeyEvent);
nsresult KeyUp(nsIDOMKeyEvent* aKeyEvent);
#endif
- nsresult KeyPress(nsIDOMKeyEvent* aKeyEvent);
+ nsresult KeyPress(WidgetKeyboardEvent* aKeyboardEvent);
nsresult HandleChangeComposition(WidgetCompositionEvent* aCompositionEvent);
nsresult HandleStartComposition(WidgetCompositionEvent* aCompositionEvent);
void HandleEndComposition(WidgetCompositionEvent* aCompositionEvent);
virtual nsresult MouseDown(nsIDOMMouseEvent* aMouseEvent);
virtual nsresult MouseUp(nsIDOMMouseEvent* aMouseEvent) { return NS_OK; }
virtual nsresult MouseClick(nsIDOMMouseEvent* aMouseEvent);
nsresult Focus(WidgetEvent* aFocusEvent);
nsresult Blur(WidgetEvent* aBlurEvent);