summaryrefslogtreecommitdiffstats
path: root/WebCore/page/FrameView.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/page/FrameView.cpp')
-rw-r--r--WebCore/page/FrameView.cpp33
1 files changed, 18 insertions, 15 deletions
diff --git a/WebCore/page/FrameView.cpp b/WebCore/page/FrameView.cpp
index 17ba2bc..d9a7e98 100644
--- a/WebCore/page/FrameView.cpp
+++ b/WebCore/page/FrameView.cpp
@@ -312,7 +312,7 @@ bool FrameView::didFirstLayout() const
void FrameView::invalidateRect(const IntRect& rect)
{
if (!parent()) {
- if (hostWindow())
+ if (hostWindow() && shouldUpdate())
hostWindow()->invalidateContentsAndWindow(rect, false /*immediate*/);
return;
}
@@ -358,17 +358,7 @@ void FrameView::setMarginHeight(int h)
m_margins.setHeight(h);
}
-bool FrameView::delegatesScrolling()
-{
- ASSERT(m_frame);
-
- if (parent())
- return false;
-
- return m_frame->settings() && m_frame->settings()->shouldDelegateScrolling();
-}
-
-bool FrameView::avoidScrollbarCreation()
+bool FrameView::avoidScrollbarCreation() const
{
ASSERT(m_frame);
@@ -454,7 +444,11 @@ void FrameView::adjustViewSize()
if (!root)
return;
- setContentsSize(IntSize(root->rightLayoutOverflow(), root->bottomLayoutOverflow()));
+ IntSize size = IntSize(root->rightLayoutOverflow() - root->leftLayoutOverflow(), root->bottomLayoutOverflow() - root->topLayoutOverflow());
+
+ ScrollView::setScrollOrigin(IntPoint(-root->leftLayoutOverflow(), -root->topLayoutOverflow()), size == contentsSize());
+
+ setContentsSize(size);
}
void FrameView::applyOverflowToViewport(RenderObject* o, ScrollbarMode& hMode, ScrollbarMode& vMode)
@@ -1380,7 +1374,7 @@ void FrameView::repaintContentRectangle(const IntRect& r, bool immediate)
return;
}
- if (!immediate && isOffscreen() && !shouldUpdateWhileOffscreen())
+ if (!shouldUpdate(immediate))
return;
#if ENABLE(TILED_BACKING_STORE)
@@ -1454,7 +1448,7 @@ void FrameView::checkStopDelayingDeferredRepaints()
void FrameView::doDeferredRepaints()
{
ASSERT(!m_deferringRepaints);
- if (isOffscreen() && !shouldUpdateWhileOffscreen()) {
+ if (!shouldUpdate()) {
m_repaintRects.clear();
m_repaintCount = 0;
return;
@@ -1700,6 +1694,15 @@ void FrameView::setShouldUpdateWhileOffscreen(bool shouldUpdateWhileOffscreen)
m_shouldUpdateWhileOffscreen = shouldUpdateWhileOffscreen;
}
+bool FrameView::shouldUpdate(bool immediateRequested) const
+{
+ if (!immediateRequested && isOffscreen() && !shouldUpdateWhileOffscreen())
+ return false;
+ if (!m_frame || !m_frame->document() || m_frame->document()->mayCauseFlashOfUnstyledContent())
+ return false;
+ return true;
+}
+
void FrameView::scheduleEvent(PassRefPtr<Event> event, PassRefPtr<Node> eventTarget)
{
if (!m_enqueueEvents) {