diff options
Diffstat (limited to 'Source/WebCore/rendering/RenderWidget.h')
-rw-r--r-- | Source/WebCore/rendering/RenderWidget.h | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/Source/WebCore/rendering/RenderWidget.h b/Source/WebCore/rendering/RenderWidget.h index b7db3b809..d20123a68 100644 --- a/Source/WebCore/rendering/RenderWidget.h +++ b/Source/WebCore/rendering/RenderWidget.h @@ -28,6 +28,32 @@ namespace WebCore { +class WidgetHierarchyUpdatesSuspensionScope { +public: + WidgetHierarchyUpdatesSuspensionScope() + { + s_widgetHierarchyUpdateSuspendCount++; + } + ~WidgetHierarchyUpdatesSuspensionScope() + { + ASSERT(s_widgetHierarchyUpdateSuspendCount); + if (s_widgetHierarchyUpdateSuspendCount == 1) + moveWidgets(); + s_widgetHierarchyUpdateSuspendCount--; + } + + static bool isSuspended() { return s_widgetHierarchyUpdateSuspendCount; } + static void scheduleWidgetToMove(Widget* widget, FrameView* frame) { widgetNewParentMap().set(widget, frame); } + +private: + typedef HashMap<RefPtr<Widget>, FrameView*> WidgetToParentMap; + static WidgetToParentMap& widgetNewParentMap(); + + void moveWidgets(); + + static unsigned s_widgetHierarchyUpdateSuspendCount; +}; + class RenderWidget : public RenderReplaced, private OverlapTestRequestClient { public: virtual ~RenderWidget(); @@ -42,9 +68,6 @@ public: IntRect windowClipRect() const; void notifyWidget(WidgetNotification); - - static void suspendWidgetHierarchyUpdates(); - static void resumeWidgetHierarchyUpdates(); RenderArena* ref() { ++m_refCount; return renderArena(); } void deref(RenderArena*); |