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

List:       kfm-devel
Subject:    PATCH(III): Possible real fix... Re: Bug#11859: Assertion failed
From:       Kurt Granroth <granroth () kde ! org>
Date:       2000-09-30 20:06:38
[Download RAW message or body]

Dirk Mueller wrote:
> We had that already and it was pointed out wrong. 
> see commits -r1.169 and -r1.171 htmlparser.cpp. We probably need a better
> fix...
 
Okay, the problem here is that the <embed> tag is special.  It's a
closed one... but it needs RenderPartObject::close() called.  The
::close() method is called in the popBlock method but that is never
called for closed object.  In all other cases of closed objects, it
doesn't need to be.

Now when Embed was considered inline, then the ::close method was
called... unfortunately, that was a hack in itself since Embed is
inherently *not* an inline object -- it's a closed one.

So, the trick here is to both have it a closed object AND call the
::close() method.

The attached patch does that.  It simply checks if the object is an
ID_EMBED one and has a renderer after it's attached.  If both are
true, it does a renderer()->close()

I tested this with several pages with <embed> and all worked great.
-- 
Kurt Granroth            | http://www.granroth.org
KDE Developer/Evangelist | SuSE Labs Open Source Developer
granroth@kde.org         | granroth@suse.com
           KDE -- Putting a Friendly Face on Unix

["htmlparser.diff" (text/plain)]

Index: htmlparser.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/html/htmlparser.cpp,v
retrieving revision 1.174
diff -b -u -u -r1.174 htmlparser.cpp
--- htmlparser.cpp	2000/09/27 19:46:34	1.174
+++ htmlparser.cpp	2000/09/30 19:58:03
@@ -110,7 +110,7 @@
     4, // ID_DL
     3, // ID_DT
     1, // ID_EM
-    1, // ID_EMBED
+    0, // ID_EMBED
     3, // ID_FIELDSET
     1, // ID_FONT
     3, // ID_FORM
@@ -380,7 +380,10 @@
             n->attach(HTMLWidget);
 
         if(tagPriority[id] == 0 && n->renderer())
+        {
             n->renderer()->calcMinMaxWidth();
+            if (n->id() == ID_EMBED) n->renderer()->close();
+        }
 
     }
     catch(DOMException exception)


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

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