Bug 1337718 part.3 Make EditorEventListener::KeyPress() take WidgetKeyboardEvent* instead of nsIDOMKeyEvent* r?m_kato draft
authorMasayuki Nakano <masayuki@d-toybox.com>
Wed, 08 Feb 2017 19:50:50 +0900
changeset 481123 9dd0a33b19cadd8e9e0f916de01f8be28e7b40d4
parent 481122 0c6cb143f82a7fff489e8db48e1169ab81553b40
child 481124 2c94b114eeba9e5ebca17debf726bbe10c05a88e
push id44730
push usermasayuki@d-toybox.com
push dateThu, 09 Feb 2017 09:50:16 +0000
reviewersm_kato
bugs1337718
milestone54.0a1
Bug 1337718 part.3 Make EditorEventListener::KeyPress() take WidgetKeyboardEvent* instead of nsIDOMKeyEvent* r?m_kato MozReview-Commit-ID: 49fcZXPSsQ4
editor/libeditor/EditorEventListener.cpp
editor/libeditor/EditorEventListener.h
--- 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);