Commited by Tim Hatcher.
Fixes http://bugzilla.opendarwin.org/show_bug.cgi?id=5256
Relayout during load causes duplicate plugin part.
This was a problem with <OBJECT>s that contain an <EMBED>, if
layout happened in the middle of the OBJECT but before the EMBED.
No test case added, requires manual testing.
* khtml/html/html_objectimpl.cpp:
(DOM::HTMLObjectElementImpl::HTMLObjectElementImpl):
(DOM::HTMLObjectElementImpl::closeRenderer):
(DOM::HTMLObjectElementImpl::setComplete):
* khtml/html/html_objectimpl.h:
(DOM::HTMLObjectElementImpl::isComplete):
* khtml/html/htmlfactory.cpp:
(DOM::objectConstructor):
* khtml/rendering/render_frames.cpp:
(RenderPartObject::updateWidget):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@11017
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2005-11-01 Mitz Pettel <opendarwin.org@mitzpettel.com>
+
+ Reviewed by Dave Hyatt.
+ Commited by Tim Hatcher.
+
+ Fixes http://bugzilla.opendarwin.org/show_bug.cgi?id=5256
+ Relayout during load causes duplicate plugin part.
+
+ This was a problem with <OBJECT>s that contain an <EMBED>, if
+ layout happened in the middle of the OBJECT but before the EMBED.
+
+ No test case added, requires manual testing.
+
+ * khtml/html/html_objectimpl.cpp:
+ (DOM::HTMLObjectElementImpl::HTMLObjectElementImpl):
+ (DOM::HTMLObjectElementImpl::closeRenderer):
+ (DOM::HTMLObjectElementImpl::setComplete):
+ * khtml/html/html_objectimpl.h:
+ (DOM::HTMLObjectElementImpl::isComplete):
+ * khtml/html/htmlfactory.cpp:
+ (DOM::objectConstructor):
+ * khtml/rendering/render_frames.cpp:
+ (RenderPartObject::updateWidget):
+
2005-11-01 Alexey Proskuryakov <ap@nypop.com>
Reviewed by Dave Hyatt.
{
needWidgetUpdate = false;
m_useFallbackContent = false;
+ m_complete = false;
m_docNamedItem = true;
}
}
}
+void HTMLObjectElementImpl::closeRenderer()
+{
+ // The parser just reached </object>.
+ setComplete(true);
+
+ HTMLElementImpl::closeRenderer();
+}
+
+void HTMLObjectElementImpl::setComplete(bool complete)
+{
+ if (complete != m_complete) {
+ m_complete = complete;
+ if (complete && inDocument() && !m_useFallbackContent) {
+ needWidgetUpdate = true;
+ setChanged();
+ }
+ }
+}
+
void HTMLObjectElementImpl::detach()
{
if (attached() && m_render && !m_useFallbackContent) {
virtual void attach();
virtual bool rendererIsNeeded(khtml::RenderStyle *);
virtual khtml::RenderObject *createRenderer(RenderArena *, khtml::RenderStyle *);
+ virtual void closeRenderer();
virtual void detach();
virtual void insertedIntoDocument();
virtual void removedFromDocument();
DOMString width() const;
void setWidth(const DOMString &);
+ bool isComplete() const { return m_complete; }
+ void setComplete(bool complete);
+
bool isDocNamedItem() const { return m_docNamedItem; }
#if APPLE_CHANGES
KJS::Bindings::Instance *getObjectInstance() const;
#if APPLE_CHANGES
mutable KJS::Bindings::Instance *objectInstance;
#endif
+ bool m_complete;
bool m_docNamedItem;
};
HTMLElementImpl* objectConstructor(const AtomicString& tagName, DocumentPtr* docPtr, HTMLFormElementImpl* form, bool createdByParser)
{
- return new HTMLObjectElementImpl(docPtr);
+ HTMLObjectElementImpl * object = new HTMLObjectElementImpl(docPtr);
+ object->setComplete(!createdByParser);
+ return object;
}
HTMLElementImpl* paramConstructor(const AtomicString& tagName, DocumentPtr* docPtr, HTMLFormElementImpl* form, bool createdByParser)
HTMLObjectElementImpl *o = static_cast<HTMLObjectElementImpl *>(element());
+ if (!o->isComplete())
+ return;
// Check for a child EMBED tag.
HTMLEmbedElementImpl *embed = 0;
for (NodeImpl *child = o->firstChild(); child; ) {