[webkit-changes] cvs commit: WebCore/kwq DOM.mm
Geoffrey
ggaren at opensource.apple.com
Tue Sep 20 00:55:54 PDT 2005
ggaren 05/09/20 00:55:54
Modified: . ChangeLog
kwq DOM.mm
Log:
- Rolled in fix for http://bugzilla.opendarwin.org/show_bug.cgi?id=4247
addEventListener in Obj-C does not work
No layout test because we don't have test machinery for the Obj-C bindings yet.
Reviewed by eric.
* kwq/DOM.mm:
(-[DOMNode addEventListener:::]):
(-[DOMNode removeEventListener:::]):
(ObjCEventListener::find):
(ObjCEventListener::create):
(ObjCEventListener::ObjCEventListener):
(ObjCEventListener::~ObjCEventListener):
(ObjCEventListener::handleEvent):
Revision Changes Path
1.135 +17 -0 WebCore/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /cvs/root/WebCore/ChangeLog,v
retrieving revision 1.134
retrieving revision 1.135
diff -u -r1.134 -r1.135
--- ChangeLog 20 Sep 2005 07:46:52 -0000 1.134
+++ ChangeLog 20 Sep 2005 07:55:53 -0000 1.135
@@ -1,4 +1,21 @@
2005-09-20 Geoffrey Garen <ggaren at apple.com>
+ - Rolled in fix for http://bugzilla.opendarwin.org/show_bug.cgi?id=4247
+ addEventListener in Obj-C does not work
+
+ No layout test because we don't have test machinery for the Obj-C bindings yet.
+
+ Reviewed by eric.
+
+ * kwq/DOM.mm:
+ (-[DOMNode addEventListener:::]):
+ (-[DOMNode removeEventListener:::]):
+ (ObjCEventListener::find):
+ (ObjCEventListener::create):
+ (ObjCEventListener::ObjCEventListener):
+ (ObjCEventListener::~ObjCEventListener):
+ (ObjCEventListener::handleEvent):
+
+2005-09-20 Geoffrey Garen <ggaren at apple.com>
- Rolled in fix for http://bugzilla.opendarwin.org/show_bug.cgi?id=4849
htmltokenizer.cpp won't compile with TOKEN_DEBUG defined
1.47 +66 -2 WebCore/kwq/DOM.mm
Index: DOM.mm
===================================================================
RCS file: /cvs/root/WebCore/kwq/DOM.mm,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- DOM.mm 16 Sep 2005 22:42:23 -0000 1.46
+++ DOM.mm 20 Sep 2005 07:55:54 -0000 1.47
@@ -30,6 +30,7 @@
#import <JavaScriptCore/WebScriptObjectPrivate.h>
#import "csshelper.h"
+#import "dom2_events.h"
#import "dom2_range.h"
#import "dom2_rangeimpl.h"
#import "dom2_traversal.h"
@@ -44,6 +45,7 @@
#import "dom_textimpl.h"
#import "dom_xmlimpl.h"
#import "html_elementimpl.h"
+#import "hashmap.h"
#import "khtml_part.h"
@@ -71,6 +73,8 @@
using DOM::DOMStringImpl;
using DOM::ElementImpl;
using DOM::EntityImpl;
+using DOM::EventImpl;
+using DOM::EventListener;
using DOM::FilterNode;
using DOM::HTMLElementImpl;
using DOM::NamedNodeMapImpl;
@@ -89,6 +93,8 @@
using DOM::TextImpl;
using DOM::TreeWalkerImpl;
+using khtml::HashMap;
+using khtml::PointerHash;
using khtml::RenderObject;
using khtml::SharedPtr;
@@ -110,6 +116,24 @@
+ (DOMNamedNodeMap *)_namedNodeMapWithImpl:(NamedNodeMapImpl *)impl;
@end
+class ObjCEventListener : public EventListener {
+public:
+ static ObjCEventListener *find(id <DOMEventListener>);
+ static ObjCEventListener *create(id <DOMEventListener>);
+
+private:
+ ObjCEventListener(id <DOMEventListener>);
+ virtual ~ObjCEventListener();
+
+ virtual void handleEvent(EventImpl *, bool isWindowEvent);
+
+ id <DOMEventListener> m_listener;
+};
+
+typedef HashMap< id, ObjCEventListener *, PointerHash<id> > ListenerMap;
+
+static ListenerMap *listenerMap;
+
//------------------------------------------------------------------------------------------
// DOMObject
@@ -356,12 +380,15 @@
- (void)addEventListener:(NSString *)type :(id <DOMEventListener>)listener :(BOOL)useCapture
{
- ERROR("unimplemented");
+ EventListener *wrapper = ObjCEventListener::create(listener);
+ [self _nodeImpl]->addEventListener(type, wrapper, useCapture);
+ wrapper->deref();
}
- (void)removeEventListener:(NSString *)type :(id <DOMEventListener>)listener :(BOOL)useCapture
{
- ERROR("unimplemented");
+ if (EventListener *wrapper = ObjCEventListener::find(listener))
+ [self _nodeImpl]->removeEventListener(type, wrapper, useCapture);
}
- (BOOL)dispatchEvent:(DOMEvent *)event
@@ -2205,3 +2232,40 @@
@end
+ObjCEventListener *ObjCEventListener::find(id <DOMEventListener> listener)
+{
+ if (ListenerMap *map = listenerMap)
+ return map->get(listener);
+ return NULL;
+}
+
+ObjCEventListener *ObjCEventListener::create(id <DOMEventListener> listener)
+{
+ ObjCEventListener *wrapper = find(listener);
+ if (!wrapper)
+ wrapper = new ObjCEventListener(listener);
+ wrapper->ref();
+ return wrapper;
+}
+
+ObjCEventListener::ObjCEventListener(id <DOMEventListener> listener)
+ : m_listener([listener retain])
+{
+ ListenerMap *map = listenerMap;
+ if (!map) {
+ map = new ListenerMap;
+ listenerMap = map;
+ }
+ map->insert(listener, this);
+}
+
+ObjCEventListener::~ObjCEventListener()
+{
+ listenerMap->remove(m_listener);
+ [m_listener release];
+}
+
+void ObjCEventListener::handleEvent(EventImpl *event, bool)
+{
+ [m_listener handleEvent:[DOMEvent _eventWithImpl:event]];
+}
More information about the webkit-changes
mailing list