[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/4.0/kdelibs/khtml/rendering
From:       Maks Orlovich <maksim () kde ! org>
Date:       2008-01-14 2:25:54
Message-ID: 1200277554.723860.22645.nullmailer () svn ! kde ! org
[Download RAW message or body]

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; }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic