Bug 1324581 - check event handled by apz in nsSliderFrame::StartAPZDrag r=botond
test_scroll_snapping_scrollbars.html is failing when apz.drag.enabled
is true because synthesizeMouse does not route events through APZ,
meaning that the drag is never handled by APZ or Gecko.
Resolve this by adding a check that mHandledByApz flag is true for
WidgetGUIEvent, and handle in Gecko if that is not the case.
MozReview-Commit-ID: IrxVLxqs64V
--- a/layout/xul/nsSliderFrame.cpp
+++ b/layout/xul/nsSliderFrame.cpp
@@ -925,18 +925,22 @@ nsSliderMediator::HandleEvent(nsIDOMEven
// Only process the event if the thumb is not being dragged.
if (mSlider && !mSlider->isDraggingThumb())
return mSlider->StartDrag(aEvent);
return NS_OK;
}
bool
-nsSliderFrame::StartAPZDrag()
+nsSliderFrame::StartAPZDrag(WidgetGUIEvent* aEvent)
{
+ if (!aEvent->mFlags.mHandledByAPZ) {
+ return false;
+ }
+
if (!gfxPlatform::GetPlatform()->SupportsApzDragInput()) {
return false;
}
nsContainerFrame* scrollFrame = GetScrollbar()->GetParent();
if (!scrollFrame) {
return false;
}
@@ -1051,17 +1055,17 @@ nsSliderFrame::StartDrag(nsIDOMEvent* aE
if (isHorizontal)
mThumbStart = thumbFrame->GetPosition().x;
else
mThumbStart = thumbFrame->GetPosition().y;
mDragStart = pos - mThumbStart;
- mScrollingWithAPZ = StartAPZDrag();
+ mScrollingWithAPZ = StartAPZDrag(event);
#ifdef DEBUG_SLIDER
printf("Pressed mDragStart=%d\n",mDragStart);
#endif
if (!mScrollingWithAPZ && !mSuppressionActive) {
MOZ_ASSERT(PresContext()->PresShell());
APZCCallbackHelper::SuppressDisplayport(true, PresContext()->PresShell());
--- a/layout/xul/nsSliderFrame.h
+++ b/layout/xul/nsSliderFrame.h
@@ -95,17 +95,17 @@ public:
nsIFrame* aPrevFrame,
nsFrameList& aFrameList) override;
virtual void RemoveFrame(ChildListID aListID,
nsIFrame* aOldFrame) override;
nsresult StartDrag(nsIDOMEvent* aEvent);
nsresult StopDrag();
- bool StartAPZDrag();
+ bool StartAPZDrag(WidgetGUIEvent* aEvent);
static int32_t GetCurrentPosition(nsIContent* content);
static int32_t GetMinPosition(nsIContent* content);
static int32_t GetMaxPosition(nsIContent* content);
static int32_t GetIncrement(nsIContent* content);
static int32_t GetPageIncrement(nsIContent* content);
static int32_t GetIntegerAttribute(nsIContent* content, nsIAtom* atom, int32_t defaultValue);
void EnsureOrient();