--Boundary-00=_xxay9uHjtutPsyg Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Description: clearsigned data Content-Disposition: inline -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Wednesday 06 November 2002 19:59, David Joham wrote: > Hello all, > > I'm using Konq 3.01 at the moment at work and I've noticed that onload events assigned via > Javascript to Image objects don't seem to work. I'm trying to track this down to get the new HP > site working in Konq. > > Here's a small recreation that demonstrates the problem: [...] Got it to work... after quite some fighting and rewriting :) According to the NS doc (http://docs.sun.com/source/816-6408-10/image.htm) (couldn't find a IE doc for this !?), we are still missing _many_ attributes for the Image object... - -- David FAURE, david@mandrakesoft.com, faure@kde.org http://people.mandrakesoft.com/~david/ Contributing to: http://www.konqueror.org/, http://www.koffice.org/ Get the latest KOffice - http://download.kde.org/stable/koffice-1.2/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) iD8DBQE9yaxy72KcVAmwbhARAlF9AJ9TuCNEo5aj1B/QyYLG4PAevdJe3gCfRWgR AEPETv3Z95thQPgGz8WSXbY= =gC9J -----END PGP SIGNATURE----- --Boundary-00=_xxay9uHjtutPsyg Content-Type: text/x-diff; charset="utf-8"; name="image_onload.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="image_onload.diff" Index: kjs_html.cpp =================================================================== RCS file: /home/kde/kdelibs/khtml/ecma/kjs_html.cpp,v retrieving revision 1.212 diff -u -p -r1.212 kjs_html.cpp --- kjs_html.cpp 2002/11/04 11:25:32 1.212 +++ kjs_html.cpp 2002/11/06 23:53:49 @@ -34,12 +34,15 @@ #include "html/html_imageimpl.h" #include "html/html_objectimpl.h" #include "html/html_miscimpl.h" +#include "xml/dom2_eventsimpl.h" + #include #include "khtml_part.h" #include "khtmlview.h" #include "ecma/kjs_css.h" +#include "ecma/kjs_events.h" #include "ecma/kjs_html.h" #include "ecma/kjs_window.h" #include "ecma/kjs_html.lut.h" @@ -47,6 +50,7 @@ #include "java/kjavaappletcontext.h" #include "misc/htmltags.h" +#include "misc/htmlattrs.h" #include "rendering/render_object.h" #include "rendering/render_root.h" @@ -2846,12 +2850,12 @@ DEFINE_PROTOTYPE("HTMLCollection", HTMLC IMPLEMENT_PROTOFUNC_DOM(HTMLCollectionProtoFunc) IMPLEMENT_PROTOTYPE(HTMLCollectionProto,HTMLCollectionProtoFunc) -const ClassInfo HTMLCollection::info = { "HTMLCollection", 0, 0, 0 }; +const ClassInfo KJS::HTMLCollection::info = { "HTMLCollection", 0, 0, 0 }; -HTMLCollection::HTMLCollection(ExecState *exec, DOM::HTMLCollection c) +KJS::HTMLCollection::HTMLCollection(ExecState *exec, DOM::HTMLCollection c) : DOMObject(HTMLCollectionProto::self(exec)), collection(c) {} -HTMLCollection::~HTMLCollection() +KJS::HTMLCollection::~HTMLCollection() { ScriptInterpreter::forgetDOMObject(collection.handle()); } @@ -3186,10 +3190,13 @@ const ClassInfo KJS::Image::info = { "Im @begin ImageTable 3 src Image::Src DontDelete complete Image::Complete DontDelete|ReadOnly + onload Image::OnLoad DontDelete @end */ Image::Image(ExecState* exec, const DOM::Document &d) - : DOMObject(exec->interpreter()->builtinObjectPrototype()), doc(d), img(0) { } + : DOMObject(exec->interpreter()->builtinObjectPrototype()), doc(d), img(0), + m_onLoadListener(0L) +{ } Value Image::tryGet(ExecState *exec, const UString &propertyName) const { @@ -3203,6 +3210,10 @@ Value Image::getValueProperty(ExecState return String(src); case Complete: return Boolean(!img || img->status() >= khtml::CachedObject::Persistent); + case OnLoad: + if ( m_onLoadListener ) + return m_onLoadListener->listenerObj(); + return Undefined(); default: kdWarning() << "Image::getValueProperty unhandled token " << token << endl; return Value(); @@ -3211,15 +3222,30 @@ Value Image::getValueProperty(ExecState void Image::tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr) { - // Not worth using the hashtable + // TODO: use the hashtable if (propertyName == "src") { String str = value.toString(exec); src = str.value(); if ( img ) img->deref(this); img = static_cast( doc.handle() )->docLoader()->requestImage( src.string() ); if ( img ) img->ref(this); + } else if (propertyName == "onload" ) { + m_onLoadListener = Window::retrieveActive(exec)->getJSEventListener(value,true); } else { DOMObject::tryPut(exec, propertyName, value, attr); + } +} + +void Image::notifyFinished(khtml::CachedObject * finishedObj) +{ + if (img == finishedObj /*&& !loadEventSent*/ && m_onLoadListener ) { + //loadEventSent = true; + DOM::EventImpl *evt = new DOM::EventImpl( (DOM::EventImpl::EventId)ATTR_ONLOAD, false, false ); + evt->setTarget( 0 ); + evt->ref(); + DOM::Event e(evt); + m_onLoadListener->handleEvent( e ); + evt->deref(); } } Index: kjs_html.h =================================================================== RCS file: /home/kde/kdelibs/khtml/ecma/kjs_html.h,v retrieving revision 1.67 diff -u -p -r1.67 kjs_html.h --- kjs_html.h 2002/11/03 20:55:34 1.67 +++ kjs_html.h 2002/11/06 23:53:49 @@ -217,13 +217,15 @@ namespace KJS { Value getValueProperty(ExecState *exec, int token) const; virtual void tryPut(ExecState *exec, const UString &propertyName, const Value& value, int attr = None); virtual bool toBoolean(ExecState *) const { return true; } + virtual void notifyFinished(khtml::CachedObject * finishedObj); virtual const ClassInfo* classInfo() const { return &info; } static const ClassInfo info; - enum { Src, Complete }; + enum { Src, Complete, OnLoad }; private: UString src; DOM::Document doc; khtml::CachedImage* img; + JSEventListener *m_onLoadListener; }; Value getHTMLCollection(ExecState *exec, DOM::HTMLCollection c); Index: kjs_html.lut.h =================================================================== RCS file: /home/kde/kdelibs/khtml/ecma/kjs_html.lut.h,v retrieving revision 1.20 diff -u -p -r1.20 kjs_html.lut.h --- kjs_html.lut.h 2002/11/03 20:55:34 1.20 +++ kjs_html.lut.h 2002/11/06 23:53:49 @@ -1098,10 +1098,11 @@ namespace KJS { const struct HashEntry ImageTableEntries[] = { { 0, 0, 0, 0, 0 }, - { "src", Image::Src, DontDelete, 0, 0 }, - { "complete", Image::Complete, DontDelete|ReadOnly, 0, 0 } + { "src", Image::Src, DontDelete, 0, &ImageTableEntries[3] }, + { "complete", Image::Complete, DontDelete|ReadOnly, 0, 0 }, + { "onload", Image::OnLoad, DontDelete, 0, 0 } }; -const struct HashTable ImageTable = { 2, 3, ImageTableEntries, 3 }; +const struct HashTable ImageTable = { 2, 4, ImageTableEntries, 3 }; }; // namespace --Boundary-00=_xxay9uHjtutPsyg--