diff --git a/gfx/layers/apz/util/APZEventState.cpp b/gfx/layers/apz/util/APZEventState.cpp index 9c170b35b717..a3f3ae4b27a1 100644 --- a/gfx/layers/apz/util/APZEventState.cpp +++ b/gfx/layers/apz/util/APZEventState.cpp @@ -497,7 +497,6 @@ void APZEventState::ProcessAPZStateChange(ViewID aViewId, nsLayoutUtils::FindScrollContainerFrameFor(aViewId); if (sf) { sf->SetTransformingByAPZ(true); - sf->ScrollbarActivityStarted(); } nsIContent* content = nsLayoutUtils::FindContentFor(aViewId); @@ -514,7 +513,6 @@ void APZEventState::ProcessAPZStateChange(ViewID aViewId, nsLayoutUtils::FindScrollContainerFrameFor(aViewId); if (sf) { sf->SetTransformingByAPZ(false); - sf->ScrollbarActivityStopped(); } nsIContent* content = nsLayoutUtils::FindContentFor(aViewId); diff --git a/layout/generic/ScrollContainerFrame.cpp b/layout/generic/ScrollContainerFrame.cpp index a3f21ab67064..6199dcee9094 100644 --- a/layout/generic/ScrollContainerFrame.cpp +++ b/layout/generic/ScrollContainerFrame.cpp @@ -2296,12 +2296,18 @@ void ScrollContainerFrame::AsyncScrollCallback(ScrollContainerFrame* aInstance, } void ScrollContainerFrame::SetTransformingByAPZ(bool aTransforming) { - if (mTransformingByAPZ && !aTransforming) { - PostScrollEndEvent(); + if (mTransformingByAPZ == aTransforming) { + return; } mTransformingByAPZ = aTransforming; - if (!mozilla::css::TextOverflow::HasClippedTextOverflow(this) || - mozilla::css::TextOverflow::HasBlockEllipsis(mScrolledFrame)) { + if (aTransforming) { + ScrollbarActivityStarted(); + } else { + ScrollbarActivityStopped(); + PostScrollEndEvent(); + } + if (!css::TextOverflow::HasClippedTextOverflow(this) || + css::TextOverflow::HasBlockEllipsis(mScrolledFrame)) { // If the block has some overflow marker stuff we should kick off a paint // because we have special behaviour for it when APZ scrolling is active. SchedulePaint(); diff --git a/layout/generic/ScrollbarActivity.cpp b/layout/generic/ScrollbarActivity.cpp index abebd90ea782..fda540d3bbd6 100644 --- a/layout/generic/ScrollbarActivity.cpp +++ b/layout/generic/ScrollbarActivity.cpp @@ -96,6 +96,8 @@ ScrollbarActivity::HandleEvent(dom::Event* aEvent) { nsAutoString type; aEvent->GetType(type); + auto* targetContent = + nsIContent::FromEventTargetOrNull(aEvent->GetOriginalTarget()); if (type.EqualsLiteral("mousemove")) { // Mouse motions anywhere in the scrollable frame should keep the // scrollbars visible, but we have to be careful as content descendants of @@ -105,8 +107,6 @@ ScrollbarActivity::HandleEvent(dom::Event* aEvent) { nsIFrame* scrollFrame = do_QueryFrame(mScrollableFrame); MOZ_ASSERT(scrollFrame); ScrollContainerFrame* scrollContainerFrame = do_QueryFrame(scrollFrame); - nsCOMPtr targetContent = - do_QueryInterface(aEvent->GetOriginalTarget()); nsIFrame* targetFrame = targetContent ? targetContent->GetPrimaryFrame() : nullptr; if ((scrollContainerFrame && @@ -120,9 +120,6 @@ ScrollbarActivity::HandleEvent(dom::Event* aEvent) { return NS_OK; } - nsCOMPtr targetContent = - do_QueryInterface(aEvent->GetOriginalTarget()); - HandleEventForScrollbar(type, targetContent, GetHorizontalScrollbar(), &mHScrollbarHovered); HandleEventForScrollbar(type, targetContent, GetVerticalScrollbar(),