| Index: Source/core/frame/FrameView.cpp
|
| diff --git a/Source/core/frame/FrameView.cpp b/Source/core/frame/FrameView.cpp
|
| index 0de05a9afddf16597794d73fd931bbfc17820627..beb1677547861812d27a329ad8e993734f830f02 100644
|
| --- a/Source/core/frame/FrameView.cpp
|
| +++ b/Source/core/frame/FrameView.cpp
|
| @@ -1698,7 +1698,7 @@ void FrameView::contentsResized()
|
| setNeedsLayout();
|
| }
|
|
|
| -void FrameView::scrollbarExistenceDidChange()
|
| +void FrameView::scrollbarNeedsLayout()
|
| {
|
| // We check to make sure the view is attached to a frame() as this method can
|
| // be triggered before the view is attached by LocalFrame::createView(...) setting
|
| @@ -3310,6 +3310,8 @@ void FrameView::updateScrollbarGeometry()
|
| if (!m_scrollbarsSuppressed && oldRect != m_horizontalScrollbar->frameRect())
|
| m_horizontalScrollbar->invalidate();
|
|
|
| + oldRect = m_horizontalScrollbar->frameRect();
|
| +
|
| if (m_scrollbarsSuppressed)
|
| m_horizontalScrollbar->setSuppressInvalidation(true);
|
| m_horizontalScrollbar->setEnabled(contentsWidth() > clientWidth);
|
| @@ -3317,6 +3319,17 @@ void FrameView::updateScrollbarGeometry()
|
| m_horizontalScrollbar->offsetDidChange();
|
| if (m_scrollbarsSuppressed)
|
| m_horizontalScrollbar->setSuppressInvalidation(false);
|
| +
|
| + if (!m_scrollbarsSuppressed && oldRect != m_horizontalScrollbar->frameRect() && m_horizontalScrollbar->isCustomScrollbar()) {
|
| + IntRect hBarRect((shouldPlaceVerticalScrollbarOnLeft() && m_verticalScrollbar) ? m_verticalScrollbar->width() : 0,
|
| + height() - m_horizontalScrollbar->height(),
|
| + width() - (m_verticalScrollbar ? m_verticalScrollbar->width() : 0),
|
| + m_horizontalScrollbar->height());
|
| + m_horizontalScrollbar->setFrameRect(adjustScrollbarRectForResizer(hBarRect, m_horizontalScrollbar.get()));
|
| + if (oldRect.height() != m_horizontalScrollbar->frameRect().height())
|
| + scrollbarNeedsLayout();
|
| + m_horizontalScrollbar->invalidate();
|
| + }
|
| }
|
|
|
| if (m_verticalScrollbar) {
|
| @@ -3330,6 +3343,8 @@ void FrameView::updateScrollbarGeometry()
|
| if (!m_scrollbarsSuppressed && oldRect != m_verticalScrollbar->frameRect())
|
| m_verticalScrollbar->invalidate();
|
|
|
| + oldRect = m_verticalScrollbar->frameRect();
|
| +
|
| if (m_scrollbarsSuppressed)
|
| m_verticalScrollbar->setSuppressInvalidation(true);
|
| m_verticalScrollbar->setEnabled(contentsHeight() > clientHeight);
|
| @@ -3337,6 +3352,17 @@ void FrameView::updateScrollbarGeometry()
|
| m_verticalScrollbar->offsetDidChange();
|
| if (m_scrollbarsSuppressed)
|
| m_verticalScrollbar->setSuppressInvalidation(false);
|
| +
|
| + if (!m_scrollbarsSuppressed && oldRect != m_verticalScrollbar->frameRect() && m_verticalScrollbar->isCustomScrollbar()) {
|
| + IntRect vBarRect(shouldPlaceVerticalScrollbarOnLeft() ? 0 : (width() - m_verticalScrollbar->width()),
|
| + 0,
|
| + m_verticalScrollbar->width(),
|
| + height() - (m_horizontalScrollbar ? m_horizontalScrollbar->height() : 0));
|
| + m_verticalScrollbar->setFrameRect(adjustScrollbarRectForResizer(vBarRect, m_verticalScrollbar.get()));
|
| + if (oldRect.width() != m_verticalScrollbar->frameRect().width())
|
| + scrollbarNeedsLayout();
|
| + m_verticalScrollbar->invalidate();
|
| + }
|
| }
|
| }
|
|
|
| @@ -3379,7 +3405,7 @@ bool FrameView::adjustScrollbarExistence(ComputeScrollbarExistenceOption option)
|
| // first. (This will be the common case, e.g., when the page changes due to window resizing for example).
|
| // This layout will not re-enter updateScrollbars and does not count towards our max layout pass total.
|
| if (!m_scrollbarsSuppressed)
|
| - scrollbarExistenceDidChange();
|
| + scrollbarNeedsLayout();
|
|
|
| bool hasHorizontalScrollbar = m_horizontalScrollbar;
|
| bool hasVerticalScrollbar = m_verticalScrollbar;
|
| @@ -3400,7 +3426,7 @@ bool FrameView::adjustScrollbarExistence(ComputeScrollbarExistenceOption option)
|
|
|
| if (!useOverlayScrollbars())
|
| contentsResized();
|
| - scrollbarExistenceDidChange();
|
| + scrollbarNeedsLayout();
|
| return true;
|
| }
|
|
|
|
|