summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'kde-base/kdelibs/files/kdelibs-3.5.9-bug_219970_khtml.patch')
-rw-r--r--kde-base/kdelibs/files/kdelibs-3.5.9-bug_219970_khtml.patch90
1 files changed, 90 insertions, 0 deletions
diff --git a/kde-base/kdelibs/files/kdelibs-3.5.9-bug_219970_khtml.patch b/kde-base/kdelibs/files/kdelibs-3.5.9-bug_219970_khtml.patch
new file mode 100644
index 000000000000..003446d595ee
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-3.5.9-bug_219970_khtml.patch
@@ -0,0 +1,90 @@
+--- khtml/rendering/render_container.cpp.orig 2008-05-03 09:22:01.000000000 +0200
++++ khtml/rendering/render_container.cpp 2008-05-03 09:22:47.000000000 +0200
+@@ -79,6 +79,8 @@
+ kdDebug( 6040 ) << this << ": " << renderName() << "(RenderObject)::addChild( " << newChild << ": " <<
+ newChild->renderName() << ", " << (beforeChild ? beforeChild->renderName() : "0") << " )" << endl;
+ #endif
++ // protect ourselves from deletion
++ setDoNotDelete(true);
+
+ bool needsTable = false;
+
+@@ -159,6 +161,8 @@
+ static_cast<RenderText*>(newChild)->setText(textToTransform, true);
+ }
+ newChild->attach();
++
++ setDoNotDelete(false);
+ }
+
+ RenderObject* RenderContainer::removeChildNode(RenderObject* oldChild)
+@@ -545,7 +549,7 @@
+ RenderObject *next = child->nextSibling();
+
+ if ( child->isRenderBlock() && child->isAnonymousBlock() && !child->continuation() &&
+- !child->childrenInline() && !child->isTableCell() ) {
++ !child->childrenInline() && !child->isTableCell() && !child->doNotDelete()) {
+ RenderObject *firstAnChild = child->firstChild();
+ RenderObject *lastAnChild = child->lastChild();
+ if ( firstAnChild ) {
+@@ -560,17 +564,21 @@
+ child->previousSibling()->setNextSibling( firstAnChild );
+ if ( child->nextSibling() )
+ child->nextSibling()->setPreviousSibling( lastAnChild );
++ if ( child == firstChild() )
++ m_first = firstAnChild;
++ if ( child == lastChild() )
++ m_last = lastAnChild;
+ } else {
+ if ( child->previousSibling() )
+ child->previousSibling()->setNextSibling( child->nextSibling() );
+ if ( child->nextSibling() )
+ child->nextSibling()->setPreviousSibling( child->previousSibling() );
+-
+- }
+ if ( child == firstChild() )
+- m_first = firstAnChild;
++ m_first = child->nextSibling();
+ if ( child == lastChild() )
+- m_last = lastAnChild;
++ m_last = child->previousSibling();
++ }
++
+ child->setParent( 0 );
+ child->setPreviousSibling( 0 );
+ child->setNextSibling( 0 );
+--- khtml/rendering/render_object.cpp.orig 2008-05-03 09:22:40.000000000 +0200
++++ khtml/rendering/render_object.cpp 2008-05-03 09:22:47.000000000 +0200
+@@ -178,7 +178,8 @@
+ m_isRoot( false ),
+ m_afterPageBreak( false ),
+ m_needsPageClear( false ),
+- m_containsPageBreak( false )
++ m_containsPageBreak( false ),
++ m_doNotDelete(false)
+ {
+ assert( node );
+ if (node->getDocument()->documentElement() == node) setIsRoot(true);
+--- khtml/rendering/render_object.h.orig 2008-05-03 09:22:04.000000000 +0200
++++ khtml/rendering/render_object.h 2008-05-03 09:22:47.000000000 +0200
+@@ -754,6 +754,9 @@
+ virtual void deleteInlineBoxes(RenderArena* arena=0) {(void)arena;}
+ virtual void detach( );
+
++ void setDoNotDelete(bool b) { m_doNotDelete = b; }
++ bool doNotDelete() const { return m_doNotDelete; }
++
+ const QFont &font(bool firstLine) const {
+ return style( firstLine )->font();
+ }
+@@ -835,7 +838,9 @@
+ bool m_needsPageClear : 1;
+ bool m_containsPageBreak : 1;
+
+- // ### we have 16 + 24 bits. Cut 8 and save 32
++ bool m_doNotDelete : 1; // This object should not be auto-deleted
++
++ // ### we have 16 + 27 bits.
+
+
+ void arenaDelete(RenderArena *arena, void *objectBase);