From 4cfcb8ae94026b4d504c8c1b56aba84ac94a4809 Mon Sep 17 00:00:00 2001 From: "aroben@apple.com" Date: Tue, 4 Dec 2007 22:52:47 +0000 Subject: [PATCH] Make the implementation of Frame::setNeedsReapplyStyles cross-platform WebCore: Make the implementation of Frame::setNeedsReapplyStyles cross-platform Reviewed by Hyatt. No change in functionality. * page/Frame.cpp: (WebCore::Frame::setNeedsReapplyStyles): Added. Invalidates the FrameView so that FrameView::layout will be called, which ends up calling reapplyStyles. (WebCore::Frame::needsReapplyStyles): Added. (WebCore::Frame::reapplyStyles): Renamed from reparseConfiguration. (WebCore::FramePrivate::FramePrivate): * page/Frame.h: * page/FramePrivate.h: Added new boolean member. * page/FrameView.cpp: (WebCore::FrameView::layout): Call Frame::reapplyStyles if needed. (WebCore::FrameView::needsLayout): Say that we need layout if the Frame needs styles reapplied. * page/mac/WebCoreFrameBridge.h: Removed setNeedsReapplyStyles. * page/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge reapplyStylesForDeviceType:]): Updated for rename. * bridge/win/FrameWin.cpp: Removed Frame::setNeedsReapplyStyles. * page/gtk/FrameGtk.cpp: Ditto. * page/mac/FrameMac.mm: Ditto. * page/qt/FrameQt.cpp: Ditto. * platform/wx/TemporaryLinkStubs.cpp: Ditto. WebKit/mac: Remove -[WebFrameBridge setNeedsReapplyStyles] This functionality is now WebCore's responsibility. Reviewed by Hyatt. * WebCoreSupport/WebFrameBridge.mm: * WebKit.order: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28411 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- WebCore/ChangeLog | 32 +++++++++++++++++++++ WebCore/bridge/win/FrameWin.cpp | 6 ---- WebCore/page/Frame.cpp | 25 +++++++++++++++- WebCore/page/Frame.h | 4 ++- WebCore/page/FramePrivate.h | 2 ++ WebCore/page/FrameView.cpp | 7 +++-- WebCore/page/gtk/FrameGtk.cpp | 4 --- WebCore/page/mac/FrameMac.mm | 5 ---- WebCore/page/mac/WebCoreFrameBridge.h | 2 -- WebCore/page/mac/WebCoreFrameBridge.mm | 2 +- WebCore/page/qt/FrameQt.cpp | 5 ---- WebCore/platform/wx/TemporaryLinkStubs.cpp | 1 - WebKit/mac/ChangeLog | 11 +++++++ WebKit/mac/WebCoreSupport/WebFrameBridge.mm | 10 ------- WebKit/mac/WebKit.order | 1 - 15 files changed, 77 insertions(+), 40 deletions(-) diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog index cb80d4f92b4..50ea501c692 100644 --- a/WebCore/ChangeLog +++ b/WebCore/ChangeLog @@ -1,3 +1,35 @@ +2007-11-27 Adam Roben + + Make the implementation of Frame::setNeedsReapplyStyles cross-platform + + Reviewed by Hyatt. + + No change in functionality. + + * page/Frame.cpp: + (WebCore::Frame::setNeedsReapplyStyles): Added. Invalidates the + FrameView so that FrameView::layout will be called, which ends up + calling reapplyStyles. + (WebCore::Frame::needsReapplyStyles): Added. + (WebCore::Frame::reapplyStyles): Renamed from reparseConfiguration. + (WebCore::FramePrivate::FramePrivate): + * page/Frame.h: + * page/FramePrivate.h: Added new boolean member. + * page/FrameView.cpp: + (WebCore::FrameView::layout): Call Frame::reapplyStyles if needed. + (WebCore::FrameView::needsLayout): Say that we need layout if the + Frame needs styles reapplied. + * page/mac/WebCoreFrameBridge.h: Removed setNeedsReapplyStyles. + * page/mac/WebCoreFrameBridge.mm: + (-[WebCoreFrameBridge reapplyStylesForDeviceType:]): Updated for + rename. + + * bridge/win/FrameWin.cpp: Removed Frame::setNeedsReapplyStyles. + * page/gtk/FrameGtk.cpp: Ditto. + * page/mac/FrameMac.mm: Ditto. + * page/qt/FrameQt.cpp: Ditto. + * platform/wx/TemporaryLinkStubs.cpp: Ditto. + 2007-12-04 Antti Koivisto Reviewed by Adele. diff --git a/WebCore/bridge/win/FrameWin.cpp b/WebCore/bridge/win/FrameWin.cpp index ff9e52a2dca..f4f3eb2b251 100644 --- a/WebCore/bridge/win/FrameWin.cpp +++ b/WebCore/bridge/win/FrameWin.cpp @@ -194,10 +194,4 @@ void Frame::dashboardRegionsChanged() { } -void Frame::setNeedsReapplyStyles() -{ - // Will be needed for focus ring color change. - notImplemented(); -} - } // namespace WebCore diff --git a/WebCore/page/Frame.cpp b/WebCore/page/Frame.cpp index c0237271c36..47eb18fd1c9 100644 --- a/WebCore/page/Frame.cpp +++ b/WebCore/page/Frame.cpp @@ -758,8 +758,30 @@ String Frame::jsDefaultStatusBarText() const return d->m_kjsDefaultStatusBarText; } -void Frame::reparseConfiguration() +void Frame::setNeedsReapplyStyles() { + if (d->m_needsReapplyStyles) + return; + + d->m_needsReapplyStyles = true; + + // Invalidate the FrameView so that FrameView::layout will get called, + // which calls reapplyStyles. + view()->invalidate(); +} + +bool Frame::needsReapplyStyles() const +{ + return d->m_needsReapplyStyles; +} + +void Frame::reapplyStyles() +{ + d->m_needsReapplyStyles = false; + + // FIXME: This call doesn't really make sense in a method called + // "reapplyStyles". We should probably eventually move it into its own + // method. if (d->m_doc) d->m_doc->docLoader()->setAutoLoadImages(d->m_page && d->m_page->settings()->loadsImagesAutomatically()); @@ -1993,6 +2015,7 @@ FramePrivate::FramePrivate(Page* page, Frame* parent, Frame* thisFrame, HTMLFram , m_inViewSourceMode(false) , frameCount(0) , m_prohibitsScrolling(false) + , m_needsReapplyStyles(false) , m_windowScriptNPObject(0) #if PLATFORM(MAC) , m_windowScriptObject(nil) diff --git a/WebCore/page/Frame.h b/WebCore/page/Frame.h index efab93882b3..71e091c43e6 100644 --- a/WebCore/page/Frame.h +++ b/WebCore/page/Frame.h @@ -155,7 +155,6 @@ public: static Frame* frameForWidget(const Widget*); Settings* settings() const; // can be NULL - void reparseConfiguration(); void setUserStyleSheetLocation(const KURL&); void setUserStyleSheet(const String& styleSheetData); @@ -197,6 +196,9 @@ public: UChar backslashAsCurrencySymbol() const; void setNeedsReapplyStyles(); + bool needsReapplyStyles() const; + void reapplyStyles(); + String documentTypeString() const; void dashboardRegionsChanged(); diff --git a/WebCore/page/FramePrivate.h b/WebCore/page/FramePrivate.h index 733cb1bd2f5..9967d479295 100644 --- a/WebCore/page/FramePrivate.h +++ b/WebCore/page/FramePrivate.h @@ -117,6 +117,8 @@ namespace WebCore { bool m_prohibitsScrolling; + bool m_needsReapplyStyles; + // The root object used for objects bound outside the context of a plugin. RefPtr m_bindingRootObject; RootObjectMap m_rootObjects; diff --git a/WebCore/page/FrameView.cpp b/WebCore/page/FrameView.cpp index 381d4326f88..d79ebe0463b 100644 --- a/WebCore/page/FrameView.cpp +++ b/WebCore/page/FrameView.cpp @@ -328,7 +328,6 @@ void FrameView::layout(bool allowSubtree) d->layoutRoot = 0; } - ASSERT(m_frame->view() == this); Document* document = m_frame->document(); @@ -349,7 +348,9 @@ void FrameView::layout(bool allowSubtree) // Always ensure our style info is up-to-date. This can happen in situations where // the layout beats any sort of style recalc update that needs to occur. - if (document->hasChangedChild()) + if (m_frame->needsReapplyStyles()) + m_frame->reapplyStyles(); + else if (document->hasChangedChild()) document->recalcStyle(); bool subtree = d->layoutRoot; @@ -783,7 +784,7 @@ bool FrameView::needsLayout() const RenderView* root = static_cast(m_frame->renderer()); Document * doc = m_frame->document(); // doc->hasChangedChild() condition can occur when using WebKit ObjC interface - return layoutPending() || (root && root->needsLayout()) || d->layoutRoot || (doc && doc->hasChangedChild()); + return layoutPending() || (root && root->needsLayout()) || d->layoutRoot || (doc && doc->hasChangedChild()) || m_frame->needsReapplyStyles(); } void FrameView::setNeedsLayout() diff --git a/WebCore/page/gtk/FrameGtk.cpp b/WebCore/page/gtk/FrameGtk.cpp index b1fdba6c467..c41d1076d0e 100644 --- a/WebCore/page/gtk/FrameGtk.cpp +++ b/WebCore/page/gtk/FrameGtk.cpp @@ -49,8 +49,4 @@ void Frame::dashboardRegionsChanged() notImplemented(); } -void Frame::setNeedsReapplyStyles() -{ - notImplemented(); -} } diff --git a/WebCore/page/mac/FrameMac.mm b/WebCore/page/mac/FrameMac.mm index 6d8bcd97859..ec4b68c3946 100644 --- a/WebCore/page/mac/FrameMac.mm +++ b/WebCore/page/mac/FrameMac.mm @@ -570,11 +570,6 @@ void Frame::willPopupMenu(NSMenu * menu) [d->m_bridge willPopupMenu:menu]; } -void Frame::setNeedsReapplyStyles() -{ - [d->m_bridge setNeedsReapplyStyles]; -} - FloatRect Frame::customHighlightLineRect(const AtomicString& type, const FloatRect& lineRect, Node* node) { return [d->m_bridge customHighlightRect:type forLine:lineRect representedNode:node]; diff --git a/WebCore/page/mac/WebCoreFrameBridge.h b/WebCore/page/mac/WebCoreFrameBridge.h index fcade9d3690..9e528940af8 100644 --- a/WebCore/page/mac/WebCoreFrameBridge.h +++ b/WebCore/page/mac/WebCoreFrameBridge.h @@ -246,8 +246,6 @@ enum WebScrollGranularity { - (void)runOpenPanelForFileButtonWithResultListener:(id )resultListener; -- (void)setNeedsReapplyStyles; - - (NSView *)viewForPluginWithFrame:(NSRect)frame URL:(NSURL *)URL attributeNames:(NSArray *)attributeNames diff --git a/WebCore/page/mac/WebCoreFrameBridge.mm b/WebCore/page/mac/WebCoreFrameBridge.mm index b0fc5e86c68..ff998fd9938 100644 --- a/WebCore/page/mac/WebCoreFrameBridge.mm +++ b/WebCore/page/mac/WebCoreFrameBridge.mm @@ -394,7 +394,7 @@ static inline WebCoreFrameBridge *bridge(Frame *frame) Document *doc = m_frame->document(); if (doc) doc->setPrinting(deviceType == WebCoreDevicePrinter); - m_frame->reparseConfiguration(); + m_frame->reapplyStyles(); } - (void)forceLayoutAdjustingViewSize:(BOOL)flag diff --git a/WebCore/page/qt/FrameQt.cpp b/WebCore/page/qt/FrameQt.cpp index 6fc7b614342..0e46aff35e9 100644 --- a/WebCore/page/qt/FrameQt.cpp +++ b/WebCore/page/qt/FrameQt.cpp @@ -117,10 +117,5 @@ void Frame::dashboardRegionsChanged() { } -void Frame::setNeedsReapplyStyles() -{ - notImplemented(); -} - } // vim: ts=4 sw=4 et diff --git a/WebCore/platform/wx/TemporaryLinkStubs.cpp b/WebCore/platform/wx/TemporaryLinkStubs.cpp index d2b772706c6..c0be41ddfc2 100755 --- a/WebCore/platform/wx/TemporaryLinkStubs.cpp +++ b/WebCore/platform/wx/TemporaryLinkStubs.cpp @@ -138,7 +138,6 @@ void GraphicsContext::setAlpha(float) { notImplemented(); } Color WebCore::focusRingColor() { return 0xFF0000FF; } void WebCore::setFocusRingColorChangeFunction(void (*)()) { } -void Frame::setNeedsReapplyStyles() { notImplemented(); } void Image::drawPattern(GraphicsContext*, const FloatRect& srcRect, const AffineTransform& patternTransform, const FloatPoint& phase, CompositeOperator, const FloatRect& destRect) { notImplemented(); } PlatformScrollbar::PlatformScrollbar(ScrollbarClient* client, ScrollbarOrientation orientation, ScrollbarControlSize controlSize) : Scrollbar(client, orientation, controlSize) { notImplemented(); } diff --git a/WebKit/mac/ChangeLog b/WebKit/mac/ChangeLog index 3f3b97fd0d4..bdf6c36d134 100644 --- a/WebKit/mac/ChangeLog +++ b/WebKit/mac/ChangeLog @@ -1,3 +1,14 @@ +2007-11-27 Adam Roben + + Remove -[WebFrameBridge setNeedsReapplyStyles] + + This functionality is now WebCore's responsibility. + + Reviewed by Hyatt. + + * WebCoreSupport/WebFrameBridge.mm: + * WebKit.order: + 2007-12-04 John Sullivan Reviewed by Darin diff --git a/WebKit/mac/WebCoreSupport/WebFrameBridge.mm b/WebKit/mac/WebCoreSupport/WebFrameBridge.mm index 217b039bc28..e3628ab5bfd 100644 --- a/WebKit/mac/WebCoreSupport/WebFrameBridge.mm +++ b/WebKit/mac/WebCoreSupport/WebFrameBridge.mm @@ -349,16 +349,6 @@ NSString *WebPluginContainerKey = @"WebPluginContainer"; return newFrame.get(); } -- (void)setNeedsReapplyStyles -{ - NSView *view = [[_frame frameView] documentView]; - if ([view isKindOfClass:[WebHTMLView class]]) { - [(WebHTMLView *)view setNeedsToApplyStyles:YES]; - [view setNeedsLayout:YES]; - [view setNeedsDisplay:YES]; - } -} - - (NSView *)pluginViewWithPackage:(WebPluginPackage *)pluginPackage attributeNames:(NSArray *)attributeNames attributeValues:(NSArray *)attributeValues diff --git a/WebKit/mac/WebKit.order b/WebKit/mac/WebKit.order index 2621a45479c..b6db8b448d8 100644 --- a/WebKit/mac/WebKit.order +++ b/WebKit/mac/WebKit.order @@ -190,7 +190,6 @@ __ZNK20WebFrameLoaderClient17overrideMediaTypeEv -[WebPreferences(WebPrivate) _useSiteSpecificSpoofing] -[WebPreferences cursiveFontFamily] -[WebPreferences _stringValueForKey:] --[WebFrameBridge setNeedsReapplyStyles] -[WebHTMLView setNeedsToApplyStyles:] -[WebHTMLView setNeedsLayout:] -[WebPreferences defaultFixedFontSize] -- GitLab