Bug 1242690 - Squash together DispatchAPZAwareEvent and DispatchInputEvent. r=
--- a/dom/base/nsDOMWindowUtils.cpp
+++ b/dom/base/nsDOMWindowUtils.cpp
@@ -806,17 +806,17 @@ nsDOMWindowUtils::SendWheelEvent(float a
wheelEvent.time = PR_Now() / 1000;
nsPresContext* presContext = GetPresContext();
NS_ENSURE_TRUE(presContext, NS_ERROR_FAILURE);
wheelEvent.refPoint = nsContentUtils::ToWidgetPoint(CSSPoint(aX, aY), offset, presContext);
- widget->DispatchAPZAwareEvent(&wheelEvent);
+ widget->DispatchInputEvent(&wheelEvent);
if (widget->AsyncPanZoomEnabled()) {
// Computing overflow deltas is not compatible with APZ, so if APZ is
// enabled, we skip testing it.
return NS_OK;
}
bool failedX = false;
--- a/dom/ipc/TabParent.cpp
+++ b/dom/ipc/TabParent.cpp
@@ -1445,17 +1445,17 @@ bool TabParent::RecvDispatchWheelEvent(c
if (!widget) {
return true;
}
WidgetWheelEvent localEvent(aEvent);
localEvent.widget = widget;
localEvent.refPoint -= GetChildProcessOffset();
- widget->DispatchAPZAwareEvent(&localEvent);
+ widget->DispatchInputEvent(&localEvent);
return true;
}
bool
TabParent::RecvDispatchMouseEvent(const mozilla::WidgetMouseEvent& aEvent)
{
nsCOMPtr<nsIWidget> widget = GetWidget();
if (!widget) {
--- a/widget/PuppetWidget.cpp
+++ b/widget/PuppetWidget.cpp
@@ -350,54 +350,39 @@ PuppetWidget::DispatchEvent(WidgetGUIEve
}
return NS_OK;
}
nsEventStatus
PuppetWidget::DispatchInputEvent(WidgetInputEvent* aEvent)
{
- if (!mTabChild) {
- return nsEventStatus_eIgnore;
- }
-
- switch (aEvent->mClass) {
- case eMouseEventClass:
- Unused <<
- mTabChild->SendDispatchMouseEvent(*aEvent->AsMouseEvent());
- break;
- case eKeyboardEventClass:
- Unused <<
- mTabChild->SendDispatchKeyboardEvent(*aEvent->AsKeyboardEvent());
- break;
- default:
- MOZ_ASSERT_UNREACHABLE("unsupported event type");
- }
-
- return nsEventStatus_eIgnore;
-}
-
-nsEventStatus
-PuppetWidget::DispatchAPZAwareEvent(WidgetInputEvent* aEvent)
-{
if (!AsyncPanZoomEnabled()) {
nsEventStatus status = nsEventStatus_eIgnore;
DispatchEvent(aEvent, status);
return status;
}
if (!mTabChild) {
return nsEventStatus_eIgnore;
}
switch (aEvent->mClass) {
case eWheelEventClass:
Unused <<
mTabChild->SendDispatchWheelEvent(*aEvent->AsWheelEvent());
break;
+ case eMouseEventClass:
+ Unused <<
+ mTabChild->SendDispatchMouseEvent(*aEvent->AsMouseEvent());
+ break;
+ case eKeyboardEventClass:
+ Unused <<
+ mTabChild->SendDispatchKeyboardEvent(*aEvent->AsKeyboardEvent());
+ break;
default:
MOZ_ASSERT_UNREACHABLE("unsupported event type");
}
return nsEventStatus_eIgnore;
}
nsresult
--- a/widget/PuppetWidget.h
+++ b/widget/PuppetWidget.h
@@ -127,17 +127,16 @@ public:
virtual LayoutDeviceIntPoint WidgetToScreenOffset() override
{ return LayoutDeviceIntPoint::FromUnknownPoint(GetWindowPosition() + GetChromeDimensions()); }
void InitEvent(WidgetGUIEvent& aEvent,
LayoutDeviceIntPoint* aPoint = nullptr);
NS_IMETHOD DispatchEvent(WidgetGUIEvent* aEvent, nsEventStatus& aStatus) override;
- nsEventStatus DispatchAPZAwareEvent(WidgetInputEvent* aEvent) override;
nsEventStatus DispatchInputEvent(WidgetInputEvent* aEvent) override;
void SetConfirmedTargetAPZC(uint64_t aInputBlockId,
const nsTArray<ScrollableLayerGuid>& aTargets) const override;
void UpdateZoomConstraints(const uint32_t& aPresShellId,
const FrameMetrics::ViewID& aViewId,
const mozilla::Maybe<ZoomConstraints>& aConstraints) override;
bool AsyncPanZoomEnabled() const override;
--- a/widget/cocoa/nsChildView.mm
+++ b/widget/cocoa/nsChildView.mm
@@ -4536,17 +4536,17 @@ NSEvent* gLastDragMouseDownEvent = nil;
}
geckoEvent.clickCount = clickCount;
if (modifierFlags & NSControlKeyMask)
geckoEvent.button = WidgetMouseEvent::eRightButton;
else
geckoEvent.button = WidgetMouseEvent::eLeftButton;
- mGeckoChild->DispatchAPZAwareEvent(&geckoEvent);
+ mGeckoChild->DispatchInputEvent(&geckoEvent);
mBlockedLastMouseDown = NO;
// XXX maybe call markedTextSelectionChanged:client: here?
NS_OBJC_END_TRY_ABORT_BLOCK;
}
- (void)mouseUp:(NSEvent *)theEvent
@@ -4563,17 +4563,17 @@ NSEvent* gLastDragMouseDownEvent = nil;
[self convertCocoaMouseEvent:theEvent toGeckoEvent:&geckoEvent];
if ([theEvent modifierFlags] & NSControlKeyMask)
geckoEvent.button = WidgetMouseEvent::eRightButton;
else
geckoEvent.button = WidgetMouseEvent::eLeftButton;
// This might destroy our widget (and null out mGeckoChild).
bool defaultPrevented =
- (mGeckoChild->DispatchAPZAwareEvent(&geckoEvent) == nsEventStatus_eConsumeNoDefault);
+ (mGeckoChild->DispatchInputEvent(&geckoEvent) == nsEventStatus_eConsumeNoDefault);
// Check to see if we are double-clicking in the titlebar.
CGFloat locationInTitlebar = [[self window] frame].size.height - [theEvent locationInWindow].y;
LayoutDeviceIntPoint pos = geckoEvent.refPoint;
if (!defaultPrevented && [theEvent clickCount] == 2 &&
mGeckoChild->GetDraggableRegion().Contains(pos.x, pos.y) &&
[[self window] isKindOfClass:[ToolbarWindow class]] &&
(locationInTitlebar < [(ToolbarWindow*)[self window] titlebarHeight] ||
@@ -4689,17 +4689,17 @@ NewCGSRegionFromRegion(const LayoutDevic
if (!mGeckoChild)
return;
WidgetMouseEvent geckoEvent(true, eMouseMove, mGeckoChild,
WidgetMouseEvent::eReal);
[self convertCocoaMouseEvent:theEvent toGeckoEvent:&geckoEvent];
- mGeckoChild->DispatchAPZAwareEvent(&geckoEvent);
+ mGeckoChild->DispatchInputEvent(&geckoEvent);
NS_OBJC_END_TRY_ABORT_BLOCK;
}
- (void)mouseDragged:(NSEvent*)theEvent
{
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
@@ -4735,17 +4735,17 @@ NewCGSRegionFromRegion(const LayoutDevic
// The right mouse went down, fire off a right mouse down event to gecko
WidgetMouseEvent geckoEvent(true, eMouseDown, mGeckoChild,
WidgetMouseEvent::eReal);
[self convertCocoaMouseEvent:theEvent toGeckoEvent:&geckoEvent];
geckoEvent.button = WidgetMouseEvent::eRightButton;
geckoEvent.clickCount = [theEvent clickCount];
- mGeckoChild->DispatchAPZAwareEvent(&geckoEvent);
+ mGeckoChild->DispatchInputEvent(&geckoEvent);
if (!mGeckoChild)
return;
// Let the superclass do the context menu stuff.
[super rightMouseDown:theEvent];
NS_OBJC_END_TRY_ABORT_BLOCK;
}
@@ -4759,17 +4759,17 @@ NewCGSRegionFromRegion(const LayoutDevic
WidgetMouseEvent geckoEvent(true, eMouseUp, mGeckoChild,
WidgetMouseEvent::eReal);
[self convertCocoaMouseEvent:theEvent toGeckoEvent:&geckoEvent];
geckoEvent.button = WidgetMouseEvent::eRightButton;
geckoEvent.clickCount = [theEvent clickCount];
nsAutoRetainCocoaObject kungFuDeathGrip(self);
- mGeckoChild->DispatchAPZAwareEvent(&geckoEvent);
+ mGeckoChild->DispatchInputEvent(&geckoEvent);
NS_OBJC_END_TRY_ABORT_BLOCK;
}
- (void)rightMouseDragged:(NSEvent*)theEvent
{
if (!mGeckoChild)
return;
@@ -4843,17 +4843,17 @@ static int32_t RoundUp(double aDouble)
static_cast<int32_t>(ceil(aDouble));
}
- (void)sendWheelStartOrStop:(EventMessage)msg forEvent:(NSEvent *)theEvent
{
WidgetWheelEvent wheelEvent(true, msg, mGeckoChild);
[self convertCocoaMouseWheelEvent:theEvent toGeckoEvent:&wheelEvent];
mExpectingWheelStop = (msg == eWheelOperationStart);
- mGeckoChild->DispatchAPZAwareEvent(wheelEvent.AsInputEvent());
+ mGeckoChild->DispatchInputEvent(wheelEvent.AsInputEvent());
}
- (void)sendWheelCondition:(BOOL)condition
first:(EventMessage)first
second:(EventMessage)second
forEvent:(NSEvent *)theEvent
{
if (mExpectingWheelStop == condition) {
--- a/widget/gtk/nsWindow.cpp
+++ b/widget/gtk/nsWindow.cpp
@@ -2690,17 +2690,17 @@ nsWindow::DispatchMissedButtonReleases(G
// Dispatch a synthesized button up event to tell Gecko about the
// change in state. This event is marked as synthesized so that
// it is not dispatched as a DOM event, because we don't know the
// position, widget, modifiers, or time/order.
WidgetMouseEvent synthEvent(true, eMouseUp, this,
WidgetMouseEvent::eSynthesized);
synthEvent.button = buttonType;
- DispatchAPZAwareEvent(&synthEvent);
+ DispatchInputEvent(&synthEvent);
}
}
}
void
nsWindow::InitButtonEvent(WidgetMouseEvent& aEvent,
GdkEventButton* aGdkEvent)
{
@@ -2812,17 +2812,17 @@ nsWindow::OnButtonPressEvent(GdkEventBut
gButtonState |= ButtonMaskFromGDKButton(aEvent->button);
WidgetMouseEvent event(true, eMouseDown, this, WidgetMouseEvent::eReal);
event.button = domButton;
InitButtonEvent(event, aEvent);
event.pressure = mLastMotionPressure;
- DispatchAPZAwareEvent(&event);
+ DispatchInputEvent(&event);
// right menu click on linux should also pop up a context menu
if (domButton == WidgetMouseEvent::eRightButton &&
MOZ_LIKELY(!mIsDestroyed)) {
WidgetMouseEvent contextMenuEvent(true, eContextMenu, this,
WidgetMouseEvent::eReal);
InitButtonEvent(contextMenuEvent, aEvent);
contextMenuEvent.pressure = mLastMotionPressure;
@@ -2855,17 +2855,17 @@ nsWindow::OnButtonReleaseEvent(GdkEventB
WidgetMouseEvent event(true, eMouseUp, this,
WidgetMouseEvent::eReal);
event.button = domButton;
InitButtonEvent(event, aEvent);
gdouble pressure = 0;
gdk_event_get_axis ((GdkEvent*)aEvent, GDK_AXIS_PRESSURE, &pressure);
event.pressure = pressure ? pressure : mLastMotionPressure;
- DispatchAPZAwareEvent(&event);
+ DispatchInputEvent(&event);
mLastMotionPressure = pressure;
}
void
nsWindow::OnContainerFocusInEvent(GdkEventFocus *aEvent)
{
LOGFOCUS(("OnContainerFocusInEvent [%p]\n", (void *)this));
@@ -3223,17 +3223,17 @@ nsWindow::OnScrollEvent(GdkEventScroll *
wheelEvent.refPoint = GetRefPoint(this, aEvent);
KeymapWrapper::InitInputEvent(wheelEvent, aEvent->state);
wheelEvent.time = aEvent->time;
wheelEvent.timeStamp = GetEventTimeStamp(aEvent->time);
- DispatchAPZAwareEvent(&wheelEvent);
+ DispatchInputEvent(&wheelEvent);
}
void
nsWindow::OnVisibilityNotifyEvent(GdkEventVisibility *aEvent)
{
LOGDRAW(("Visibility event %i on [%p] %p\n",
aEvent->state, this, aEvent->window));
@@ -3440,17 +3440,17 @@ nsWindow::OnTouchEvent(GdkEventTouch* aE
for (auto iter = mTouches.Iter(); !iter.Done(); iter.Next()) {
event.touches.AppendElement(new dom::Touch(*iter.UserData()));
}
} else if (aEvent->type == GDK_TOUCH_END ||
aEvent->type == GDK_TOUCH_CANCEL) {
*event.touches.AppendElement() = touch.forget();
}
- DispatchAPZAwareEvent(&event);
+ DispatchInputEvent(&event);
return TRUE;
}
#endif
static void
GetBrandName(nsXPIDLString& brandName)
{
nsCOMPtr<nsIStringBundleService> bundleService =
--- a/widget/nsBaseWidget.cpp
+++ b/widget/nsBaseWidget.cpp
@@ -1059,22 +1059,16 @@ nsBaseWidget::ProcessUntransformedAPZEve
} else if (WidgetMouseEvent* mouseEvent = aEvent->AsMouseEvent()) {
mAPZEventState->ProcessMouseEvent(*mouseEvent, aGuid, aInputBlockId);
}
}
return status;
}
-nsEventStatus
-nsBaseWidget::DispatchInputEvent(WidgetInputEvent* aEvent)
-{
- return DispatchAPZAwareEvent(aEvent);
-}
-
class DispatchWheelEventOnMainThread : public Task
{
public:
DispatchWheelEventOnMainThread(const ScrollWheelInput& aWheelInput,
nsBaseWidget* aWidget,
nsEventStatus aAPZResult,
uint64_t aInputBlockId,
ScrollableLayerGuid aGuid)
@@ -1132,17 +1126,17 @@ private:
RefPtr<APZCTreeManager> mAPZC;
nsBaseWidget* mWidget;
nsEventStatus mAPZResult;
uint64_t mInputBlockId;
ScrollableLayerGuid mGuid;
};
nsEventStatus
-nsBaseWidget::DispatchAPZAwareEvent(WidgetInputEvent* aEvent)
+nsBaseWidget::DispatchInputEvent(WidgetInputEvent* aEvent)
{
MOZ_ASSERT(NS_IsMainThread());
if (mAPZC) {
if (APZThreadUtils::IsControllerThread()) {
uint64_t inputBlockId = 0;
ScrollableLayerGuid guid;
nsEventStatus result = mAPZC->ReceiveInputEvent(*aEvent, &guid, &inputBlockId);
--- a/widget/nsBaseWidget.h
+++ b/widget/nsBaseWidget.h
@@ -251,23 +251,19 @@ public:
virtual void SetAttachedWidgetListener(nsIWidgetListener* aListener) override;
virtual nsIWidgetListener* GetPreviouslyAttachedWidgetListener() override;
virtual void SetPreviouslyAttachedWidgetListener(nsIWidgetListener* aListener) override;
NS_IMETHOD_(TextEventDispatcher*) GetTextEventDispatcher() override final;
virtual void ZoomToRect(const uint32_t& aPresShellId,
const FrameMetrics::ViewID& aViewId,
const CSSRect& aRect,
const uint32_t& aFlags) override;
- // Helper function for dispatching events which are not processed by APZ,
- // but need to be transformed by APZ.
+ // Dispatch an event that must be first be routed through APZ.
nsEventStatus DispatchInputEvent(mozilla::WidgetInputEvent* aEvent) override;
- // Dispatch an event that must be first be routed through APZ.
- nsEventStatus DispatchAPZAwareEvent(mozilla::WidgetInputEvent* aEvent) override;
-
void SetConfirmedTargetAPZC(uint64_t aInputBlockId,
const nsTArray<ScrollableLayerGuid>& aTargets) const override;
void UpdateZoomConstraints(const uint32_t& aPresShellId,
const FrameMetrics::ViewID& aViewId,
const mozilla::Maybe<ZoomConstraints>& aConstraints) override;
bool AsyncPanZoomEnabled() const override;
--- a/widget/nsIWidget.h
+++ b/widget/nsIWidget.h
@@ -1410,23 +1410,16 @@ class nsIWidget : public nsISupports {
NS_IMETHOD DispatchEvent(mozilla::WidgetGUIEvent* event,
nsEventStatus & aStatus) = 0;
/**
* Dispatches an event that must be handled by APZ first, when APZ is
* enabled. If invoked in the child process, it is forwarded to the
* parent process synchronously.
*/
- virtual nsEventStatus DispatchAPZAwareEvent(mozilla::WidgetInputEvent* aEvent) = 0;
-
- /**
- * Dispatches an event that must be transformed by APZ first, but is not
- * actually handled by APZ. If invoked in the child process, it is
- * forwarded to the parent process synchronously.
- */
virtual nsEventStatus DispatchInputEvent(mozilla::WidgetInputEvent* aEvent) = 0;
/**
* Confirm an APZ-aware event target. This should be used when APZ will
* not need a layers update to process the event.
*/
virtual void SetConfirmedTargetAPZC(uint64_t aInputBlockId,
const nsTArray<mozilla::layers::ScrollableLayerGuid>& aTargets) const = 0;
--- a/widget/uikit/nsWindow.mm
+++ b/widget/uikit/nsWindow.mm
@@ -180,17 +180,17 @@ private:
NS_ASSERTION(false, "Got a touch that we didn't know about");
continue;
}
int id = reinterpret_cast<int>(value);
RefPtr<Touch> t = new Touch(id, loc, radius, 0.0f, 1.0f);
event.refPoint = loc;
event.touches.AppendElement(t);
}
- aWindow->DispatchAPZAwareEvent(&event);
+ aWindow->DispatchInputEvent(&event);
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
ALOG("[ChildView[%p] touchesBegan", self);
if (!mGeckoChild)
return;
--- a/widget/windows/nsWindow.cpp
+++ b/widget/windows/nsWindow.cpp
@@ -4011,17 +4011,17 @@ bool nsWindow::DispatchContentCommandEve
{
nsEventStatus status;
DispatchEvent(aEvent, status);
return ConvertStatus(status);
}
bool nsWindow::DispatchWheelEvent(WidgetWheelEvent* aEvent)
{
- nsEventStatus status = DispatchAPZAwareEvent(aEvent->AsInputEvent());
+ nsEventStatus status = DispatchInputEvent(aEvent->AsInputEvent());
return ConvertStatus(status);
}
bool nsWindow::DispatchWindowEvent(WidgetGUIEvent* event)
{
nsEventStatus status;
DispatchEvent(event, status);
return ConvertStatus(status);
@@ -4349,17 +4349,17 @@ nsWindow::DispatchMouseEvent(EventMessag
}
}
} else if (aEventMessage == eMouseExitFromWidget) {
if (sCurrentWindow == this) {
sCurrentWindow = nullptr;
}
}
- result = ConvertStatus(DispatchAPZAwareEvent(&event));
+ result = ConvertStatus(DispatchInputEvent(&event));
// Release the widget with NS_IF_RELEASE() just in case
// the context menu key code in EventListenerManager::HandleEvent()
// released it already.
return result;
}
return result;
@@ -6590,23 +6590,23 @@ bool nsWindow::OnTouch(WPARAM wParam, LP
touchEndInput.mTouches.AppendElement(touchData);
}
}
// Dispatch touch start and touch move event if we have one.
if (!touchInput.mTimeStamp.IsNull()) {
// Convert MultiTouchInput to WidgetTouchEvent interface.
WidgetTouchEvent widgetTouchEvent = touchInput.ToWidgetTouchEvent(this);
- DispatchAPZAwareEvent(&widgetTouchEvent);
+ DispatchInputEvent(&widgetTouchEvent);
}
// Dispatch touch end event if we have one.
if (!touchEndInput.mTimeStamp.IsNull()) {
// Convert MultiTouchInput to WidgetTouchEvent interface.
WidgetTouchEvent widgetTouchEvent = touchEndInput.ToWidgetTouchEvent(this);
- DispatchAPZAwareEvent(&widgetTouchEvent);
+ DispatchInputEvent(&widgetTouchEvent);
}
}
delete [] pInputs;
mGesture.CloseTouchInputHandle((HTOUCHINPUT)lParam);
return true;
}