diff --git a/widget/InputData.cpp b/widget/InputData.cpp index 273970cf0bba..957af5d4bc3c 100644 --- a/widget/InputData.cpp +++ b/widget/InputData.cpp @@ -96,7 +96,8 @@ MultiTouchInput::MultiTouchInput(const WidgetTouchEvent& aTouchEvent) aTouchEvent.mModifiers), mHandledByAPZ(aTouchEvent.mFlags.mHandledByAPZ), mButton(aTouchEvent.mButton), - mButtons(aTouchEvent.mButtons) { + mButtons(aTouchEvent.mButtons), + mInputSource(aTouchEvent.mInputSource) { MOZ_ASSERT(NS_IsMainThread(), "Can only copy from WidgetTouchEvent on main thread"); @@ -154,13 +155,12 @@ void MultiTouchInput::Translate(const ScreenPoint& aTranslation) { } } -WidgetTouchEvent MultiTouchInput::ToWidgetEvent(nsIWidget* aWidget, - uint16_t aInputSource) const { +WidgetTouchEvent MultiTouchInput::ToWidgetEvent(nsIWidget* aWidget) const { MOZ_ASSERT(NS_IsMainThread(), "Can only convert To WidgetTouchEvent on main thread"); - MOZ_ASSERT(aInputSource == + MOZ_ASSERT(mInputSource == mozilla::dom::MouseEvent_Binding::MOZ_SOURCE_TOUCH || - aInputSource == mozilla::dom::MouseEvent_Binding::MOZ_SOURCE_PEN); + mInputSource == mozilla::dom::MouseEvent_Binding::MOZ_SOURCE_PEN); EventMessage touchEventMessage = eVoidEvent; switch (mType) { @@ -192,7 +192,7 @@ WidgetTouchEvent MultiTouchInput::ToWidgetEvent(nsIWidget* aWidget, event.mFlags.mHandledByAPZ = mHandledByAPZ; event.mFocusSequenceNumber = mFocusSequenceNumber; event.mLayersId = mLayersId; - event.mInputSource = aInputSource; + event.mInputSource = mInputSource; event.mButton = mButton; event.mButtons = mButtons; diff --git a/widget/InputData.h b/widget/InputData.h index a7231db0e850..c167e1ecbac8 100644 --- a/widget/InputData.h +++ b/widget/InputData.h @@ -229,10 +229,7 @@ class MultiTouchInput : public InputData { void Translate(const ScreenPoint& aTranslation); - WidgetTouchEvent ToWidgetEvent( - nsIWidget* aWidget, - uint16_t aInputSource = - /* MouseEvent_Binding::MOZ_SOURCE_TOUCH = */ 5) const; + WidgetTouchEvent ToWidgetEvent(nsIWidget* aWidget) const; // Return the index into mTouches of the SingleTouchData with the given // identifier, or -1 if there is no such SingleTouchData. @@ -252,6 +249,7 @@ class MultiTouchInput : public InputData { // WidgetMouseEventBase, except mButton defaults to -1 to follow PointerEvent. int16_t mButton = eNotPressed; int16_t mButtons = 0; + uint16_t mInputSource = /* MouseEvent_Binding::MOZ_SOURCE_TOUCH = */ 5; }; class MouseInput : public InputData { diff --git a/widget/nsBaseWidget.cpp b/widget/nsBaseWidget.cpp index bb456a4141ca..74767edbd09f 100644 --- a/widget/nsBaseWidget.cpp +++ b/widget/nsBaseWidget.cpp @@ -1213,12 +1213,12 @@ class DispatchInputOnControllerThread : public Runnable { const APZOnly mAPZOnly; }; -void nsBaseWidget::DispatchTouchInput(MultiTouchInput& aInput, - uint16_t aInputSource) { +void nsBaseWidget::DispatchTouchInput(MultiTouchInput& aInput) { MOZ_ASSERT(NS_IsMainThread()); - MOZ_ASSERT(aInputSource == + MOZ_ASSERT(aInput.mInputSource == mozilla::dom::MouseEvent_Binding::MOZ_SOURCE_TOUCH || - aInputSource == mozilla::dom::MouseEvent_Binding::MOZ_SOURCE_PEN); + aInput.mInputSource == + mozilla::dom::MouseEvent_Binding::MOZ_SOURCE_PEN); if (mAPZC) { MOZ_ASSERT(APZThreadUtils::IsControllerThread()); @@ -1227,10 +1227,10 @@ void nsBaseWidget::DispatchTouchInput(MultiTouchInput& aInput, return; } - WidgetTouchEvent event = aInput.ToWidgetEvent(this, aInputSource); + WidgetTouchEvent event = aInput.ToWidgetEvent(this); ProcessUntransformedAPZEvent(&event, result); } else { - WidgetTouchEvent event = aInput.ToWidgetEvent(this, aInputSource); + WidgetTouchEvent event = aInput.ToWidgetEvent(this); nsEventStatus status; DispatchEvent(&event, status); diff --git a/widget/nsBaseWidget.h b/widget/nsBaseWidget.h index 6cb2dfe87af0..285c87c49fa2 100644 --- a/widget/nsBaseWidget.h +++ b/widget/nsBaseWidget.h @@ -621,10 +621,7 @@ class nsBaseWidget : public nsIWidget, public nsSupportsWeakReference { * be called from the main thread, and if APZ is enabled, that must also be * the APZ controller thread. */ - void DispatchTouchInput( - mozilla::MultiTouchInput& aInput, - uint16_t aInputSource = - mozilla::dom::MouseEvent_Binding::MOZ_SOURCE_TOUCH); + void DispatchTouchInput(mozilla::MultiTouchInput& aInput); /** * Dispatch the given PanGestureInput through APZ to Gecko (if APZ is enabled) diff --git a/widget/nsGUIEventIPC.h b/widget/nsGUIEventIPC.h index 7e973d61200a..f72629782396 100644 --- a/widget/nsGUIEventIPC.h +++ b/widget/nsGUIEventIPC.h @@ -1099,6 +1099,7 @@ struct ParamTraits { WriteParam(aWriter, aParam.mScreenOffset); WriteParam(aWriter, aParam.mButton); WriteParam(aWriter, aParam.mButtons); + WriteParam(aWriter, aParam.mInputSource); } static bool Read(MessageReader* aReader, paramType* aResult) { @@ -1108,7 +1109,8 @@ struct ParamTraits { ReadParam(aReader, &aResult->mHandledByAPZ) && ReadParam(aReader, &aResult->mScreenOffset) && ReadParam(aReader, &aResult->mButton) && - ReadParam(aReader, &aResult->mButtons); + ReadParam(aReader, &aResult->mButtons) && + ReadParam(aReader, &aResult->mInputSource); } }; diff --git a/widget/windows/nsWindow.cpp b/widget/windows/nsWindow.cpp index 1e56c0d1e74b..22fbaa3b5a42 100644 --- a/widget/windows/nsWindow.cpp +++ b/widget/windows/nsWindow.cpp @@ -7978,12 +7978,13 @@ bool nsWindow::DispatchTouchEventFromWMPointer( touchInput.mTouches.AppendElement(touchData); touchInput.mButton = aButton; touchInput.mButtons = aPointerInfo.mButtons; + touchInput.mInputSource = MouseEvent_Binding::MOZ_SOURCE_PEN; // POINTER_INFO.dwKeyStates can't be used as it only supports Shift and Ctrl ModifierKeyState modifierKeyState; touchInput.modifiers = modifierKeyState.GetModifiers(); - DispatchTouchInput(touchInput, MouseEvent_Binding::MOZ_SOURCE_PEN); + DispatchTouchInput(touchInput); return true; }