Backed out changeset 85a9eb44b240 (
bug 366791) due to
bug 449221.
--- a/layout/xul/base/src/nsScrollbarFrame.cpp
+++ b/layout/xul/base/src/nsScrollbarFrame.cpp
@@ -61,16 +61,33 @@ NS_NewScrollbarFrame (nsIPresShell* aPre
//
// QueryInterface
//
NS_INTERFACE_MAP_BEGIN(nsScrollbarFrame)
NS_INTERFACE_MAP_ENTRY(nsIScrollbarFrame)
NS_INTERFACE_MAP_END_INHERITING(nsBoxFrame)
+
+NS_IMETHODIMP
+nsScrollbarFrame::Init(nsIContent* aContent,
+ nsIFrame* aParent,
+ nsIFrame* aPrevInFlow)
+{
+ nsresult rv = nsBoxFrame::Init(aContent, aParent, aPrevInFlow);
+
+ // We want to be a reflow root since we use reflows to move the
+ // slider. Any reflow inside the scrollbar frame will be a reflow to
+ // move the slider and will thus not change anything outside of the
+ // scrollbar or change the size of the scrollbar frame.
+ mState |= NS_FRAME_REFLOW_ROOT;
+
+ return rv;
+}
+
NS_IMETHODIMP
nsScrollbarFrame::Reflow(nsPresContext* aPresContext,
nsHTMLReflowMetrics& aDesiredSize,
const nsHTMLReflowState& aReflowState,
nsReflowStatus& aStatus)
{
nsresult rv = nsBoxFrame::Reflow(aPresContext, aDesiredSize, aReflowState, aStatus);
NS_ENSURE_SUCCESS(rv, rv);
--- a/layout/xul/base/src/nsScrollbarFrame.h
+++ b/layout/xul/base/src/nsScrollbarFrame.h
@@ -83,16 +83,20 @@ public:
NS_IMETHOD HandleDrag(nsPresContext* aPresContext,
nsGUIEvent * aEvent,
nsEventStatus* aEventStatus);
NS_IMETHOD HandleRelease(nsPresContext* aPresContext,
nsGUIEvent * aEvent,
nsEventStatus* aEventStatus);
+ NS_IMETHOD Init(nsIContent* aContent,
+ nsIFrame* aParent,
+ nsIFrame* aPrevInFlow);
+
NS_IMETHOD Reflow(nsPresContext* aPresContext,
nsHTMLReflowMetrics& aDesiredSize,
const nsHTMLReflowState& aReflowState,
nsReflowStatus& aStatus);
virtual PRBool IsContainingBlock() const;
virtual nsIAtom* GetType() const;