SVN commit 761088 by orlovich: Permit RenderWidget subclasses to defer memory management of the widget to the DOM. Needed for iframe's, etc., to be managed by the DOM and not the renderer M +5 -2 render_replaced.cpp M +4 -0 render_replaced.h --- branches/KDE/4.0/kdelibs/khtml/rendering/render_replaced.cpp #761087:761088 @@ -148,6 +148,7 @@ m_resizePending = false; m_discardResizes = false; m_needsMask = false; + m_ownsWidget = true; // this is no real reference counting, its just there // to make sure that we're not deleted while we're recursed @@ -187,7 +188,8 @@ if(m_widget) { m_widget->hide(); - m_widget->deleteLater(); + if (m_ownsWidget) + m_widget->deleteLater(); } } @@ -262,7 +264,8 @@ m_widget->removeEventFilter(this); disconnect( m_widget, SIGNAL( destroyed()), this, SLOT( slotWidgetDestructed())); m_widget->hide(); - m_widget->deleteLater(); //Might happen due to event on the widget, so be careful + if (m_ownsWidget) + m_widget->deleteLater(); //Might happen due to event on the widget, so be careful m_widget = 0; } m_widget = widget; --- branches/KDE/4.0/kdelibs/khtml/rendering/render_replaced.h #761087:761088 @@ -118,6 +118,9 @@ void slotWidgetDestructed(); protected: + // Should be called by subclasses to ensure we don't memory-manage this.. + void setDoesNotOwnWidget() { m_ownsWidget = false; } + virtual void paintBoxDecorations(PaintInfo& paintInfo, int _tx, int _ty); virtual void paintBackground(QPainter *p, const QColor& c, const BackgroundLayer* bgLayer, QRect clipr, int _tx, int _ty, int w, int height); @@ -154,6 +157,7 @@ bool m_resizePending; bool m_discardResizes; bool m_needsMask; + bool m_ownsWidget; public: virtual int borderTop() const { return canHaveBorder() ? RenderReplaced::borderTop() : 0; }