[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