Reviewed by David Harrison.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 10 May 2005 21:59:15 +0000 (21:59 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 10 May 2005 21:59:15 +0000 (21:59 +0000)
        - next pass of moving code from C++ DOM wrappers into the DOM impl. classes
          (this step adds more member functions missing from the DOM impl. and
           changes some of the Objective-C DOM to call the new ones; also changes some
           parameter types in the DOM impl.)

        * khtml/dom/dom2_events.cpp:
        (UIEvent::initUIEvent):
        (MouseEvent::initMouseEvent):
        (MutationEvent::initMutationEvent):
        (KeyboardEvent::initKeyboardEvent):
        * khtml/dom/dom_doc.cpp:
        (DOM::DOMImplementation::createDocument):
        (DOM::Document::getElementsByTagName):
        (DOM::Document::getElementsByTagNameNS):
        * khtml/dom/dom_element.cpp:
        (Element::removeAttributeNode):
        (Element::getElementsByTagName):
        (Element::getElementsByTagNameNS):
        (Element::setAttributeNodeNS):
        * khtml/dom/dom_node.cpp:
        (NamedNodeMap::setNamedItemNS):
        (NamedNodeMap::removeNamedItemNS):
        * khtml/ecma/kjs_binding.cpp:
        * khtml/ecma/kjs_events.cpp:
        (ClipboardProtoFunc::tryCall):
        * khtml/editing/jsediting.cpp:
        * khtml/khtml_part.cpp:
        (KHTMLPart::applyEditingStyleToBodyElement):
        (KHTMLPart::removeEditingStyleFromBodyElement):
        * khtml/khtmlview.cpp:
        (KHTMLView::viewportMousePressEvent):
        (KHTMLView::viewportMouseDoubleClickEvent):
        (KHTMLView::viewportMouseMoveEvent):
        (KHTMLView::viewportMouseReleaseEvent):
        (KHTMLView::updateDragAndDrop):
        (KHTMLView::dispatchMouseEvent):
        * khtml/misc/shared.h:
        (khtml::SharedPtr::reset):
        (khtml::::operator):
        (khtml::static_pointer_cast):
        (khtml::const_pointer_cast):
        * khtml/xml/dom2_eventsimpl.cpp:
        (UIEventImpl::initUIEvent):
        (UIEventImpl::keyCode):
        (UIEventImpl::charCode):
        (UIEventImpl::layerX):
        (UIEventImpl::layerY):
        (UIEventImpl::pageX):
        (UIEventImpl::pageY):
        (UIEventImpl::which):
        (MouseRelatedEventImpl::pageX):
        (MouseRelatedEventImpl::pageY):
        (MouseEventImpl::initMouseEvent):
        (MouseEventImpl::which):
        (KeyboardEventImpl::initKeyboardEvent):
        (KeyboardEventImpl::which):
        (MutationEventImpl::MutationEventImpl):
        (MutationEventImpl::initMutationEvent):
        * khtml/xml/dom2_eventsimpl.h:
        (DOM::MutationEventImpl::relatedNode):
        * khtml/xml/dom2_rangeimpl.h:
        * khtml/xml/dom2_traversalimpl.cpp:
        (DOM::NodeFilterImpl::acceptNode):
        * khtml/xml/dom2_traversalimpl.h:
        * khtml/xml/dom_docimpl.cpp:
        (DOMImplementationImpl::createDocument):
        (DOMImplementationImpl::createCSSStyleSheet):
        (DOMImplementationImpl::createHTMLDocument):
        (DocumentImpl::createAttribute):
        (DocumentImpl::createHTMLElement):
        (DocumentImpl::getOverrideStyle):
        (DocumentImpl::defaultEventHandler):
        (DocumentImpl::completeURL):
        (DocumentImpl::topDocument):
        (DocumentImpl::createAttributeNS):
        (DocumentImpl::images):
        (DocumentImpl::applets):
        (DocumentImpl::embeds):
        (DocumentImpl::objects):
        (DocumentImpl::links):
        (DocumentImpl::forms):
        (DocumentImpl::anchors):
        (DocumentImpl::all):
        (DocumentImpl::nameableItems):
        (DocumentImpl::getElementsByName):
        * khtml/xml/dom_docimpl.h:
        (DOM::DocumentImpl::realDocType):
        (DOM::DocumentImpl::createAttribute):
        * khtml/xml/dom_elementimpl.cpp:
        (AttrImpl::nodeName):
        (AttrImpl::nodeValue):
        (AttrImpl::name):
        (AttrImpl::value):
        (ElementImpl::attributes):
        (ElementImpl::isURLAttribute):
        (ElementImpl::setAttributeNode):
        (ElementImpl::removeAttributeNode):
        (ElementImpl::setAttributeNS):
        (ElementImpl::removeAttributeNS):
        (ElementImpl::getAttributeNodeNS):
        (ElementImpl::hasAttributeNS):
        (ElementImpl::style):
        (XMLElementImpl::cloneNode):
        (NamedAttrMapImpl::setNamedItem):
        (NamedAttrMapImpl::removeNamedItem):
        * khtml/xml/dom_elementimpl.h:
        (DOM::ElementImpl::hasAttribute):
        (DOM::ElementImpl::getAttribute):
        (DOM::ElementImpl::setAttribute):
        (DOM::ElementImpl::removeAttribute):
        (DOM::ElementImpl::getAttributeNode):
        (DOM::ElementImpl::setAttributeNodeNS):
        * khtml/xml/dom_nodeimpl.cpp:
        (NodeImpl::handleLocalEvents):
        (NodeImpl::isAncestor):
        (NodeImpl::addEventListener):
        (NodeImpl::removeEventListener):
        (NodeImpl::getElementsByTagNameNS):
        (NodeImpl::isSupported):
        (NodeImpl::ownerDocument):
        (NodeImpl::hasAttributes):
        (NodeImpl::attributes):
        (ContainerNodeImpl::removeChildren):
        (NamedNodeMapImpl::~NamedNodeMapImpl):
        (NamedNodeMapImpl::getNamedItemNS):
        (NamedNodeMapImpl::removeNamedItemNS):
        * khtml/xml/dom_nodeimpl.h:
        (DOM::NodeImpl::getElementsByTagName):
        (DOM::NamedNodeMapImpl::NamedNodeMapImpl):
        (DOM::NamedNodeMapImpl::getNamedItem):
        (DOM::NamedNodeMapImpl::removeNamedItem):
        (DOM::NamedNodeMapImpl::setNamedItemNS):
        (DOM::NamedNodeMapImpl::isReadOnly):
        * khtml/xml/dom_textimpl.h:
        * khtml/xml/dom_xmlimpl.h:
        * kwq/DOM.mm:
        (-[DOMNode isSupported::]):
        (-[DOMNode namespaceURI]):
        (-[DOMNode hasAttributes]):
        (-[DOMNamedNodeMap getNamedItem:]):
        (-[DOMNamedNodeMap setNamedItem:]):
        (-[DOMNamedNodeMap removeNamedItem:]):
        (-[DOMNamedNodeMap getNamedItemNS::]):
        (-[DOMNamedNodeMap setNamedItemNS:]):
        (-[DOMNamedNodeMap removeNamedItemNS::]):
        (-[DOMImplementation createDocument:::]):
        (-[DOMImplementation createCSSStyleSheet::]):
        (-[DOMDocument createAttribute:]):
        (-[DOMDocument getElementsByTagName:]):
        (-[DOMDocument createAttributeNS::]):
        (-[DOMDocument getElementsByTagNameNS::]):
        (-[DOMElement setAttribute::]):
        (-[DOMElement removeAttribute:]):
        (-[DOMElement getAttributeNode:]):
        (-[DOMElement setAttributeNode:]):
        (-[DOMElement removeAttributeNode:]):
        (-[DOMElement getElementsByTagName:]):
        (-[DOMElement getAttributeNS::]):
        (-[DOMElement setAttributeNS:::]):
        (-[DOMElement removeAttributeNS::]):
        (-[DOMElement getAttributeNodeNS::]):
        (-[DOMElement setAttributeNodeNS:]):
        (-[DOMElement getElementsByTagNameNS::]):
        (-[DOMElement hasAttribute:]):
        (-[DOMElement hasAttributeNS::]):
        (-[DOMElement style]):
        (-[DOMDocumentType _documentTypeImpl]):
        (ObjCNodeFilterCondition::acceptNode):
        * kwq/DOMEvents.mm:
        (-[DOMMutationEvent relatedNode]):
        * kwq/KWQClipboard.h:
        * kwq/KWQClipboard.mm:
        (KWQClipboard::KWQClipboard):
        (KWQClipboard::setDragImage):
        (KWQClipboard::dragImageElement):
        (KWQClipboard::setDragImageElement):
        (KWQClipboard::dragNSImage):
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::khtmlMouseMoveEvent):
        (KWQKHTMLPart::passSubframeEventToSubframe):
        (KWQKHTMLPart::sendContextMenuEvent):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@9153 268f45cc-cd09-0410-ab3c-d52691b4dbfc

29 files changed:
WebCore/ChangeLog-2005-08-23
WebCore/khtml/dom/dom2_events.cpp
WebCore/khtml/dom/dom_doc.cpp
WebCore/khtml/dom/dom_element.cpp
WebCore/khtml/dom/dom_node.cpp
WebCore/khtml/ecma/kjs_binding.cpp
WebCore/khtml/ecma/kjs_events.cpp
WebCore/khtml/editing/jsediting.cpp
WebCore/khtml/khtml_part.cpp
WebCore/khtml/khtmlview.cpp
WebCore/khtml/misc/shared.h
WebCore/khtml/xml/dom2_eventsimpl.cpp
WebCore/khtml/xml/dom2_eventsimpl.h
WebCore/khtml/xml/dom2_rangeimpl.h
WebCore/khtml/xml/dom2_traversalimpl.cpp
WebCore/khtml/xml/dom2_traversalimpl.h
WebCore/khtml/xml/dom_docimpl.cpp
WebCore/khtml/xml/dom_docimpl.h
WebCore/khtml/xml/dom_elementimpl.cpp
WebCore/khtml/xml/dom_elementimpl.h
WebCore/khtml/xml/dom_nodeimpl.cpp
WebCore/khtml/xml/dom_nodeimpl.h
WebCore/khtml/xml/dom_textimpl.h
WebCore/khtml/xml/dom_xmlimpl.h
WebCore/kwq/DOM.mm
WebCore/kwq/DOMEvents.mm
WebCore/kwq/KWQClipboard.h
WebCore/kwq/KWQClipboard.mm
WebCore/kwq/KWQKHTMLPart.mm

index 081ba9b567bea83cd54455fc82f0ee05818c8ef1..fb996a293fa35d7754ba9261eb300d1292d6d1c0 100644 (file)
@@ -1,3 +1,189 @@
+2005-05-10  Darin Adler  <darin@apple.com>
+
+        Reviewed by David Harrison.
+
+        - next pass of moving code from C++ DOM wrappers into the DOM impl. classes
+          (this step adds more member functions missing from the DOM impl. and
+           changes some of the Objective-C DOM to call the new ones; also changes some
+           parameter types in the DOM impl.)
+
+        * khtml/dom/dom2_events.cpp:
+        (UIEvent::initUIEvent):
+        (MouseEvent::initMouseEvent):
+        (MutationEvent::initMutationEvent):
+        (KeyboardEvent::initKeyboardEvent):
+        * khtml/dom/dom_doc.cpp:
+        (DOM::DOMImplementation::createDocument):
+        (DOM::Document::getElementsByTagName):
+        (DOM::Document::getElementsByTagNameNS):
+        * khtml/dom/dom_element.cpp:
+        (Element::removeAttributeNode):
+        (Element::getElementsByTagName):
+        (Element::getElementsByTagNameNS):
+        (Element::setAttributeNodeNS):
+        * khtml/dom/dom_node.cpp:
+        (NamedNodeMap::setNamedItemNS):
+        (NamedNodeMap::removeNamedItemNS):
+        * khtml/ecma/kjs_binding.cpp:
+        * khtml/ecma/kjs_events.cpp:
+        (ClipboardProtoFunc::tryCall):
+        * khtml/editing/jsediting.cpp:
+        * khtml/khtml_part.cpp:
+        (KHTMLPart::applyEditingStyleToBodyElement):
+        (KHTMLPart::removeEditingStyleFromBodyElement):
+        * khtml/khtmlview.cpp:
+        (KHTMLView::viewportMousePressEvent):
+        (KHTMLView::viewportMouseDoubleClickEvent):
+        (KHTMLView::viewportMouseMoveEvent):
+        (KHTMLView::viewportMouseReleaseEvent):
+        (KHTMLView::updateDragAndDrop):
+        (KHTMLView::dispatchMouseEvent):
+        * khtml/misc/shared.h:
+        (khtml::SharedPtr::reset):
+        (khtml::::operator):
+        (khtml::static_pointer_cast):
+        (khtml::const_pointer_cast):
+        * khtml/xml/dom2_eventsimpl.cpp:
+        (UIEventImpl::initUIEvent):
+        (UIEventImpl::keyCode):
+        (UIEventImpl::charCode):
+        (UIEventImpl::layerX):
+        (UIEventImpl::layerY):
+        (UIEventImpl::pageX):
+        (UIEventImpl::pageY):
+        (UIEventImpl::which):
+        (MouseRelatedEventImpl::pageX):
+        (MouseRelatedEventImpl::pageY):
+        (MouseEventImpl::initMouseEvent):
+        (MouseEventImpl::which):
+        (KeyboardEventImpl::initKeyboardEvent):
+        (KeyboardEventImpl::which):
+        (MutationEventImpl::MutationEventImpl):
+        (MutationEventImpl::initMutationEvent):
+        * khtml/xml/dom2_eventsimpl.h:
+        (DOM::MutationEventImpl::relatedNode):
+        * khtml/xml/dom2_rangeimpl.h:
+        * khtml/xml/dom2_traversalimpl.cpp:
+        (DOM::NodeFilterImpl::acceptNode):
+        * khtml/xml/dom2_traversalimpl.h:
+        * khtml/xml/dom_docimpl.cpp:
+        (DOMImplementationImpl::createDocument):
+        (DOMImplementationImpl::createCSSStyleSheet):
+        (DOMImplementationImpl::createHTMLDocument):
+        (DocumentImpl::createAttribute):
+        (DocumentImpl::createHTMLElement):
+        (DocumentImpl::getOverrideStyle):
+        (DocumentImpl::defaultEventHandler):
+        (DocumentImpl::completeURL):
+        (DocumentImpl::topDocument):
+        (DocumentImpl::createAttributeNS):
+        (DocumentImpl::images):
+        (DocumentImpl::applets):
+        (DocumentImpl::embeds):
+        (DocumentImpl::objects):
+        (DocumentImpl::links):
+        (DocumentImpl::forms):
+        (DocumentImpl::anchors):
+        (DocumentImpl::all):
+        (DocumentImpl::nameableItems):
+        (DocumentImpl::getElementsByName):
+        * khtml/xml/dom_docimpl.h:
+        (DOM::DocumentImpl::realDocType):
+        (DOM::DocumentImpl::createAttribute):
+        * khtml/xml/dom_elementimpl.cpp:
+        (AttrImpl::nodeName):
+        (AttrImpl::nodeValue):
+        (AttrImpl::name):
+        (AttrImpl::value):
+        (ElementImpl::attributes):
+        (ElementImpl::isURLAttribute):
+        (ElementImpl::setAttributeNode):
+        (ElementImpl::removeAttributeNode):
+        (ElementImpl::setAttributeNS):
+        (ElementImpl::removeAttributeNS):
+        (ElementImpl::getAttributeNodeNS):
+        (ElementImpl::hasAttributeNS):
+        (ElementImpl::style):
+        (XMLElementImpl::cloneNode):
+        (NamedAttrMapImpl::setNamedItem):
+        (NamedAttrMapImpl::removeNamedItem):
+        * khtml/xml/dom_elementimpl.h:
+        (DOM::ElementImpl::hasAttribute):
+        (DOM::ElementImpl::getAttribute):
+        (DOM::ElementImpl::setAttribute):
+        (DOM::ElementImpl::removeAttribute):
+        (DOM::ElementImpl::getAttributeNode):
+        (DOM::ElementImpl::setAttributeNodeNS):
+        * khtml/xml/dom_nodeimpl.cpp:
+        (NodeImpl::handleLocalEvents):
+        (NodeImpl::isAncestor):
+        (NodeImpl::addEventListener):
+        (NodeImpl::removeEventListener):
+        (NodeImpl::getElementsByTagNameNS):
+        (NodeImpl::isSupported):
+        (NodeImpl::ownerDocument):
+        (NodeImpl::hasAttributes):
+        (NodeImpl::attributes):
+        (ContainerNodeImpl::removeChildren):
+        (NamedNodeMapImpl::~NamedNodeMapImpl):
+        (NamedNodeMapImpl::getNamedItemNS):
+        (NamedNodeMapImpl::removeNamedItemNS):
+        * khtml/xml/dom_nodeimpl.h:
+        (DOM::NodeImpl::getElementsByTagName):
+        (DOM::NamedNodeMapImpl::NamedNodeMapImpl):
+        (DOM::NamedNodeMapImpl::getNamedItem):
+        (DOM::NamedNodeMapImpl::removeNamedItem):
+        (DOM::NamedNodeMapImpl::setNamedItemNS):
+        (DOM::NamedNodeMapImpl::isReadOnly):
+        * khtml/xml/dom_textimpl.h:
+        * khtml/xml/dom_xmlimpl.h:
+        * kwq/DOM.mm:
+        (-[DOMNode isSupported::]):
+        (-[DOMNode namespaceURI]):
+        (-[DOMNode hasAttributes]):
+        (-[DOMNamedNodeMap getNamedItem:]):
+        (-[DOMNamedNodeMap setNamedItem:]):
+        (-[DOMNamedNodeMap removeNamedItem:]):
+        (-[DOMNamedNodeMap getNamedItemNS::]):
+        (-[DOMNamedNodeMap setNamedItemNS:]):
+        (-[DOMNamedNodeMap removeNamedItemNS::]):
+        (-[DOMImplementation createDocument:::]):
+        (-[DOMImplementation createCSSStyleSheet::]):
+        (-[DOMDocument createAttribute:]):
+        (-[DOMDocument getElementsByTagName:]):
+        (-[DOMDocument createAttributeNS::]):
+        (-[DOMDocument getElementsByTagNameNS::]):
+        (-[DOMElement setAttribute::]):
+        (-[DOMElement removeAttribute:]):
+        (-[DOMElement getAttributeNode:]):
+        (-[DOMElement setAttributeNode:]):
+        (-[DOMElement removeAttributeNode:]):
+        (-[DOMElement getElementsByTagName:]):
+        (-[DOMElement getAttributeNS::]):
+        (-[DOMElement setAttributeNS:::]):
+        (-[DOMElement removeAttributeNS::]):
+        (-[DOMElement getAttributeNodeNS::]):
+        (-[DOMElement setAttributeNodeNS:]):
+        (-[DOMElement getElementsByTagNameNS::]):
+        (-[DOMElement hasAttribute:]):
+        (-[DOMElement hasAttributeNS::]):
+        (-[DOMElement style]):
+        (-[DOMDocumentType _documentTypeImpl]):
+        (ObjCNodeFilterCondition::acceptNode):
+        * kwq/DOMEvents.mm:
+        (-[DOMMutationEvent relatedNode]):
+        * kwq/KWQClipboard.h:
+        * kwq/KWQClipboard.mm:
+        (KWQClipboard::KWQClipboard):
+        (KWQClipboard::setDragImage):
+        (KWQClipboard::dragImageElement):
+        (KWQClipboard::setDragImageElement):
+        (KWQClipboard::dragNSImage):
+        * kwq/KWQKHTMLPart.mm:
+        (KWQKHTMLPart::khtmlMouseMoveEvent):
+        (KWQKHTMLPart::passSubframeEventToSubframe):
+        (KWQKHTMLPart::sendContextMenuEvent):
+
 2005-05-10  Darin Adler  <darin@apple.com>
 
         Reviewed by David Harrison.
index 468cf5fa4c807fd5ee84511a2c5e8e68f68979bc..df8df2f582861476e044c15ed66c8c277425a4c5 100644 (file)
@@ -21,6 +21,8 @@
  *
  */
 
+#include "dom/dom2_events.h"
+
 #include "dom/dom2_views.h"
 #include "dom/dom_exception.h"
 #include "xml/dom2_eventsimpl.h"
@@ -378,7 +380,7 @@ void UIEvent::initUIEvent(const DOMString &typeArg,
        throw DOMException(DOMException::INVALID_STATE_ERR);
 
     static_cast<UIEventImpl*>(impl)->initUIEvent(typeArg,canBubbleArg,cancelableArg,
-                                                viewArg,detailArg);
+                                                viewArg.handle(),detailArg);
 }
 
 // -----------------------------------------------------------------------------
@@ -522,9 +524,9 @@ void MouseEvent::initMouseEvent(const DOMString &typeArg,
        throw DOMException(DOMException::INVALID_STATE_ERR);
 
     static_cast<MouseEventImpl*>(impl)->initMouseEvent(typeArg,canBubbleArg,
-       cancelableArg,viewArg,detailArg,screenXArg,screenYArg,clientXArg,
+       cancelableArg,viewArg.handle(),detailArg,screenXArg,screenYArg,clientXArg,
        clientYArg,ctrlKeyArg,altKeyArg,shiftKeyArg,metaKeyArg,buttonArg,
-       relatedTargetArg);
+       relatedTargetArg.handle());
 }
 
 
@@ -623,7 +625,7 @@ void MutationEvent::initMutationEvent(const DOMString &typeArg,
        throw DOMException(DOMException::INVALID_STATE_ERR);
 
     static_cast<MutationEventImpl*>(impl)->initMutationEvent(typeArg,
-       canBubbleArg,cancelableArg,relatedNodeArg,prevValueArg,
+       canBubbleArg,cancelableArg,relatedNodeArg.handle(),prevValueArg,
        newValueArg,attrNameArg,attrChangeArg);
 }
 
@@ -741,7 +743,7 @@ void KeyboardEvent::initKeyboardEvent(const DOMString &typeArg,
        throw DOMException(DOMException::INVALID_STATE_ERR);
 
     static_cast<KeyboardEventImpl*>(impl)->initKeyboardEvent(typeArg,canBubbleArg,
-       cancelableArg,viewArg,keyIdentifierArg,keyLocationArg,ctrlKeyArg,altKeyArg,
+       cancelableArg,viewArg.handle(),keyIdentifierArg,keyLocationArg,ctrlKeyArg,altKeyArg,
         shiftKeyArg,metaKeyArg,altGraphKeyArg);
 }
                                     
index d6cd49ed9378632c7d14e9d9aaf7b16e2c090690..ca7619027c0d7d1684e9681a075dff503f99ae2e 100644 (file)
@@ -99,7 +99,8 @@ Document DOMImplementation::createDocument ( const DOMString &namespaceURI,
        throw DOMException(DOMException::NOT_FOUND_ERR);
 
     int exceptioncode = 0;
-    DocumentImpl *r = impl->createDocument(namespaceURI, qualifiedName, doctype, exceptioncode );
+    DocumentImpl *r = impl->createDocument(namespaceURI, qualifiedName,
+        static_cast<DocumentTypeImpl *>(doctype.handle()), exceptioncode );
     if ( exceptioncode )
         throw DOMException( exceptioncode );
     return r;
@@ -338,15 +339,13 @@ Element Document::elementFromPoint( const int _x, const int _y ) const
 NodeList Document::getElementsByTagName( const DOMString &tagName )
 {
     if (!impl) return 0;
-    return static_cast<DocumentImpl*>(impl)->
-        getElementsByTagNameNS(0, tagName.implementation());
+    return static_cast<DocumentImpl*>(impl)->getElementsByTagName(tagName).get();
 }
 
 NodeList Document::getElementsByTagNameNS( const DOMString &namespaceURI, const DOMString &localName )
 {
     if (!impl) return 0;
-    return static_cast<DocumentImpl*>(impl)->
-        getElementsByTagNameNS(namespaceURI.implementation(), localName.implementation());
+    return static_cast<DocumentImpl*>(impl)->getElementsByTagNameNS(namespaceURI, localName).get();
 }
 
 Node Document::importNode( const Node & importedNode, bool deep )
index d2f76ade7e086f80f7efc03cbe34e79400e03bf5..8d1978a969d68ba57b3932627adf3ef85dad7961 100644 (file)
@@ -173,15 +173,10 @@ Attr Element::setAttributeNode( const Attr &newAttr )
 
 Attr Element::removeAttributeNode( const Attr &oldAttr )
 {
-    if (!impl || oldAttr.isNull() || oldAttr.ownerElement() != *this)
+    if (!impl)
         throw DOMException(DOMException::NOT_FOUND_ERR);
-    if (impl->getDocument() != oldAttr.handle()->getDocument())
-        throw DOMException(DOMException::WRONG_DOCUMENT_ERR);
-
-    NodeImpl::Id attrName = static_cast<AttrImpl*>(oldAttr.handle())->attrImpl()->id();
-
     int exceptioncode = 0;
-    Attr r = static_cast<ElementImpl*>(impl)->attributes(true)->removeNamedItem(attrName, exceptioncode);
+    Attr r = static_cast<ElementImpl*>(impl)->removeAttributeNode(static_cast<AttrImpl *>(oldAttr.handle()), exceptioncode).get();
     if ( exceptioncode )
         throw DOMException( exceptioncode );
     return r;
@@ -190,16 +185,14 @@ Attr Element::removeAttributeNode( const Attr &oldAttr )
 NodeList Element::getElementsByTagName( const DOMString &name )
 {
     if (!impl) return 0;
-    return static_cast<ElementImpl*>(impl)->
-        getElementsByTagNameNS(0, name.implementation());
+    return static_cast<ElementImpl*>(impl)->getElementsByTagName(name).get();
 }
 
 NodeList Element::getElementsByTagNameNS( const DOMString &namespaceURI,
                                           const DOMString &localName )
 {
     if (!impl) return 0;
-    return static_cast<ElementImpl*>(impl)->
-        getElementsByTagNameNS(namespaceURI.implementation(), localName.implementation());
+    return static_cast<ElementImpl*>(impl)->getElementsByTagNameNS(namespaceURI, localName).get();
 }
 
 DOMString Element::getAttributeNS( const DOMString &namespaceURI,
@@ -264,7 +257,7 @@ Attr Element::setAttributeNodeNS( const Attr &newAttr )
         throw DOMException(DOMException::NOT_FOUND_ERR);
 
     int exceptioncode = 0;
-    Attr r = static_cast<ElementImpl*>(impl)->attributes(false)->setNamedItem(newAttr.handle(), exceptioncode);
+    Attr r = static_cast<ElementImpl*>(impl)->setAttributeNodeNS(static_cast<AttrImpl *>(newAttr.handle()), exceptioncode).get();
     if ( exceptioncode )
         throw DOMException( exceptioncode );
     return r;
index 820593c6ce2493aaddec4d54d26984fd5b574256..9fb7139685d1ee725646a63ae5438b3351248370 100644 (file)
@@ -98,7 +98,7 @@ Node NamedNodeMap::setNamedItemNS( const Node &arg )
 {
     if (!impl) throw DOMException(DOMException::NOT_FOUND_ERR);
     int exceptioncode = 0;
-    Node r = impl->setNamedItem(arg.impl, exceptioncode);
+    Node r = impl->setNamedItem(arg.impl, exceptioncode).get();
     if (exceptioncode)
         throw DOMException(exceptioncode);
     return r;
@@ -108,7 +108,7 @@ Node NamedNodeMap::removeNamedItemNS( const DOMString &namespaceURI, const DOMSt
 {
     if (!impl) throw DOMException(DOMException::NOT_FOUND_ERR);
     int exceptioncode = 0;
-    Node r = impl->removeNamedItem(impl->mapId(namespaceURI, localName, true), exceptioncode);
+    Node r = impl->removeNamedItem(impl->mapId(namespaceURI, localName, true), exceptioncode).get();
     if (exceptioncode)
         throw DOMException(exceptioncode);
     return r;
index f5aca1ae6f9a4da51b52b9fb98ed471d066eb23c..bc8750c4b4009ed3611026ed4dd5af33e133b360 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "dom/dom_exception.h"
 #include "dom/dom2_range.h"
+#include "dom/dom2_events.h"
 #include "xml/dom2_eventsimpl.h"
 
 #include <kdebug.h>
index 7541339203f7df4edf9e609bfa414f8967e885d0..c0aab6e402825e4b8556a0424062644cf292c815 100644 (file)
@@ -1232,7 +1232,7 @@ Value ClipboardProtoFunc::tryCall(ExecState *exec, Object &thisObj, const List &
             DOM::Node node = toNode(args[0]);
             if (!node.isNull()) {
                 if (node.nodeType() == DOM::Node::ELEMENT_NODE) {
-                    cb->clipboard->setDragImageElement(node, QPoint(x,y));                    
+                    cb->clipboard->setDragImageElement(node.handle(), QPoint(x,y));                    
                     return Undefined();
                 } else {
                     Object err = Error::create(exec, SyntaxError,"setDragImageFromElement: Invalid first argument");
index c153c36f5a30fd572ec4fe9b42cc16997a25c96e..5431cb0f7921cf89528a5b7cdbdaceb91d9da537 100644 (file)
 
 #include "jsediting.h"
 
-#include "cssproperties.h"
+#include "css/css_valueimpl.h"
+#include "css/cssproperties.h"
+
 #include "htmlediting.h"
 #include "khtml_part.h"
-#include "qstring.h"
+#include <qstring.h>
 #include "selection.h"
 
 #if APPLE_CHANGES
index 3a5831cf73c1772d40cc628b36dc839cf0600f1b..e9dde535c7e88377e07b47487cf0439ea187f290 100644 (file)
@@ -5709,13 +5709,11 @@ void KHTMLPart::applyEditingStyleToBodyElement() const
     if (!d->m_doc)
         return;
         
-    static DOMString body = "body";
-    NodeListImpl *list = d->m_doc->getElementsByTagNameNS(0, body.implementation());
-    list->ref();
-    for (unsigned i = 0; i < list->length(); i++) {
+    SharedPtr<NodeListImpl> list = d->m_doc->getElementsByTagName("body");
+    unsigned len = list->length();
+    for (unsigned i = 0; i < len; i++) {
         applyEditingStyleToElement(static_cast<ElementImpl *>(list->item(i)));    
     }
-    list->deref();
 }
 
 void KHTMLPart::removeEditingStyleFromBodyElement() const
@@ -5723,13 +5721,11 @@ void KHTMLPart::removeEditingStyleFromBodyElement() const
     if (!d->m_doc)
         return;
         
-    static DOMString body = "body";
-    NodeListImpl *list = d->m_doc->getElementsByTagNameNS(0, body.implementation());
-    list->ref();
-    for (unsigned i = 0; i < list->length(); i++) {
+    SharedPtr<NodeListImpl> list = d->m_doc->getElementsByTagName("body");
+    unsigned len = list->length();
+    for (unsigned i = 0; i < len; i++) {
         removeEditingStyleFromElement(static_cast<ElementImpl *>(list->item(i)));    
     }
-    list->deref();
 }
 
 void KHTMLPart::applyEditingStyleToElement(ElementImpl *element) const
index 1c082c9a2b5da2f3a074b52f1b8bc0f9aa9b6533..d9f05d5a499062710024bc81cff464e3deae1a7f 100644 (file)
@@ -787,16 +787,16 @@ void KHTMLView::viewportMousePressEvent( QMouseEvent *_mouse )
     d->clickCount = _mouse->clickCount();
     if (d->clickNode)
         d->clickNode->deref();
-    d->clickNode = mev.innerNode.handle();
+    d->clickNode = mev.innerNode.get();
     if (d->clickNode)
         d->clickNode->ref();
 #endif    
 
-    bool swallowEvent = dispatchMouseEvent(EventImpl::MOUSEDOWN_EVENT,mev.innerNode.handle(),true,
+    bool swallowEvent = dispatchMouseEvent(EventImpl::MOUSEDOWN_EVENT,mev.innerNode.get(),true,
                                            d->clickCount,_mouse,true,DOM::NodeImpl::MousePress);
 
     if (!swallowEvent) {
-       khtml::MousePressEvent event( _mouse, xm, ym, mev.url, mev.target, mev.innerNode );
+       khtml::MousePressEvent event( _mouse, xm, ym, mev.url, mev.target, mev.innerNode.get() );
        QApplication::sendEvent( m_part, &event );
 #if APPLE_CHANGES
         // Many AK widgets run their own event loops and consume events while the mouse is down.
@@ -808,7 +808,7 @@ void KHTMLView::viewportMousePressEvent( QMouseEvent *_mouse )
             d->mousePressed = false;
         }
 #endif        
-       emit m_part->nodeActivated(mev.innerNode);
+       emit m_part->nodeActivated(mev.innerNode.get());
     }
 }
 
@@ -837,19 +837,19 @@ void KHTMLView::viewportMouseDoubleClickEvent( QMouseEvent *_mouse )
         return;
 
     d->clickCount = _mouse->clickCount();
-    bool swallowEvent = dispatchMouseEvent(EventImpl::MOUSEUP_EVENT,mev.innerNode.handle(),true,
+    bool swallowEvent = dispatchMouseEvent(EventImpl::MOUSEUP_EVENT,mev.innerNode.get(),true,
                                            d->clickCount,_mouse,false,DOM::NodeImpl::MouseRelease);
 
-    if (mev.innerNode.handle() == d->clickNode)
-        dispatchMouseEvent(EventImpl::CLICK_EVENT,mev.innerNode.handle(),true,
+    if (mev.innerNode == d->clickNode)
+        dispatchMouseEvent(EventImpl::CLICK_EVENT,mev.innerNode.get(),true,
                           d->clickCount,_mouse,true,DOM::NodeImpl::MouseRelease);
 
     // Qt delivers a release event AND a double click event.
     if (!swallowEvent) {
-       khtml::MouseReleaseEvent event1( _mouse, xm, ym, mev.url, mev.target, mev.innerNode );
+       khtml::MouseReleaseEvent event1( _mouse, xm, ym, mev.url, mev.target, mev.innerNode.get() );
        QApplication::sendEvent( m_part, &event1 );
 
-       khtml::MouseDoubleClickEvent event2( _mouse, xm, ym, mev.url, mev.target, mev.innerNode );
+       khtml::MouseDoubleClickEvent event2( _mouse, xm, ym, mev.url, mev.target, mev.innerNode.get() );
        QApplication::sendEvent( m_part, &event2 );
     }
 #else
@@ -903,7 +903,7 @@ void KHTMLView::viewportMouseMoveEvent( QMouseEvent * _mouse )
         return;
 #endif
 
-    bool swallowEvent = dispatchMouseEvent(EventImpl::MOUSEMOVE_EVENT,mev.innerNode.handle(),false,
+    bool swallowEvent = dispatchMouseEvent(EventImpl::MOUSEMOVE_EVENT,mev.innerNode.get(),false,
                                            0,_mouse,true,DOM::NodeImpl::MouseMove);
 
 #if !APPLE_CHANGES
@@ -916,7 +916,7 @@ void KHTMLView::viewportMouseMoveEvent( QMouseEvent * _mouse )
     // execute the scheduled script. This is to make sure the mouseover events come after the mouseout events
     m_part->executeScheduledScript();
 
-    NodeImpl *node = mev.innerNode.handle();
+    NodeImpl *node = mev.innerNode.get();
     RenderObject *renderer = node ? node->renderer() : 0;
     RenderStyle *style = renderer ? renderer->style() : 0;
 
@@ -1024,7 +1024,7 @@ void KHTMLView::viewportMouseMoveEvent( QMouseEvent * _mouse )
     d->prevMouseY = ym;
 
     if (!swallowEvent) {
-        khtml::MouseMoveEvent event( _mouse, xm, ym, mev.url, mev.target, mev.innerNode );
+        khtml::MouseMoveEvent event( _mouse, xm, ym, mev.url, mev.target, mev.innerNode.get() );
         QApplication::sendEvent( m_part, &event );
     }
 }
@@ -1064,19 +1064,19 @@ void KHTMLView::viewportMouseReleaseEvent( QMouseEvent * _mouse )
         return;
 #endif
 
-    bool swallowEvent = dispatchMouseEvent(EventImpl::MOUSEUP_EVENT,mev.innerNode.handle(),true,
+    bool swallowEvent = dispatchMouseEvent(EventImpl::MOUSEUP_EVENT,mev.innerNode.get(),true,
                                            d->clickCount,_mouse,false,DOM::NodeImpl::MouseRelease);
 
-    if (d->clickCount > 0 && mev.innerNode.handle() == d->clickNode
+    if (d->clickCount > 0 && mev.innerNode == d->clickNode
 #if !APPLE_CHANGES
             && QPoint(d->clickX-xm,d->clickY-ym).manhattanLength() <= QApplication::startDragDistance()
 #endif
         )
-       dispatchMouseEvent(EventImpl::CLICK_EVENT,mev.innerNode.handle(),true,
+       dispatchMouseEvent(EventImpl::CLICK_EVENT,mev.innerNode.get(),true,
                           d->clickCount,_mouse,true,DOM::NodeImpl::MouseRelease);
 
     if (!swallowEvent) {
-       khtml::MouseReleaseEvent event( _mouse, xm, ym, mev.url, mev.target, mev.innerNode );
+       khtml::MouseReleaseEvent event( _mouse, xm, ym, mev.url, mev.target, mev.innerNode.get() );
        QApplication::sendEvent( m_part, &event );
     }
 
@@ -1262,7 +1262,7 @@ bool KHTMLView::updateDragAndDrop(const QPoint &loc, DOM::ClipboardImpl *clipboa
     viewportToContents(loc.x(), loc.y(), xm, ym);
     DOM::NodeImpl::MouseEvent mev(0, DOM::NodeImpl::MouseMove);
     m_part->xmlDocImpl()->prepareMouseEvent(true, xm, ym, &mev);
-    DOM::Node newTarget = mev.innerNode;
+    DOM::Node newTarget = mev.innerNode.get();
 
     // Drag events should never go to text nodes (following IE, and proper mouseover/out dispatch)
     if (newTarget.nodeType() == Node::TEXT_NODE) {
@@ -1836,7 +1836,7 @@ bool KHTMLView::dispatchMouseEvent(int eventId, DOM::NodeImpl *targetNode, bool
        if (d->prevMouseX >= 0 && d->prevMouseY >= 0) {
            NodeImpl::MouseEvent mev( _mouse->stateAfter(), static_cast<NodeImpl::MouseEventType>(mouseEventType));
            m_part->xmlDocImpl()->prepareMouseEvent( true, d->prevMouseX, d->prevMouseY, &mev );
-           oldUnder = mev.innerNode.handle();
+           oldUnder = mev.innerNode.get();
        }
        if (oldUnder != targetNode) {
            // send mouseout event to the old node
index 6274827bc4944950cdd806a3969d7d6ad2a1188d..285a223e06f2e4a2410f06355e5bc070cf189a0d 100644 (file)
@@ -72,6 +72,7 @@ public:
     bool notNull() const { return m_ptr != 0; }
 
     void reset() { if (m_ptr) m_ptr->deref(); m_ptr = 0; }
+    void reset(T *o) { if (o) o->ref(); if (m_ptr) m_ptr->deref(); m_ptr = o; }
     
     T * get() const { return m_ptr; }
     T &operator*() const { return *m_ptr; }
@@ -91,13 +92,11 @@ private:
 
 template <class T> SharedPtr<T> &SharedPtr<T>::operator=(const SharedPtr<T> &o) 
 {
-    if (m_ptr != o.m_ptr) {
-        if (m_ptr)
-            m_ptr->deref();
-        m_ptr = o.m_ptr;
-        if (m_ptr) 
-            m_ptr->ref();
-    }
+    if (o.m_ptr) 
+        o.m_ptr->ref();
+    if (m_ptr)
+        m_ptr->deref();
+    m_ptr = o.m_ptr;
     return *this;
 }
 
@@ -105,6 +104,9 @@ template <class T> inline bool operator!=(const SharedPtr<T> &a, const SharedPtr
 template <class T> inline bool operator!=(const SharedPtr<T> &a, const T *b) { return !(a == b); }
 template <class T> inline bool operator!=(const T *a, const SharedPtr<T> &b) { return !(a == b); }
 
-};
+template <class T, class U> inline SharedPtr<T> static_pointer_cast(const SharedPtr<U> &p) { return SharedPtr<T>(static_cast<T *>(p.get())); }
+template <class T, class U> inline SharedPtr<T> const_pointer_cast(const SharedPtr<U> &p) { return SharedPtr<T>(const_cast<T *>(p.get())); }
+
+}
 
 #endif
index 7357cbd3b917bbb27d3800b9905d458408ea38da..fcda9deb7ffd0a1bd96b5e985183cd62938a5983 100644 (file)
  * Boston, MA 02111-1307, USA.
  */
 
-#include "dom/dom2_views.h"
-
 #include "xml/dom2_eventsimpl.h"
+
+#include "dom/dom2_events.h"
+#include "dom/dom2_views.h"
 #include "xml/dom_stringimpl.h"
 #include "xml/dom_nodeimpl.h"
 #include "xml/dom_docimpl.h"
+#include "xml/dom2_viewsimpl.h"
 #include "rendering/render_object.h"
 #include "rendering/render_layer.h"
 
@@ -322,7 +324,7 @@ UIEventImpl::~UIEventImpl()
 void UIEventImpl::initUIEvent(const DOMString &typeArg,
                              bool canBubbleArg,
                              bool cancelableArg,
-                             const AbstractView &viewArg,
+                             AbstractViewImpl *viewArg,
                              long detailArg)
 {
     EventImpl::initEvent(typeArg,canBubbleArg,cancelableArg);
@@ -330,7 +332,7 @@ void UIEventImpl::initUIEvent(const DOMString &typeArg,
     if (m_view)
        m_view->deref();
 
-    m_view = viewArg.handle();
+    m_view = viewArg;
     if (m_view)
        m_view->ref();
     m_detail = detailArg;
@@ -341,7 +343,40 @@ bool UIEventImpl::isUIEvent() const
     return true;
 }
 
-// -----------------------------------------------------------------------------
+int UIEventImpl::keyCode() const
+{
+    return 0;
+}
+
+int UIEventImpl::charCode() const
+{
+    return 0;
+}
+
+long UIEventImpl::layerX() const
+{
+    return 0;
+}
+
+long UIEventImpl::layerY() const
+{
+    return 0;
+}
+
+long UIEventImpl::pageX() const
+{
+    return 0;
+}
+
+long UIEventImpl::pageY() const
+{
+    return 0;
+}
+
+long UIEventImpl::which() const
+{
+    return 0;
+}
 
 // -----------------------------------------------------------------------------
 
@@ -404,6 +439,16 @@ void MouseRelatedEventImpl::computeLayerPos()
     }
 }
 
+long MouseRelatedEventImpl::pageX() const
+{
+    return m_clientX;
+}
+
+long MouseRelatedEventImpl::pageY() const
+{
+    return m_clientY;
+}
+
 // -----------------------------------------------------------------------------
 
 MouseEventImpl::MouseEventImpl()
@@ -453,7 +498,7 @@ MouseEventImpl::~MouseEventImpl()
 void MouseEventImpl::initMouseEvent(const DOMString &typeArg,
                                     bool canBubbleArg,
                                     bool cancelableArg,
-                                    const AbstractView &viewArg,
+                                    AbstractViewImpl *viewArg,
                                     long detailArg,
                                     long screenXArg,
                                     long screenYArg,
@@ -464,7 +509,7 @@ void MouseEventImpl::initMouseEvent(const DOMString &typeArg,
                                     bool shiftKeyArg,
                                     bool metaKeyArg,
                                     unsigned short buttonArg,
-                                    const Node &relatedTargetArg)
+                                    NodeImpl *relatedTargetArg)
 {
     UIEventImpl::initUIEvent(typeArg,canBubbleArg,cancelableArg,viewArg,detailArg);
 
@@ -480,7 +525,7 @@ void MouseEventImpl::initMouseEvent(const DOMString &typeArg,
     m_shiftKey = shiftKeyArg;
     m_metaKey = metaKeyArg;
     m_button = buttonArg;
-    m_relatedTarget = relatedTargetArg.handle();
+    m_relatedTarget = relatedTargetArg;
     if (m_relatedTarget)
        m_relatedTarget->ref();
     computeLayerPos();
@@ -499,6 +544,14 @@ bool MouseEventImpl::isDragEvent() const
             || m_id == EventImpl::DRAGEND_EVENT);
 }
 
+long MouseEventImpl::which() const
+{
+    // For KHTML, the return values for left, middle and right mouse buttons are 0, 1, 2, respectively.
+    // For the Netscape "which" property, the return values for left, middle and right mouse buttons are 1, 2, 3, respectively. 
+    // So we must add 1.
+    return m_button + 1;
+}
+
 //---------------------------------------------------------------------------------------------
 
 KeyboardEventImpl::KeyboardEventImpl()
@@ -571,7 +624,7 @@ KeyboardEventImpl::~KeyboardEventImpl()
 void KeyboardEventImpl::initKeyboardEvent(const DOMString &typeArg,
                         bool canBubbleArg,
                         bool cancelableArg,
-                        const AbstractView &viewArg, 
+                        AbstractViewImpl *viewArg, 
                         const DOMString &keyIdentifierArg, 
                         unsigned long keyLocationArg, 
                         bool ctrlKeyArg, 
@@ -630,6 +683,13 @@ bool KeyboardEventImpl::isKeyboardEvent() const
     return true;
 }
 
+long KeyboardEventImpl::which() const
+{
+    // Netscape's "which" returns a virtual key code for keydown and keyup, and a character code for keypress.
+    // That's exactly what IE's "keyCode" returns. So they are the same for keyboard events.
+    return keyCode();
+}
+
 // -----------------------------------------------------------------------------
 
 MutationEventImpl::MutationEventImpl()
@@ -644,14 +704,14 @@ MutationEventImpl::MutationEventImpl()
 MutationEventImpl::MutationEventImpl(EventId _id,
                                     bool canBubbleArg,
                                     bool cancelableArg,
-                                    const Node &relatedNodeArg,
+                                    NodeImpl *relatedNodeArg,
                                     const DOMString &prevValueArg,
                                     const DOMString &newValueArg,
                                     const DOMString &attrNameArg,
                                     unsigned short attrChangeArg)
                      : EventImpl(_id,canBubbleArg,cancelableArg)
 {
-    m_relatedNode = relatedNodeArg.handle();
+    m_relatedNode = relatedNodeArg;
     if (m_relatedNode)
        m_relatedNode->ref();
     m_prevValue = prevValueArg.implementation();
@@ -681,7 +741,7 @@ MutationEventImpl::~MutationEventImpl()
 void MutationEventImpl::initMutationEvent(const DOMString &typeArg,
                                          bool canBubbleArg,
                                          bool cancelableArg,
-                                         const Node &relatedNodeArg,
+                                         NodeImpl *relatedNodeArg,
                                          const DOMString &prevValueArg,
                                          const DOMString &newValueArg,
                                          const DOMString &attrNameArg,
@@ -698,7 +758,7 @@ void MutationEventImpl::initMutationEvent(const DOMString &typeArg,
     if (m_attrName)
        m_attrName->deref();
 
-    m_relatedNode = relatedNodeArg.handle();
+    m_relatedNode = relatedNodeArg;
     if (m_relatedNode)
        m_relatedNode->ref();
     m_prevValue = prevValueArg.implementation();
index d5f3f371629ac935a5eb7f22994c24b677a46457..1bb5cde5423c012839981cad45ea64da61fb5bb5 100644 (file)
 #ifndef _DOM_EventsImpl_h_
 #define _DOM_EventsImpl_h_
 
-#include "dom/dom2_events.h"
-#include "misc/shared.h"
-#include "xml/dom2_viewsimpl.h"
 #include <qdatetime.h>
-#include <qevent.h>
+#include "dom/dom_node.h"
+#include "dom/dom_string.h"
+#include "misc/shared.h"
 
 class KHTMLPart;
+class QKeyEvent;
+class QPixmap;
 class QPoint;
 class QStringList;
 
@@ -39,6 +40,7 @@ namespace DOM {
 
 class AbstractViewImpl;
 class DOMStringImpl;
+class EventListener;
 class NodeImpl;
 class ClipboardImpl;
 
@@ -201,10 +203,21 @@ public:
     void initUIEvent(const DOMString &typeArg,
                     bool canBubbleArg,
                     bool cancelableArg,
-                    const AbstractView &viewArg,
+                    AbstractViewImpl *viewArg,
                     long detailArg);
     virtual bool isUIEvent() const;
 
+    virtual int keyCode() const;
+    virtual int charCode() const;
+
+    virtual long layerX() const;
+    virtual long layerY() const;
+
+    virtual long pageX() const;
+    virtual long pageY() const;
+
+    virtual long which() const;
+
 protected:
     AbstractViewImpl *m_view;
     long m_detail;
@@ -254,6 +267,8 @@ public:
     long clientY() const { return m_clientY; }
     long layerX() const { return m_layerX; }
     long layerY() const { return m_layerY; }
+    virtual long pageX() const;
+    virtual long pageY() const;
 protected: // expose these so MouseEventImpl::initMouseEvent can set them
     long m_screenX;
     long m_screenY;
@@ -292,7 +307,7 @@ public:
     void initMouseEvent(const DOMString &typeArg,
                        bool canBubbleArg,
                        bool cancelableArg,
-                       const AbstractView &viewArg,
+                       AbstractViewImpl *viewArg,
                        long detailArg,
                        long screenXArg,
                        long screenYArg,
@@ -303,9 +318,10 @@ public:
                        bool shiftKeyArg,
                        bool metaKeyArg,
                        unsigned short buttonArg,
-                       const Node &relatedTargetArg);
+                       NodeImpl *relatedTargetArg);
     virtual bool isMouseEvent() const;
     virtual bool isDragEvent() const;
+    virtual long which() const;
 private:
     unsigned short m_button;
     NodeImpl *m_relatedTarget;
@@ -334,7 +350,7 @@ public:
     void initKeyboardEvent(const DOMString &typeArg,
                 bool canBubbleArg,
                 bool cancelableArg,
-                const AbstractView &viewArg,
+                AbstractViewImpl *viewArg,
                 const DOMString &keyIdentifierArg,
                 unsigned long keyLocationArg,
                 bool ctrlKeyArg,
@@ -354,6 +370,7 @@ public:
     int charCode() const;
     
     virtual bool isKeyboardEvent() const;
+    virtual long which() const;
 
 private:
     QKeyEvent *m_keyEvent;
@@ -369,14 +386,14 @@ public:
     MutationEventImpl(EventId _id,
                      bool canBubbleArg,
                      bool cancelableArg,
-                     const Node &relatedNodeArg,
+                     NodeImpl *relatedNodeArg,
                      const DOMString &prevValueArg,
                      const DOMString &newValueArg,
                      const DOMString &attrNameArg,
                      unsigned short attrChangeArg);
     ~MutationEventImpl();
 
-    Node relatedNode() const { return m_relatedNode; }
+    NodeImpl *relatedNode() const { return m_relatedNode; }
     DOMString prevValue() const { return m_prevValue; }
     DOMString newValue() const { return m_newValue; }
     DOMString attrName() const { return m_attrName; }
@@ -384,7 +401,7 @@ public:
     void initMutationEvent(const DOMString &typeArg,
                           bool canBubbleArg,
                           bool cancelableArg,
-                          const Node &relatedNodeArg,
+                          NodeImpl *relatedNodeArg,
                           const DOMString &prevValueArg,
                           const DOMString &newValueArg,
                           const DOMString &attrNameArg,
@@ -473,8 +490,8 @@ public:
     virtual QPoint dragLocation() const = 0;
     virtual QPixmap dragImage() const = 0;
     virtual void setDragImage(const QPixmap &, const QPoint &) = 0;
-    virtual const Node dragImageElement() = 0;
-    virtual void setDragImageElement(const Node &, const QPoint &) = 0;
+    virtual NodeImpl *dragImageElement() = 0;
+    virtual void setDragImageElement(NodeImpl *, const QPoint &) = 0;
 };
 
 } // namespace
index 4aae151e8695a233e31a77dbaaf8b626c855617f..b046d69b4a1e28c24d23ea7a322524b0b12ab1ce 100644 (file)
 #ifndef _DOM2_RangeImpl_h_
 #define _DOM2_RangeImpl_h_
 
-#include <qptrlist.h>
 #include "dom/dom2_range.h"
 #include "misc/shared.h"
 #include "misc/main_thread_malloc.h"
+
 namespace DOM {
 
+class DocumentFragmentImpl;
 class DocumentPtr;
 class NodeImpl;
 class Position;
@@ -50,7 +51,6 @@ public:
 
     MAIN_THREAD_ALLOCATED;
     
-    // ### remove the get from these methods (i.e. getStartContainer() -> startContainer())
     NodeImpl *startContainer(int &exceptioncode) const;
     long startOffset(int &exceptioncode) const;
     NodeImpl *endContainer(int &exceptioncode) const;
@@ -103,10 +103,6 @@ public:
 
     Position editingStartPosition() const;
 
-#if APPLE_CHANGES
-    static Range createInstance (RangeImpl *impl);
-#endif
-
 #ifndef NDEBUG
     void formatForDebugger(char *buffer, unsigned length) const;
 #endif
index 8ccf9d68557bc0d66c0b967c4ba2b971e8ae638b..9e114a8865cd1c7cf6c470ed4f5f2f3f446d0556 100644 (file)
@@ -43,7 +43,7 @@ NodeFilterImpl::~NodeFilterImpl()
         m_condition->deref();
 }
 
-short NodeFilterImpl::acceptNode(const Node &node) const
+short NodeFilterImpl::acceptNode(NodeImpl *node) const
 {
     // cast to short silences "enumeral and non-enumeral types in return" warning
     return m_condition ? m_condition->acceptNode(node) : static_cast<short>(NodeFilter::FILTER_ACCEPT);
index 4d4610a89e26fe8b97024414e2253c55d6c643d6..1138153fc55e55f00acb088813bcffe21bb10aaf 100644 (file)
@@ -27,8 +27,6 @@
 #define _dom2_traversal_h
 
 #include "dom/dom2_traversal.h"
-#include "dom/dom_node.h"
-#include "dom/dom_misc.h"
 #include "misc/shared.h"
 #include "misc/main_thread_malloc.h"
 
@@ -45,7 +43,7 @@ public:
     
     MAIN_THREAD_ALLOCATED;
     
-    short acceptNode(const Node &) const;
+    short acceptNode(NodeImpl *) const;
     
 private:
     NodeFilterImpl(const NodeFilterImpl &);
index 26a8f9f685688d8d844fed68b0977f3663fa9145..8c52ec2786983bbc6a05de2dbdf1bd1df96b2be6 100644 (file)
  * Boston, MA 02111-1307, USA.
  */
 
+#include "dom_docimpl.h"
+
 #include "dom/dom_exception.h"
+#include "dom/dom2_events.h"
 
 #include "xml/dom_textimpl.h"
 #include "xml/dom_xmlimpl.h"
 #include "xml/dom2_rangeimpl.h"
 #include "xml/dom2_eventsimpl.h"
+#include "xml/dom2_viewsimpl.h"
 #include "xml/xml_tokenizer.h"
 
 #include "xml_namespace_table.h"
@@ -167,7 +171,7 @@ DOMImplementationImpl* DOMImplementationImpl::getInterface(const DOMString& /*fe
 }
 
 DocumentImpl *DOMImplementationImpl::createDocument( const DOMString &namespaceURI, const DOMString &qualifiedName,
-                                                     const DocumentType &doctype, int &exceptioncode )
+                                                     DocumentTypeImpl *doctype, int &exceptioncode )
 {
     exceptioncode = 0;
 
@@ -205,10 +209,9 @@ DocumentImpl *DOMImplementationImpl::createDocument( const DOMString &namespaceU
         return 0;
     }
 
-    DocumentTypeImpl *dtype = static_cast<DocumentTypeImpl*>(doctype.handle());
     // WRONG_DOCUMENT_ERR: Raised if doctype has already been used with a different document or was
     // created from a different implementation.
-    if (dtype && (dtype->getDocument() || dtype->implementation() != this)) {
+    if (doctype && (doctype->getDocument() || doctype->implementation() != this)) {
         exceptioncode = DOMException::WRONG_DOCUMENT_ERR;
         return 0;
     }
@@ -217,22 +220,19 @@ DocumentImpl *DOMImplementationImpl::createDocument( const DOMString &namespaceU
     DocumentImpl *doc = new DocumentImpl(this, 0);
 
     // now get the interesting parts of the doctype
-    // ### create new one if not there (currently always there)
-    if (doc->doctype() && dtype)
-        doc->doctype()->copyFrom(*dtype);
+    if (doctype)
+        doc->realDocType()->copyFrom(*doctype);
 
     return doc;
 }
 
-CSSStyleSheetImpl *DOMImplementationImpl::createCSSStyleSheet(DOMStringImpl */*title*/, DOMStringImpl *media,
-                                                              int &/*exceptioncode*/)
+CSSStyleSheetImpl *DOMImplementationImpl::createCSSStyleSheet(const DOMString &/*title*/, const DOMString &media, int &/*exception*/)
 {
-    // ### TODO : title should be set, and media could have wrong syntax, in which case we should
-       // generate an exception.
-       CSSStyleSheetImpl *parent = 0L;
-       CSSStyleSheetImpl *sheet = new CSSStyleSheetImpl(parent, DOMString());
-       sheet->setMedia(new MediaListImpl(sheet, media));
-       return sheet;
+    // ### TODO : title should be set, and media could have wrong syntax, in which case we should generate an exception.
+    CSSStyleSheetImpl * const nullSheet = 0;
+    CSSStyleSheetImpl *sheet = new CSSStyleSheetImpl(nullSheet);
+    sheet->setMedia(new MediaListImpl(sheet, media));
+    return sheet;
 }
 
 DocumentImpl *DOMImplementationImpl::createDocument( KHTMLView *v )
@@ -255,6 +255,15 @@ DOMImplementationImpl *DOMImplementationImpl::instance()
     return m_instance;
 }
 
+HTMLDocumentImpl *DOMImplementationImpl::createHTMLDocument(const DOMString &title)
+{
+    HTMLDocumentImpl *d = createHTMLDocument( 0 /* ### create a view otherwise it doesn't work */);
+    d->open();
+    // FIXME: Need to escape special characters in the title?
+    d->write("<html><head><title>" + title.string() + "</title></head>");
+    return d;
+}
+
 // ------------------------------------------------------------------------
 
 KStaticDeleter< QPtrList<DocumentImpl> > s_changedDocumentsDeleter;
@@ -508,7 +517,7 @@ ProcessingInstructionImpl *DocumentImpl::createProcessingInstruction ( const DOM
     return new ProcessingInstructionImpl( docPtr(),target,data);
 }
 
-Attr DocumentImpl::createAttribute( NodeImpl::Id id )
+AttrImpl *DocumentImpl::createAttribute( NodeImpl::Id id )
 {
     // Assume this is an HTML attribute, since createAttribute isn't namespace-aware.  There's no harm to XML
     // documents if we're wrong.
@@ -859,7 +868,7 @@ ElementImpl *DocumentImpl::createHTMLElement(unsigned short tagID)
 // ins/del
     case ID_DEL:
     case ID_INS:
-        return new HTMLGenericElementImpl(docPtr(), tagID);
+        return new HTMLModElementImpl(docPtr(), tagID);
 
 // anchor
     case ID_A:
@@ -909,7 +918,7 @@ ElementImpl *DocumentImpl::createHTMLElement(unsigned short tagID)
     case ID_BR:
         return new HTMLBRElementImpl(docPtr());
     case ID_Q:
-        return new HTMLGenericElementImpl(docPtr(), tagID);
+        return new HTMLQuoteElementImpl(docPtr());
 
 // elements with no special representation in the DOM
 
@@ -1998,7 +2007,7 @@ bool DocumentImpl::prepareMouseEvent( bool readonly, int _x, int _y, MouseEvent
         assert(m_render->isCanvas());
         RenderObject::NodeInfo renderInfo(readonly, ev->type == MousePress);
         bool isInside = m_render->layer()->hitTest(renderInfo, _x, _y);
-        ev->innerNode = renderInfo.innerNode();
+        ev->innerNode.reset(renderInfo.innerNode());
 
         if (renderInfo.URLElement()) {
             assert(renderInfo.URLElement()->isElementNode());
@@ -2661,7 +2670,7 @@ EventImpl *DocumentImpl::createEvent(const DOMString &eventType, int &exceptionc
     }
 }
 
-CSSStyleDeclarationImpl *DocumentImpl::getOverrideStyle(ElementImpl */*elt*/, DOMStringImpl */*pseudoElt*/)
+CSSStyleDeclarationImpl *DocumentImpl::getOverrideStyle(ElementImpl */*elt*/, const DOMString &/*pseudoElt*/)
 {
     return 0; // ###
 }
@@ -2958,6 +2967,8 @@ QString DocumentImpl::completeURL(const QString &URL)
 
 DOMString DocumentImpl::completeURL(const DOMString &URL)
 {
+    if (URL.isNull())
+        return URL;
     return completeURL(URL.string());
 }
 
@@ -3331,6 +3342,85 @@ DocumentImpl *DocumentImpl::topDocument() const
     return doc;
 }
 
+AttrImpl *DocumentImpl::createAttributeNS(const DOMString &namespaceURI, const DOMString &qualifiedName, int &exception)
+{
+    if (qualifiedName.isNull()) {
+        exception = DOMException::NAMESPACE_ERR;
+        return 0;
+    }
+
+    DOMString localName(qualifiedName.copy());
+    DOMString prefix;
+    int colonpos;
+    if ((colonpos = qualifiedName.find(':')) >= 0) {
+        prefix = qualifiedName.copy();
+        prefix.truncate(colonpos);
+        localName.remove(0, colonpos+1);
+    }
+
+    if (!isValidName(localName)) {
+        exception = DOMException::INVALID_CHARACTER_ERR;
+        return 0;
+    }
+    // ### check correctness of namespace, prefix?
+
+    Id id = attrId(namespaceURI.implementation(), localName.implementation(), false /* allocate */);
+    AttrImpl *attr = createAttribute(id);
+    if (!prefix.isNull())
+        attr->setPrefix(prefix.implementation(), exception);
+    return attr;
+}
+
+SharedPtr<HTMLCollectionImpl> DocumentImpl::images()
+{
+    return SharedPtr<HTMLCollectionImpl>(new HTMLCollectionImpl(this, HTMLCollectionImpl::DOC_IMAGES));
+}
+
+SharedPtr<HTMLCollectionImpl> DocumentImpl::applets()
+{
+    return SharedPtr<HTMLCollectionImpl>(new HTMLCollectionImpl(this, HTMLCollectionImpl::DOC_APPLETS));
+}
+
+SharedPtr<HTMLCollectionImpl> DocumentImpl::embeds()
+{
+    return SharedPtr<HTMLCollectionImpl>(new HTMLCollectionImpl(this, HTMLCollectionImpl::DOC_EMBEDS));
+}
+
+SharedPtr<HTMLCollectionImpl> DocumentImpl::objects()
+{
+    return SharedPtr<HTMLCollectionImpl>(new HTMLCollectionImpl(this, HTMLCollectionImpl::DOC_OBJECTS));
+}
+
+SharedPtr<HTMLCollectionImpl> DocumentImpl::links()
+{
+    return SharedPtr<HTMLCollectionImpl>(new HTMLCollectionImpl(this, HTMLCollectionImpl::DOC_LINKS));
+}
+
+SharedPtr<HTMLCollectionImpl> DocumentImpl::forms()
+{
+    return SharedPtr<HTMLCollectionImpl>(new HTMLCollectionImpl(this, HTMLCollectionImpl::DOC_FORMS));
+}
+
+SharedPtr<HTMLCollectionImpl> DocumentImpl::anchors()
+{
+    return SharedPtr<HTMLCollectionImpl>(new HTMLCollectionImpl(this, HTMLCollectionImpl::DOC_ANCHORS));
+}
+
+SharedPtr<HTMLCollectionImpl> DocumentImpl::all()
+{
+    return SharedPtr<HTMLCollectionImpl>(new HTMLCollectionImpl(this, HTMLCollectionImpl::DOC_ALL));
+}
+
+SharedPtr<HTMLCollectionImpl> DocumentImpl::nameableItems()
+{
+    return SharedPtr<HTMLCollectionImpl>(new HTMLCollectionImpl(this, HTMLCollectionImpl::DOC_NAMEABLE_ITEMS));
+}
+
+SharedPtr<NameNodeListImpl> DocumentImpl::getElementsByName(const DOMString &elementName)
+{
+    return SharedPtr<NameNodeListImpl>(new NameNodeListImpl(this, elementName));
+}
+
 // ----------------------------------------------------------------------------
 
 DocumentFragmentImpl::DocumentFragmentImpl(DocumentPtr *doc) : ContainerNodeImpl(doc)
index 3f7019b0b7c43687c64c7572c075145f14a9eee1..c577eb57a0babc1acf7b386820ef8c65a8480199 100644 (file)
@@ -56,13 +56,11 @@ class KWQAccObjectCache;
 
 namespace khtml {
     class CSSStyleSelector;
+    struct DashboardRegionValue;
     class DocLoader;
     class RenderImage;
     class Tokenizer;
     class XMLHandler;
-#if APPLE_CHANGES    
-    struct DashboardRegionValue;
-#endif
 }
 
 #ifndef KHTML_NO_XBL
@@ -82,15 +80,13 @@ namespace DOM {
     class DocumentImpl;
     class DocumentType;
     class DocumentTypeImpl;
-#if APPLE_CHANGES
-    class DOMImplementation;
-#endif
     class EditingTextImpl;
     class ElementImpl;
     class EntityReferenceImpl;
     class EventImpl;
     class EventListener;
     class GenericRONamedNodeMapImpl;
+    class HTMLCollectionImpl;
     class HTMLDocumentImpl;
     class HTMLElementImpl;
     class HTMLImageLoader;
@@ -108,9 +104,6 @@ namespace DOM {
     class StyleSheetListImpl;
     class TextImpl;
     class TreeWalkerImpl;
-#ifdef KHTML_XSLT
-    class XSLStyleSheetImpl;
-#endif
 
     // A range of a node within a document that is "marked", such as being misspelled
     struct DocumentMarker
@@ -145,12 +138,12 @@ public:
     DocumentTypeImpl *createDocumentType( const DOMString &qualifiedName, const DOMString &publicId,
                                           const DOMString &systemId, int &exceptioncode );
     DocumentImpl *createDocument( const DOMString &namespaceURI, const DOMString &qualifiedName,
-                                  const DocumentType &doctype, int &exceptioncode );
+                                  DocumentTypeImpl *doctype, int &exceptioncode );
 
     DOMImplementationImpl* getInterface(const DOMString& feature) const;
 
     // From the DOMImplementationCSS interface
-    CSSStyleSheetImpl *createCSSStyleSheet(DOMStringImpl *title, DOMStringImpl *media, int &exceptioncode);
+    CSSStyleSheetImpl *createCSSStyleSheet(const DOMString &title, const DOMString &media, int &exceptioncode);
 
     // From the HTMLDOMImplementation interface
     HTMLDocumentImpl* createHTMLDocument( const DOMString& title);
@@ -163,10 +156,6 @@ public:
     // ever be present, and is used as a factory method for creating DocumentImpl objects
     static DOMImplementationImpl *instance();
 
-#if APPLE_CHANGES
-    static DOMImplementation createInstance (DOMImplementationImpl *impl);
-#endif
-
 protected:
     static DOMImplementationImpl *m_instance;
 };
@@ -184,7 +173,8 @@ public:
 
     // DOM methods & attributes for Document
 
-    DocumentTypeImpl *doctype() const;
+    virtual DocumentTypeImpl *doctype() const; // returns 0 for HTML documents
+    DocumentTypeImpl *realDocType() const { return m_doctype; }
 
     DOMImplementationImpl *implementation() const;
     virtual ElementImpl *documentElement() const;
@@ -194,17 +184,31 @@ public:
     CommentImpl *createComment ( const DOMString &data );
     CDATASectionImpl *createCDATASection ( const DOMString &data );
     ProcessingInstructionImpl *createProcessingInstruction ( const DOMString &target, const DOMString &data );
-    Attr createAttribute(NodeImpl::Id id);
+    AttrImpl *createAttribute(Id id);
+    AttrImpl *createAttribute(const DOMString &name, int &exception) { return createAttributeNS(DOMString(), name, exception); }
+    AttrImpl *createAttributeNS(const DOMString &namespaceURI, const DOMString &qualifiedName, int &exception);
     EntityReferenceImpl *createEntityReference ( const DOMString &name );
     NodeImpl *importNode( NodeImpl *importedNode, bool deep, int &exceptioncode );
     virtual ElementImpl *createElementNS ( const DOMString &_namespaceURI, const DOMString &_qualifiedName, int &exceptioncode );
     ElementImpl *getElementById ( const DOMString &elementId ) const;
     ElementImpl *elementFromPoint ( const int _x, const int _y ) const;
 
+    SharedPtr<NameNodeListImpl> getElementsByName(const DOMString &elementName);
+
     // Actually part of HTMLDocument, but used for giving XML documents a window title as well
     DOMString title() const { return m_title; }
     void setTitle(DOMString _title);
 
+    SharedPtr<HTMLCollectionImpl> images();
+    SharedPtr<HTMLCollectionImpl> embeds();
+    SharedPtr<HTMLCollectionImpl> applets();
+    SharedPtr<HTMLCollectionImpl> links();
+    SharedPtr<HTMLCollectionImpl> forms();
+    SharedPtr<HTMLCollectionImpl> anchors();
+    SharedPtr<HTMLCollectionImpl> all();
+    SharedPtr<HTMLCollectionImpl> objects();
+    SharedPtr<HTMLCollectionImpl> nameableItems();
+
     // DOM methods overridden from  parent classes
 
     virtual DOMString nodeName() const;
@@ -323,13 +327,8 @@ public:
     QString baseTarget() const { return m_baseTarget; }
     void setBaseTarget(const QString& baseTarget) { m_baseTarget = baseTarget; }
 
-#if APPLE_CHANGES
     QString completeURL(const QString &);
-#else
-    QString completeURL(const QString& url) { return KURL(baseURL(),url).url(); };
-#endif
-
-    DOM::DOMString completeURL(const DOM::DOMString &);
+    DOMString completeURL(const DOMString &);
 
     // from cachedObjectClient
     virtual void setStyleSheet(const DOMString &url, const DOMString &sheetStr);
@@ -455,7 +454,7 @@ public:
     bool hasListenerType(ListenerType listenerType) const { return (m_listenerTypes & listenerType); }
     void addListenerType(ListenerType listenerType) { m_listenerTypes = m_listenerTypes | listenerType; }
 
-    CSSStyleDeclarationImpl *getOverrideStyle(ElementImpl *elt, DOMStringImpl *pseudoElt);
+    CSSStyleDeclarationImpl *getOverrideStyle(ElementImpl *elt, const DOMString &pseudoElt);
 
     typedef QMap<QString, ProcessingInstructionImpl*> LocalStyleRefs;
     LocalStyleRefs* localStyleRefs() { return &m_localStyleRefs; }
@@ -719,8 +718,6 @@ protected:
 public:
     KWQSignal m_finishedParsing;
 
-    static Document createInstance (DocumentImpl *impl);
-
     bool inPageCache();
     void setInPageCache(bool flag);
     void restoreRenderer(khtml::RenderObject* render);
@@ -832,10 +829,6 @@ public:
 
     virtual DOMString toString() const;
 
-#if APPLE_CHANGES
-    static DocumentType createInstance (DocumentTypeImpl *impl);
-#endif
-
 protected:
     DOMImplementationImpl *m_implementation;
     NamedNodeMapImpl* m_entities;
@@ -848,5 +841,6 @@ protected:
 };
 
 
-}; //namespace
+} //namespace
+
 #endif
index 5acdebc4016ae4ce6f197edb0a7c1b6e7ff596f1..15001495433b5609202c9625b1100a6ab9cafae5 100644 (file)
@@ -80,7 +80,7 @@ AttrImpl::~AttrImpl()
 
 DOMString AttrImpl::nodeName() const
 {
-    return getDocument()->attrName(m_attribute->id());
+    return name();
 }
 
 unsigned short AttrImpl::nodeType() const
@@ -102,8 +102,9 @@ void AttrImpl::setPrefix(const DOMString &_prefix, int &exceptioncode )
     m_attribute->setPrefix(_prefix.implementation());
 }
 
-DOMString AttrImpl::nodeValue() const {
-    return m_attribute->value();
+DOMString AttrImpl::nodeValue() const
+{
+    return value();
 }
 
 void AttrImpl::setValue( const DOMString &v, int &exceptioncode )
@@ -187,6 +188,16 @@ DOMString AttrImpl::toString() const
     return result;
 }
 
+DOMString AttrImpl::name() const
+{
+    return getDocument()->attrName(m_attribute->id());
+}
+
+DOMString AttrImpl::value() const
+{
+    return m_attribute->value();
+}
+
 // -------------------------------------------------------------------------
 
 ElementImpl::ElementImpl(DocumentPtr *doc)
@@ -223,11 +234,17 @@ void ElementImpl::setAttribute(NodeImpl::Id id, const DOMString &value)
     setAttribute(id,value.implementation(),exceptioncode);
 }
 
+// Virtual function, defined in base class.
+NamedAttrMapImpl *ElementImpl::attributes() const
+{
+    return attributes(false);
+}
+
 NamedAttrMapImpl* ElementImpl::attributes(bool readonly) const
 {
     updateStyleAttributeIfNeeded();
-
-    if (!readonly && !namedAttrMap) createAttributeMap();
+    if (!readonly && !namedAttrMap)
+        createAttributeMap();
     return namedAttrMap;
 }
 
@@ -373,7 +390,6 @@ void ElementImpl::createAttributeMap() const
 bool ElementImpl::isURLAttribute(AttributeImpl *attr) const
 {
     return false;
-    
 }
 
 RenderStyle *ElementImpl::styleForRenderer(RenderObject *parentRenderer)
@@ -663,6 +679,82 @@ void ElementImpl::formatForDebugger(char *buffer, unsigned length) const
 }
 #endif
 
+SharedPtr<AttrImpl> ElementImpl::setAttributeNode(AttrImpl *attr, int &exception)
+{
+    return static_pointer_cast<AttrImpl>(attributes(false)->setNamedItem(attr, exception));
+}
+
+SharedPtr<AttrImpl> ElementImpl::removeAttributeNode(AttrImpl *attr, int &exception)
+{
+    if (!attr || attr->ownerElement() != this) {
+        exception = DOMException::NOT_FOUND_ERR;
+        return SharedPtr<AttrImpl>();
+    }
+    if (getDocument() != attr->getDocument()) {
+        exception = DOMException::WRONG_DOCUMENT_ERR;
+        return SharedPtr<AttrImpl>();
+    }
+
+    NamedAttrMapImpl *attrs = attributes(true);
+    if (!attrs)
+        return SharedPtr<AttrImpl>();
+
+    return static_pointer_cast<AttrImpl>(attrs->removeNamedItem(attr->m_attribute->id(), exception));
+}
+
+void ElementImpl::setAttributeNS(const DOMString &namespaceURI, const DOMString &qualifiedName, const DOMString &value, int &exception)
+{
+    int colonpos = qualifiedName.find(':');
+    DOMString localName = qualifiedName;
+    if (colonpos >= 0) {
+        localName.remove(0, colonpos+1);
+        // ### extract and set new prefix
+    }
+
+    if (!DocumentImpl::isValidName(localName)) {
+        exception = DOMException::INVALID_CHARACTER_ERR;
+        return;
+    }
+
+    Id id = getDocument()->attrId(namespaceURI.implementation(), localName.implementation(), false /* allocate */);
+    setAttribute(id, value.implementation(), exception);
+}
+
+void ElementImpl::removeAttributeNS(const DOMString &namespaceURI, const DOMString &localName, int &exception)
+{
+    Id id = getDocument()->attrId(namespaceURI.implementation(), localName.implementation(), true);
+    if (!id)
+        return;
+    removeAttribute(id, exception);
+}
+
+AttrImpl *ElementImpl::getAttributeNodeNS(const DOMString &namespaceURI, const DOMString &localName)
+{
+    Id id = getDocument()->attrId(namespaceURI.implementation(), localName.implementation(), true);
+    if (!id)
+        return 0;
+    NamedAttrMapImpl *attrs = attributes(true);
+    if (!attrs)
+        return 0;
+    return attrs->getNamedItem(id);
+}
+
+bool ElementImpl::hasAttributeNS(const DOMString &namespaceURI, const DOMString &localName) const
+{
+    Id id = getDocument()->attrId(namespaceURI.implementation(), localName.implementation(), true);
+    if (!id)
+        return false;
+    NamedAttrMapImpl *attrs = attributes(true);
+    if (!attrs)
+        return false;
+    return attrs->getAttributeItem(id);
+}
+
+CSSStyleDeclarationImpl *ElementImpl::style()
+{
+    return 0;
+}
+
 // -------------------------------------------------------------------------
 
 XMLElementImpl::XMLElementImpl(DocumentPtr *doc, DOMStringImpl *_tagName)
@@ -722,7 +814,7 @@ NodeImpl *XMLElementImpl::cloneNode ( bool deep )
 
     // clone attributes
     if (namedAttrMap)
-        *clone->attributes() = *namedAttrMap;
+        *clone->attributes(false) = *namedAttrMap;
 
     if (deep)
         cloneChildNodes(clone);
@@ -760,41 +852,42 @@ AttrImpl *NamedAttrMapImpl::getNamedItem ( NodeImpl::Id id ) const
     return a->attrImpl();
 }
 
-Node NamedAttrMapImpl::setNamedItem ( NodeImpl* arg, int &exceptioncode )
+SharedPtr<NodeImpl> NamedAttrMapImpl::setNamedItem ( NodeImpl* arg, int &exceptioncode )
 {
     if (!element) {
         exceptioncode = DOMException::NOT_FOUND_ERR;
-        return 0;
+        return SharedPtr<NodeImpl>();
     }
 
     // NO_MODIFICATION_ALLOWED_ERR: Raised if this map is readonly.
     if (isReadOnly()) {
         exceptioncode = DOMException::NO_MODIFICATION_ALLOWED_ERR;
-        return 0;
+        return SharedPtr<NodeImpl>();
     }
 
     // WRONG_DOCUMENT_ERR: Raised if arg was created from a different document than the one that created this map.
     if (arg->getDocument() != element->getDocument()) {
         exceptioncode = DOMException::WRONG_DOCUMENT_ERR;
-        return 0;
+        return SharedPtr<NodeImpl>();
     }
 
     // Not mentioned in spec: throw a HIERARCHY_REQUEST_ERROR if the user passes in a non-attribute node
     if (!arg->isAttributeNode()) {
         exceptioncode = DOMException::HIERARCHY_REQUEST_ERR;
-        return 0;
+        return SharedPtr<NodeImpl>();
     }
     AttrImpl *attr = static_cast<AttrImpl*>(arg);
 
     AttributeImpl* a = attr->attrImpl();
     AttributeImpl* old = getAttributeItem(a->id());
-    if (old == a) return arg; // we know about it already
+    if (old == a)
+        return SharedPtr<NodeImpl>(arg); // we know about it already
 
     // INUSE_ATTRIBUTE_ERR: Raised if arg is an Attr that is already an attribute of another Element object.
     // The DOM user must explicitly clone Attr nodes to re-use them in other elements.
     if (attr->ownerElement()) {
         exceptioncode = DOMException::INUSE_ATTRIBUTE_ERR;
-        return 0;
+        return SharedPtr<NodeImpl>();
     }
 
     if (a->id() == ATTR_ID) {
@@ -802,11 +895,11 @@ Node NamedAttrMapImpl::setNamedItem ( NodeImpl* arg, int &exceptioncode )
     }
 
     // ### slightly inefficient - resizes attribute array twice.
-    Node r;
+    SharedPtr<NodeImpl> r;
     if (old) {
         if (!old->attrImpl())
             old->allocateImpl(element);
-        r = old->_impl;
+        r.reset(old->_impl);
         removeAttribute(a->id());
     }
 
@@ -817,23 +910,23 @@ Node NamedAttrMapImpl::setNamedItem ( NodeImpl* arg, int &exceptioncode )
 // The DOM2 spec doesn't say that removeAttribute[NS] throws NOT_FOUND_ERR
 // if the attribute is not found, but at this level we have to throw NOT_FOUND_ERR
 // because of removeNamedItem, removeNamedItemNS, and removeAttributeNode.
-Node NamedAttrMapImpl::removeNamedItem ( NodeImpl::Id id, int &exceptioncode )
+SharedPtr<NodeImpl> NamedAttrMapImpl::removeNamedItem ( NodeImpl::Id id, int &exceptioncode )
 {
     // ### should this really be raised when the attribute to remove isn't there at all?
     // NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly
     if (isReadOnly()) {
         exceptioncode = DOMException::NO_MODIFICATION_ALLOWED_ERR;
-        return Node();
+        return SharedPtr<NodeImpl>();
     }
 
     AttributeImpl* a = getAttributeItem(id);
     if (!a) {
         exceptioncode = DOMException::NOT_FOUND_ERR;
-        return Node();
+        return SharedPtr<NodeImpl>();
     }
 
     if (!a->attrImpl())  a->allocateImpl(element);
-    Node r(a->attrImpl());
+    SharedPtr<NodeImpl> r(a->attrImpl());
 
     if (id == ATTR_ID) {
        element->updateId(a->value(), nullAtom);
index 60ad1f472d1f8eeff160d5593b3f66cbc89482c5..142587db1e49fd8bd9e6392803b5a84b441ac576 100644 (file)
@@ -43,10 +43,11 @@ namespace khtml {
 
 namespace DOM {
 
-class ElementImpl;
+class AtomicStringList;
 class DocumentImpl;
+class CSSStyleDeclarationImpl;
+class ElementImpl;
 class NamedAttrMapImpl;
-class AtomicStringList;
 
 // this has no counterpart in DOM, purely internal
 // representation of the nodevalue of an Attr.
@@ -114,11 +115,12 @@ private:
 public:
 
     // DOM methods & attributes for Attr
+    DOMString name() const;
     bool specified() const { return m_specified; }
     ElementImpl* ownerElement() const { return m_element; }
     AttributeImpl* attrImpl() const { return m_attribute; }
 
-    //DOMString value() const;
+    DOMString value() const;
     void setValue( const DOMString &v, int &exceptioncode );
 
     // DOM methods overridden from  parent classes
@@ -138,10 +140,6 @@ public:
 
     virtual DOMString toString() const;
 
-#if APPLE_CHANGES
-    static Attr createInstance(AttrImpl *impl);
-#endif
-
 protected:
     ElementImpl* m_element;
     AttributeImpl* m_attribute;
@@ -162,17 +160,35 @@ public:
     // Used to quickly determine whether or not an element has a given CSS class.
     virtual const AtomicStringList* getClassList() const;
     const AtomicString& getIDAttribute() const;
-    const AtomicString& getAttribute( NodeImpl::Id id ) const;
-    const AtomicString& getAttribute(const DOMString& localName) const { return getAttributeNS(QString::null, localName); }
-    const AtomicString& getAttributeNS(const DOMString &namespaceURI,
-                                       const DOMString &localName) const;
-    void setAttribute( NodeImpl::Id id, DOMStringImpl* value, int &exceptioncode );
-    void removeAttribute( NodeImpl::Id id, int &exceptioncode );
+    const AtomicString& getAttribute(Id id ) const;
+    void setAttribute( Id id, DOMStringImpl* value, int &exceptioncode );
+    void removeAttribute( Id id, int &exceptioncode );
+
     bool hasAttributes() const;
+
+    bool hasAttribute(const DOMString &name) const { return hasAttributeNS(DOMString(), name); }
+    bool hasAttributeNS(const DOMString &namespaceURI, const DOMString &localName) const;
+
+    const AtomicString& getAttribute(const DOMString& name) const { return getAttributeNS(DOMString(), name); }
+    const AtomicString& getAttributeNS(const DOMString &namespaceURI, const DOMString &localName) const;
+
+    void setAttribute(const DOMString &name, const DOMString &value, int &exception) { setAttributeNS(DOMString(), name, value, exception); }
+    void setAttributeNS(const DOMString &namespaceURI, const DOMString &qualifiedName, const DOMString &value, int &exception);
+
+    void removeAttribute(const DOMString &name, int &exception) { removeAttributeNS(DOMString(), name, exception); }
+    void removeAttributeNS(const DOMString &namespaceURI, const DOMString &localName, int &exception);
+
+    AttrImpl *getAttributeNode(const DOMString &name) { return getAttributeNodeNS(DOMString(), name); }
+    AttrImpl *getAttributeNodeNS(const DOMString &namespaceURI, const DOMString &localName);
+    SharedPtr<AttrImpl> setAttributeNode(AttrImpl *newAttr, int &exception);
+    SharedPtr<AttrImpl> setAttributeNodeNS(AttrImpl *newAttr, int &exception) { return setAttributeNode(newAttr, exception); }
+    SharedPtr<AttrImpl> removeAttributeNode(AttrImpl *oldAttr, int &exception);
     
     DOMString prefix() const { return m_prefix; }
     void setPrefix(const DOMString &_prefix, int &exceptioncode );
 
+    virtual CSSStyleDeclarationImpl *style();
+
     // DOM methods overridden from  parent classes
     virtual DOMString tagName() const;
     virtual unsigned short nodeType() const;
@@ -183,9 +199,10 @@ public:
     virtual void removedFromDocument();
 
     // convenience methods which ignore exceptions
-    void setAttribute (NodeImpl::Id id, const DOMString &value);
+    void setAttribute(Id id, const DOMString &value);
 
-    NamedAttrMapImpl* attributes(bool readonly = false) const;
+    virtual NamedAttrMapImpl *attributes() const;
+    NamedAttrMapImpl* attributes(bool readonly) const;
 
     // This method is called whenever an attribute is added, changed or removed.
     virtual void attributeChanged(AttributeImpl* attr, bool preserveDecls = false) {}
@@ -205,7 +222,7 @@ public:
     virtual bool childAllowed( NodeImpl *newChild );
     virtual bool childTypeAllowed( unsigned short type );
  
-    virtual AttributeImpl* createAttribute(NodeImpl::Id id, DOMStringImpl* value);
+    virtual AttributeImpl* createAttribute(Id id, DOMStringImpl* value);
     
     void dispatchAttrRemovalEvent(AttributeImpl *attr);
     void dispatchAttrAdditionEvent(AttributeImpl *attr);
@@ -220,10 +237,6 @@ public:
     virtual void dump(QTextStream *stream, QString ind = "") const;
 #endif
 
-#if APPLE_CHANGES
-    static Element createInstance(ElementImpl *impl);
-#endif
-
 #ifndef NDEBUG
     virtual void formatForDebugger(char *buffer, unsigned length) const;
 #endif
@@ -276,9 +289,8 @@ public:
 
     // DOM methods & attributes for NamedNodeMap
     virtual AttrImpl *getNamedItem ( NodeImpl::Id id ) const;
-    virtual Node removeNamedItem ( NodeImpl::Id id, int &exceptioncode );
-    virtual Node setNamedItem ( NodeImpl* arg, int &exceptioncode );
-
+    virtual SharedPtr<NodeImpl> removeNamedItem ( NodeImpl::Id id, int &exceptioncode );
+    virtual SharedPtr<NodeImpl> setNamedItem ( NodeImpl* arg, int &exceptioncode );
 
     virtual AttrImpl *item ( unsigned long index ) const;
     unsigned long length() const { return len; }
index 5ca66d289c5bf55c2fd3793607c244fd4b721c19..45fe8cbf7a5d24756c742e6c06c0ecd669a4f562 100644 (file)
@@ -25,6 +25,7 @@
 #include "xml/dom_nodeimpl.h"
 
 #include "dom/dom_exception.h"
+#include "dom/dom2_events.h"
 #include "misc/htmlattrs.h"
 #include "misc/htmltags.h"
 #include "xml/dom_elementimpl.h"
@@ -907,8 +908,9 @@ void NodeImpl::handleLocalEvents(EventImpl *evt, bool useCapture)
     QPtrListIterator<RegisteredEventListener> it(listenersCopy);
     Event ev = evt;
     for (; it.current(); ++it) {
-        if (it.current()->id == evt->id() && it.current()->useCapture == useCapture)
+        if (it.current()->id == evt->id() && it.current()->useCapture == useCapture) {
             it.current()->listener->handleEvent(ev, false);
+        }
     }
 
 }
@@ -1091,6 +1093,8 @@ void NodeImpl::checkAddChild(NodeImpl *newChild, int &exceptioncode)
 bool NodeImpl::isAncestor(const NodeImpl *other) const
 {
     // Return true if other is an ancestor of this, otherwise false
+    if (!other)
+        return false;
     for (const NodeImpl *n = parentNode(); n; n = n->parentNode()) {
         if (n == other)
             return true;
@@ -1529,6 +1533,58 @@ bool NodeImpl::inSameContainingBlockFlowElement(NodeImpl *n)
     return n ? enclosingBlockFlowElement() == n->enclosingBlockFlowElement() : false;
 }
 
+void NodeImpl::addEventListener(const DOMString &type, EventListener *listener, bool useCapture)
+{
+    addEventListener(EventImpl::typeToId(type), listener, useCapture);
+}
+
+void NodeImpl::removeEventListener(const DOMString &type, EventListener *listener, bool useCapture)
+{
+    removeEventListener(EventImpl::typeToId(type), listener, useCapture);
+}
+
+SharedPtr<NodeListImpl> NodeImpl::getElementsByTagNameNS ( const DOMString &namespaceURI, const DOMString &localName )
+{
+    if (localName.isNull())
+        return SharedPtr<NodeListImpl>();
+
+    Id idMask = namespaceMask | localNameMask;
+    if (localName[0] == '*')
+        idMask &= ~localNameMask;
+    if (namespaceURI.isNull() || namespaceURI[0] == '*')
+        idMask &= ~namespaceMask;
+
+    Id id = 0; // 0 means "all items"
+    if ((idMask & localNameMask) || !namespaceURI.isNull()) { // not getElementsByTagName("*")
+        id = getDocument()->tagId(namespaceURI.implementation(), localName.implementation(), true);
+        if ( !id ) // not found -> we want to return an empty list, not "all items"
+            id = (Id)-1; // HACK. HEAD has a cleaner implementation of TagNodeListImpl it seems.
+    }
+
+    return SharedPtr<NodeListImpl>(new TagNodeListImpl(this, id, idMask));
+}
+
+bool NodeImpl::isSupported(const DOMString &feature, const DOMString &version)
+{
+    return DOMImplementationImpl::instance()->hasFeature(feature, version);
+}
+
+DocumentImpl *NodeImpl::ownerDocument() const
+{
+    DocumentImpl *doc = getDocument();
+    return doc == this ? 0 : doc;
+}
+
+bool NodeImpl::hasAttributes() const
+{
+    return false;
+}
+
+NamedAttrMapImpl *NodeImpl::attributes() const
+{
+    return 0;
+}
+
 #if APPLE_CHANGES
 NodeImpl::Id NodeImpl::identifier() const
 {
@@ -1857,6 +1913,9 @@ NodeImpl *ContainerNodeImpl::removeChild ( NodeImpl *oldChild, int &exceptioncod
 
 void ContainerNodeImpl::removeChildren()
 {
+    if (!_first)
+        return;
+
     int exceptionCode;
     while (NodeImpl *n = _first) {
         NodeImpl *next = n->nextSibling();
@@ -2076,28 +2135,6 @@ void ContainerNodeImpl::cloneChildNodes(NodeImpl *clone)
     }
 }
 
-NodeListImpl* ContainerNodeImpl::getElementsByTagNameNS ( DOMStringImpl* namespaceURI,
-                                                     DOMStringImpl* localName )
-{
-    if (!localName) return 0;
-
-    NodeImpl::Id idMask = namespaceMask | localNameMask;
-    if (localName->l && localName->s[0] == '*')
-        idMask &= ~localNameMask;
-    if (!namespaceURI || (namespaceURI->l && namespaceURI->s[0] == '*'))
-        idMask &= ~namespaceMask;
-
-    Id id = 0; // 0 means "all items"
-    if ( (idMask & localNameMask) || namespaceURI ) // not getElementsByTagName("*")
-    {
-        id = getDocument()->tagId( namespaceURI, localName, true);
-        if ( !id ) // not found -> we want to return an empty list, not "all items"
-            id = (Id)-1; // HACK. HEAD has a cleaner implementation of TagNodeListImpl it seems.
-    }
-
-    return new TagNodeListImpl( this, id, idMask );
-}
-
 // I don't like this way of implementing the method, but I didn't find any
 // other way. Lars
 bool ContainerNodeImpl::getUpperLeftCorner(int &xPos, int &yPos) const
@@ -2509,12 +2546,18 @@ bool NameNodeListImpl::nodeMatches( NodeImpl *testNode ) const
 
 // ---------------------------------------------------------------------------
 
-NamedNodeMapImpl::NamedNodeMapImpl()
+NamedNodeMapImpl::~NamedNodeMapImpl()
 {
 }
 
-NamedNodeMapImpl::~NamedNodeMapImpl()
+NodeImpl *NamedNodeMapImpl::getNamedItemNS(const DOMString &namespaceURI, const DOMString &localName) const
+{
+    return getNamedItem(const_cast<NamedNodeMapImpl *>(this)->mapId(namespaceURI, localName, true));
+}
+
+SharedPtr<NodeImpl> NamedNodeMapImpl::removeNamedItemNS(const DOMString &namespaceURI, const DOMString &localName, int &exception)
 {
+    return removeNamedItem(mapId(namespaceURI, localName, true), exception);
 }
 
 // ----------------------------------------------------------------------------
index a77e6ea8a63686c0bf414c6e1eaed5da469ec30e..37b0372476197e654f257d36e8bedce798a3c537 100644 (file)
@@ -25,7 +25,6 @@
 #ifndef _DOM_NodeImpl_h_
 #define _DOM_NodeImpl_h_
 
-#include "dom/dom_misc.h"
 #include "dom/dom_string.h"
 #include "dom/dom_node.h"
 #include "misc/main_thread_malloc.h"
@@ -52,10 +51,14 @@ namespace khtml {
 
 namespace DOM {
 
+using khtml::SharedPtr;
+
 class DocumentImpl;
 class ElementImpl;
 class EventImpl;
+class EventListener;
 class NodeListImpl;
+class NamedAttrMapImpl;
 class RegisteredEventListener;
 
 // The namespace used for XHTML elements
@@ -109,6 +112,9 @@ public:
     virtual NodeListImpl *childNodes();
     virtual NodeImpl *firstChild() const;
     virtual NodeImpl *lastChild() const;
+    virtual bool hasAttributes() const;
+    virtual NamedAttrMapImpl *attributes() const;
+    virtual DocumentImpl *ownerDocument() const;
     virtual NodeImpl *insertBefore ( NodeImpl *newChild, NodeImpl *refChild, int &exceptioncode );
     virtual NodeImpl *replaceChild ( NodeImpl *newChild, NodeImpl *oldChild, int &exceptioncode );
     virtual NodeImpl *removeChild ( NodeImpl *oldChild, int &exceptioncode );
@@ -121,6 +127,7 @@ public:
     virtual DOMString prefix() const;
     virtual void setPrefix(const DOMString &_prefix, int &exceptioncode );
     void normalize ();
+    static bool isSupported(const DOMString &feature, const DOMString &version);
 
     NodeImpl *lastDescendent() const;
 
@@ -225,14 +232,14 @@ public:
             {
                 button = _button; type = _type;
                 url = _url; target = _target;
-                innerNode = _innerNode;
+                innerNode.reset(_innerNode);
             }
 
         int button;
         MouseEventType type;
         DOMString url; // url under mouse or empty
         DOMString target;
-        Node innerNode;
+        SharedPtr<NodeImpl> innerNode;
     };
 
     // for LINK and STYLE
@@ -285,7 +292,10 @@ public:
 
     void setDocument(DocumentPtr *doc);
 
-    void addEventListener(int id, EventListener *listener, const bool useCapture);
+    void addEventListener(const DOMString &, EventListener *listener, bool useCapture);
+    void removeEventListener(const DOMString &, EventListener *listener, bool useCapture);
+
+    void addEventListener(int id, EventListener *listener, bool useCapture);
     void removeEventListener(int id, EventListener *listener, bool useCapture);
     void removeHTMLEventListener(int id);
     void setHTMLEventListener(int id, EventListener *listener);
@@ -467,6 +477,9 @@ public:
     void notifyNodeListsSubtreeModified();
     void notifyLocalNodeListsSubtreeModified();
 
+    SharedPtr<NodeListImpl> getElementsByTagName(const DOMString &name) { return getElementsByTagNameNS(DOMString(), name); }
+    SharedPtr<NodeListImpl> getElementsByTagNameNS(const DOMString &namespaceURI, const DOMString &localName);
+
 private: // members
     DocumentPtr *document;
     NodeImpl *m_previous;
@@ -522,9 +535,6 @@ public:
     virtual void attach();
     virtual void detach();
 
-    virtual NodeListImpl *getElementsByTagNameNS ( DOMStringImpl* namespaceURI,
-                                                   DOMStringImpl* localName );
-
     virtual QRect getRect() const;
     bool getUpperLeftCorner(int &xPos, int &yPos) const;
     bool getLowerRightCorner(int &xPos, int &yPos) const;
@@ -576,9 +586,6 @@ public:
 
     void rootNodeSubtreeModified();
 
-#if APPLE_CHANGES
-    static NodeList createInstance(NodeListImpl *impl);
-#endif
 protected:
     // helper functions for searching all ElementImpls in a tree
     unsigned long recursiveLength(NodeImpl *start = 0) const;
@@ -659,15 +666,22 @@ protected:
 class NamedNodeMapImpl : public khtml::Shared<NamedNodeMapImpl>
 {
 public:
-    NamedNodeMapImpl();
+    NamedNodeMapImpl() { }
     virtual ~NamedNodeMapImpl();
 
     MAIN_THREAD_ALLOCATED;
 
+    NodeImpl *getNamedItem(const DOMString &name) const { return getNamedItemNS(DOMString(), name); }
+    SharedPtr<NodeImpl> removeNamedItem(const DOMString &name, int &exception) { return removeNamedItemNS(DOMString(), name, exception); }
+
+    NodeImpl *getNamedItemNS(const DOMString &namespaceURI, const DOMString &localName) const;
+    SharedPtr<NodeImpl> setNamedItemNS(NodeImpl *arg, int &exception) { return setNamedItem(arg, exception); }
+    SharedPtr<NodeImpl> removeNamedItemNS(const DOMString &namespaceURI, const DOMString &localName, int &exception);
+
     // DOM methods & attributes for NamedNodeMap
     virtual NodeImpl *getNamedItem ( NodeImpl::Id id ) const = 0;
-    virtual Node removeNamedItem ( NodeImpl::Id id, int &exceptioncode ) = 0;
-    virtual Node setNamedItem ( NodeImpl* arg, int &exceptioncode ) = 0;
+    virtual SharedPtr<NodeImpl> removeNamedItem ( NodeImpl::Id id, int &exceptioncode ) = 0;
+    virtual SharedPtr<NodeImpl> setNamedItem ( NodeImpl* arg, int &exceptioncode ) = 0;
 
     virtual NodeImpl *item ( unsigned long index ) const = 0;
     virtual unsigned long length(  ) const = 0;
@@ -675,10 +689,6 @@ public:
     // Other methods (not part of DOM)
     virtual NodeImpl::Id mapId(const DOMString& namespaceURI,  const DOMString& localName,  bool readonly) = 0;
     virtual bool isReadOnly() { return false; }
-
-#if APPLE_CHANGES
-    static NamedNodeMap createInstance(NamedNodeMapImpl *impl);
-#endif
 };
 
 
index b4b13b7cf48c61d43944741361b6d23f45a8b890..063c87c8ab6d9ff14694d72b2414736dcdb4f65a 100644 (file)
@@ -77,10 +77,6 @@ public:
     virtual void dump(QTextStream *stream, QString ind = "") const;
 #endif
 
-#if APPLE_CHANGES
-    static CharacterData createInstance(CharacterDataImpl *impl);
-#endif
-
 protected:
     // note: since DOMStrings are shared, str should always be copied when making
     // a change or returning a string
@@ -141,10 +137,6 @@ public:
 
     virtual DOMString toString() const;
 
-#if APPLE_CHANGES
-    static Text createInstance(TextImpl *impl);
-#endif
-
 #ifndef NDEBUG
     virtual void formatForDebugger(char *buffer, unsigned length) const;
 #endif
index 7c0f0493a01731c8504287a7871d836e5e928958..ceb294d0737a95a4e936b860a0cbe747a402ab94 100644 (file)
@@ -163,10 +163,6 @@ public:
 
     virtual DOMString toString() const;
     
-#if APPLE_CHANGES
-    static ProcessingInstruction createInstance(ProcessingInstructionImpl *impl);
-#endif
-
 protected:
     DOMStringImpl *m_target;
     DOMStringImpl *m_data;
index 88d3076b7ac8383b680b0e7b0fdc5906723310b1..fca5e571aa83993468859e40f3779eb31c955ae8 100644 (file)
 #import "KWQFoundationExtras.h"
 #import "KWQKHTMLPart.h"
 
+// Temporary: Remove when the real FilterNode is checked in.
+namespace DOM {
+    typedef const Node &FilterNode;
+}
+
 using DOM::Attr;
 using DOM::AttrImpl;
 using DOM::CharacterDataImpl;
@@ -76,6 +81,7 @@ using DOM::DOMStringImpl;
 using DOM::Element;
 using DOM::ElementImpl;
 using DOM::EntityImpl;
+using DOM::FilterNode;
 using DOM::HTMLElementImpl;
 using DOM::NamedNodeMap;
 using DOM::NamedNodeMapImpl;
@@ -95,12 +101,17 @@ using DOM::TextImpl;
 using DOM::TreeWalkerImpl;
 
 using khtml::RenderObject;
+using khtml::SharedPtr;
 
 @interface DOMAttr (WebCoreInternal)
 + (DOMAttr *)_attrWithImpl:(AttrImpl *)impl;
 - (AttrImpl *)_attrImpl;
 @end
 
+@interface DOMDocumentType (WebCoreInternal)
+- (DOM::DocumentTypeImpl *)_documentTypeImpl;
+@end
+
 @interface DOMImplementation (WebCoreInternal)
 + (DOMImplementation *)_DOMImplementationWithImpl:(DOMImplementationImpl *)impl;
 - (DOMImplementationImpl *)_DOMImplementationImpl;
@@ -110,34 +121,6 @@ using khtml::RenderObject;
 + (DOMNamedNodeMap *)_namedNodeMapWithImpl:(NamedNodeMapImpl *)impl;
 @end
 
-//------------------------------------------------------------------------------------------
-// Factory methods
-
-inline NamedNodeMap NamedNodeMapImpl::createInstance(NamedNodeMapImpl *impl)
-{
-    return NamedNodeMap(impl);
-}
-
-inline Attr AttrImpl::createInstance(AttrImpl *impl)
-{
-    return Attr(impl);
-}
-
-inline Element ElementImpl::createInstance(ElementImpl *impl)
-{
-    return Element(impl);
-}
-
-inline DocumentType DocumentTypeImpl::createInstance(DocumentTypeImpl *impl)
-{
-    return DocumentType(impl);
-}
-
-inline Document DocumentImpl::createInstance(DocumentImpl *impl)
-{
-    return Document(impl);
-}
-
 //------------------------------------------------------------------------------------------
 // DOMObject
 
@@ -349,14 +332,12 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     ASSERT(feature);
     ASSERT(version);
 
-    // Method not reflected in DOM::NodeImpl interface
-    return Node([self _nodeImpl]).isSupported(feature, version);
+    return [self _nodeImpl]->isSupported(feature, version);
 }
 
 - (NSString *)namespaceURI
 {
-    // Method not reflected in DOM::NodeImpl interface
-    return Node([self _nodeImpl]).namespaceURI();
+    return [self _nodeImpl]->namespaceURI();
 }
 
 - (NSString *)prefix
@@ -380,8 +361,7 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
 
 - (BOOL)hasAttributes
 {
-    // Method not reflected in DOM::NodeImpl interface
-    return Node([self _nodeImpl]).hasAttributes();
+    return [self _nodeImpl]->hasAttributes();
 }
 
 - (void)addEventListener:(NSString *)type :(id <DOMEventListener>)listener :(BOOL)useCapture
@@ -683,42 +663,27 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
 {
     ASSERT(name);
 
-    // Method not reflected in DOM::NamedNodeMapImpl interface
-    NamedNodeMap map = NamedNodeMapImpl::createInstance([self _namedNodeMapImpl]);
-    Node result(map.getNamedItem(name));
-    return [DOMNode _nodeWithImpl:result.handle()];
+    return [DOMNode _nodeWithImpl:[self _namedNodeMapImpl]->getNamedItem(name)];
 }
 
 - (DOMNode *)setNamedItem:(DOMNode *)arg
 {
     ASSERT(arg);
 
-    // Method not reflected in DOM::NamedNodeMapImpl interface
-    try {
-        NamedNodeMap map = NamedNodeMapImpl::createInstance([self _namedNodeMapImpl]);
-        Node result(map.setNamedItem([arg _nodeImpl]));
-        return [DOMNode _nodeWithImpl:result.handle()];
-    } 
-    catch (const DOM::DOMException &e) {
-        raiseOnDOMError(e.code);
-        return nil;
-    }
+    int exception = 0;
+    DOMNode *result = [DOMNode _nodeWithImpl:[self _namedNodeMapImpl]->setNamedItem([arg _nodeImpl], exception).get()];
+    raiseOnDOMError(exception);
+    return result;
 }
 
 - (DOMNode *)removeNamedItem:(NSString *)name
 {
     ASSERT(name);
 
-    // Method not reflected in DOM::NamedNodeMapImpl interface
-    try {
-        NamedNodeMap map = NamedNodeMapImpl::createInstance([self _namedNodeMapImpl]);
-        Node result(map.removeNamedItem(name));
-        return [DOMNode _nodeWithImpl:result.handle()];
-    } 
-    catch (const DOM::DOMException &e) {
-        raiseOnDOMError(e.code);
-        return nil;
-    }
+    int exception = 0;
+    DOMNode *result = [DOMNode _nodeWithImpl:[self _namedNodeMapImpl]->removeNamedItem(name, exception).get()];
+    raiseOnDOMError(exception);
+    return result;
 }
 
 - (DOMNode *)item:(unsigned long)index
@@ -737,26 +702,17 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
         return nil;
     }
 
-    // Method not reflected in DOM::NamedNodeMapImpl interface
-    NamedNodeMap map = NamedNodeMapImpl::createInstance([self _namedNodeMapImpl]);
-    Node result(map.getNamedItemNS(namespaceURI, localName));
-    return [DOMNode _nodeWithImpl:result.handle()];
+    return [DOMNode _nodeWithImpl:[self _namedNodeMapImpl]->getNamedItemNS(namespaceURI, localName)];
 }
 
 - (DOMNode *)setNamedItemNS:(DOMNode *)arg
 {
     ASSERT(arg);
 
-    // Method not reflected in DOM::NamedNodeMapImpl interface
-    try {
-        NamedNodeMap map = NamedNodeMapImpl::createInstance([self _namedNodeMapImpl]);
-        Node result(map.setNamedItemNS([arg _nodeImpl]));
-        return [DOMNode _nodeWithImpl:result.handle()];
-    } 
-    catch (const DOM::DOMException &e) {
-        raiseOnDOMError(e.code);
-        return nil;
-    }
+    int exception = 0;
+    DOMNode *result = [DOMNode _nodeWithImpl:[self _namedNodeMapImpl]->setNamedItemNS([arg _nodeImpl], exception).get()];
+    raiseOnDOMError(exception);
+    return result;
 }
 
 - (DOMNode *)removeNamedItemNS:(NSString *)namespaceURI :(NSString *)localName
@@ -764,16 +720,10 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     ASSERT(namespaceURI);
     ASSERT(localName);
 
-    // Method not reflected in DOM::NamedNodeMapImpl interface
-    try {
-        NamedNodeMap map = NamedNodeMapImpl::createInstance([self _namedNodeMapImpl]);
-        Node result(map.removeNamedItemNS(namespaceURI, localName));
-        return [DOMNode _nodeWithImpl:result.handle()];
-    } 
-    catch (const DOM::DOMException &e) {
-        raiseOnDOMError(e.code);
-        return nil;
-    }
+    int exception = 0;
+    DOMNode *result = [DOMNode _nodeWithImpl:[self _namedNodeMapImpl]->removeNamedItemNS(namespaceURI, localName, exception).get()];
+    raiseOnDOMError(exception);
+    return result;
 }
 
 @end
@@ -919,8 +869,7 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     ASSERT(qualifiedName);
 
     int exceptionCode = 0;
-    DocumentType dt = DocumentTypeImpl::createInstance(static_cast<DocumentTypeImpl *>([doctype _nodeImpl]));
-    DocumentImpl *impl = [self _DOMImplementationImpl]->createDocument(namespaceURI, qualifiedName, dt, exceptionCode);
+    DocumentImpl *impl = [self _DOMImplementationImpl]->createDocument(namespaceURI, qualifiedName, [doctype _documentTypeImpl], exceptionCode);
     raiseOnDOMError(exceptionCode);
     return static_cast<DOMDocument *>([DOMNode _nodeWithImpl:impl]);
 }
@@ -935,9 +884,7 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     ASSERT(media);
 
     int exceptionCode = 0;
-    DOMString titleString(title);
-    DOMString mediaString(media);
-    DOMCSSStyleSheet *result = [DOMCSSStyleSheet _CSSStyleSheetWithImpl:[self _DOMImplementationImpl]->createCSSStyleSheet(titleString.implementation(), mediaString.implementation(), exceptionCode)];
+    DOMCSSStyleSheet *result = [DOMCSSStyleSheet _CSSStyleSheetWithImpl:[self _DOMImplementationImpl]->createCSSStyleSheet(title, media, exceptionCode)];
     raiseOnDOMError(exceptionCode);
     return result;
 }
@@ -1068,16 +1015,10 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
 {
     ASSERT(name);
 
-    // Method not reflected in DOM::DocumentImpl interface
-    try {
-        Document doc(DocumentImpl::createInstance([self _documentImpl]));
-        Attr result(doc.createAttribute(name));
-        return static_cast<DOMAttr *>([DOMNode _nodeWithImpl:result.handle()]);
-    } 
-    catch (const DOM::DOMException &e) {
-        raiseOnDOMError(e.code);
-        return nil;
-    }
+    int exception = 0;
+    DOMAttr *result = [DOMAttr _attrWithImpl:[self _documentImpl]->createAttribute(name, exception)];
+    raiseOnDOMError(exception);
+    return result;
 }
 
 - (DOMEntityReference *)createEntityReference:(NSString *)name
@@ -1092,7 +1033,7 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
 - (DOMNodeList *)getElementsByTagName:(NSString *)tagname
 {
     ASSERT(tagname);
-    return [DOMNodeList _nodeListWithImpl:[self _documentImpl]->getElementsByTagNameNS(0, DOMString(tagname).implementation())];
+    return [DOMNodeList _nodeListWithImpl:[self _documentImpl]->getElementsByTagName(tagname).get()];
 }
 
 - (DOMNode *)importNode:(DOMNode *)importedNode :(BOOL)deep
@@ -1119,16 +1060,10 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     ASSERT(namespaceURI);
     ASSERT(qualifiedName);
 
-    // Method not reflected in DOM::DocumentImpl interface
-    try {
-        Document doc(DocumentImpl::createInstance([self _documentImpl]));
-        Attr result(doc.createAttributeNS(namespaceURI, qualifiedName));
-        return static_cast<DOMAttr *>([DOMNode _nodeWithImpl:result.handle()]);
-    } 
-    catch (const DOM::DOMException &e) {
-        raiseOnDOMError(e.code);
-        return nil;
-    }
+    int exception = 0;
+    DOMAttr *result = [DOMAttr _attrWithImpl:[self _documentImpl]->createAttributeNS(namespaceURI, qualifiedName, exception)];
+    raiseOnDOMError(exception);
+    return result;
 }
 
 - (DOMNodeList *)getElementsByTagNameNS:(NSString *)namespaceURI :(NSString *)localName
@@ -1136,7 +1071,7 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     ASSERT(namespaceURI);
     ASSERT(localName);
 
-    return [DOMNodeList _nodeListWithImpl:[self _documentImpl]->getElementsByTagNameNS(DOMString(namespaceURI).implementation(), DOMString(localName).implementation())];
+    return [DOMNodeList _nodeListWithImpl:[self _documentImpl]->getElementsByTagNameNS(namespaceURI, localName).get()];
 }
 
 - (DOMElement *)getElementById:(NSString *)elementId
@@ -1364,79 +1299,52 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     ASSERT(name);
     ASSERT(value);
 
-    // Method not reflected in DOM::ElementImpl interface
-    try {
-        Element element(ElementImpl::createInstance([self _elementImpl]));
-        element.setAttribute(name, value);
-    } 
-    catch (const DOM::DOMException &e) {
-        raiseOnDOMError(e.code);
-    }
+    int exception = 0;
+    [self _elementImpl]->setAttribute(name, value, exception);
+    raiseOnDOMError(exception);
 }
 
 - (void)removeAttribute:(NSString *)name
 {
     ASSERT(name);
 
-    // Method not reflected in DOM::ElementImpl interface
-    try {
-        Element element(ElementImpl::createInstance([self _elementImpl]));
-        element.removeAttribute(name);
-    } 
-    catch (const DOM::DOMException &e) {
-        raiseOnDOMError(e.code);
-    }
+    int exception = 0;
+    [self _elementImpl]->removeAttribute(name, exception);
+    raiseOnDOMError(exception);
 }
 
 - (DOMAttr *)getAttributeNode:(NSString *)name
 {
     ASSERT(name);
 
-    // Method not reflected in DOM::ElementImpl interface
-    Element element(ElementImpl::createInstance([self _elementImpl]));
-    Attr result(element.getAttributeNode(name));
-    return [DOMAttr _attrWithImpl:static_cast<AttrImpl *>(result.handle())];
+    return [DOMAttr _attrWithImpl:[self _elementImpl]->getAttributeNode(name)];
 }
 
 - (DOMAttr *)setAttributeNode:(DOMAttr *)newAttr
 {
     ASSERT(newAttr);
 
-    // Method not reflected in DOM::ElementImpl interface
-    try {
-        Element element(ElementImpl::createInstance([self _elementImpl]));
-        Attr attr(AttrImpl::createInstance([newAttr _attrImpl]));
-        Attr result(element.setAttributeNode(attr));
-        return [DOMAttr _attrWithImpl:static_cast<AttrImpl *>(result.handle())];
-    } 
-    catch (const DOM::DOMException &e) {
-        raiseOnDOMError(e.code);
-        return nil;
-    }
+    int exception = 0;
+    DOMAttr *result = [DOMAttr _attrWithImpl:[self _elementImpl]->setAttributeNode([newAttr _attrImpl], exception).get()];
+    raiseOnDOMError(exception);
+    return result;
 }
 
 - (DOMAttr *)removeAttributeNode:(DOMAttr *)oldAttr
 {
     ASSERT(oldAttr);
 
-    // Method not reflected in DOM::ElementImpl interface
-    try {
-        Element element(ElementImpl::createInstance([self _elementImpl]));
-        Attr attr(AttrImpl::createInstance([oldAttr _attrImpl]));
-        Attr result(element.removeAttributeNode(attr));
-        return [DOMAttr _attrWithImpl:static_cast<AttrImpl *>(result.handle())];
-    } 
-    catch (const DOM::DOMException &e) {
-        raiseOnDOMError(e.code);
-        return nil;
-    }
+    int exception = 0;
+    DOMAttr *result = [DOMAttr _attrWithImpl:[self _elementImpl]->removeAttributeNode([oldAttr _attrImpl], exception).get()];
+    raiseOnDOMError(exception);
+    return result;
 }
 
 - (DOMNodeList *)getElementsByTagName:(NSString *)name
 {
     ASSERT(name);
 
-    return [DOMNodeList _nodeListWithImpl:[self _elementImpl]->getElementsByTagNameNS(0, DOMString(name).implementation())];
+    return [DOMNodeList _nodeListWithImpl:[self _elementImpl]->getElementsByTagName(name).get()];
 }
 
 - (NSString *)getAttributeNS:(NSString *)namespaceURI :(NSString *)localName
@@ -1444,8 +1352,7 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     ASSERT(namespaceURI);
     ASSERT(localName);
 
-    Element element(ElementImpl::createInstance([self _elementImpl]));
-    return element.getAttributeNS(namespaceURI, localName);
+    return [self _elementImpl]->getAttributeNS(namespaceURI, localName);
 }
 
 - (void)setAttributeNS:(NSString *)namespaceURI :(NSString *)qualifiedName :(NSString *)value
@@ -1454,14 +1361,9 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     ASSERT(qualifiedName);
     ASSERT(value);
 
-    // Method not reflected in DOM::ElementImpl interface
-    try {
-        Element element(ElementImpl::createInstance([self _elementImpl]));
-        element.setAttributeNS(namespaceURI, qualifiedName, value);
-    }
-    catch (const DOM::DOMException &e) {
-        raiseOnDOMError(e.code);
-    }
+    int exception = 0;
+    [self _elementImpl]->setAttributeNS(namespaceURI, qualifiedName, value, exception);
+    raiseOnDOMError(exception);
 }
 
 - (void)removeAttributeNS:(NSString *)namespaceURI :(NSString *)localName
@@ -1469,14 +1371,9 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     ASSERT(namespaceURI);
     ASSERT(localName);
 
-    // Method not reflected in DOM::ElementImpl interface
-    try {
-        Element element(ElementImpl::createInstance([self _elementImpl]));
-        element.removeAttributeNS(namespaceURI, localName);
-    } 
-    catch (const DOM::DOMException &e) {
-        raiseOnDOMError(e.code);
-    }
+    int exception = 0;
+    [self _elementImpl]->removeAttributeNS(namespaceURI, localName, exception);
+    raiseOnDOMError(exception);
 }
 
 - (DOMAttr *)getAttributeNodeNS:(NSString *)namespaceURI :(NSString *)localName
@@ -1484,27 +1381,17 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     ASSERT(namespaceURI);
     ASSERT(localName);
 
-    // Method not reflected in DOM::ElementImpl interface
-    Element element(ElementImpl::createInstance([self _elementImpl]));
-    Attr result(element.getAttributeNodeNS(namespaceURI, localName));
-    return [DOMAttr _attrWithImpl:static_cast<AttrImpl *>(result.handle())];
+    return [DOMAttr _attrWithImpl:[self _elementImpl]->getAttributeNodeNS(namespaceURI, localName)];
 }
 
 - (DOMAttr *)setAttributeNodeNS:(DOMAttr *)newAttr
 {
     ASSERT(newAttr);
 
-    // Method not reflected in DOM::ElementImpl interface
-    try {
-        Element element(ElementImpl::createInstance([self _elementImpl]));
-        Attr attr(AttrImpl::createInstance([newAttr _attrImpl]));
-        Attr result(element.setAttributeNodeNS(attr));
-        return [DOMAttr _attrWithImpl:static_cast<AttrImpl *>(result.handle())];
-    } 
-    catch (const DOM::DOMException &e) {
-        raiseOnDOMError(e.code);
-        return nil;
-    }
+    int exception = 0;
+    DOMAttr *result = [DOMAttr _attrWithImpl:[self _elementImpl]->setAttributeNodeNS([newAttr _attrImpl], exception).get()];
+    raiseOnDOMError(exception);
+    return result;
 }
 
 - (DOMNodeList *)getElementsByTagNameNS:(NSString *)namespaceURI :(NSString *)localName
@@ -1512,16 +1399,14 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     ASSERT(namespaceURI);
     ASSERT(localName);
 
-    return [DOMNodeList _nodeListWithImpl:[self _elementImpl]->getElementsByTagNameNS(DOMString(namespaceURI).implementation(), DOMString(localName).implementation())];
+    return [DOMNodeList _nodeListWithImpl:[self _elementImpl]->getElementsByTagNameNS(namespaceURI, localName).get()];
 }
 
 - (BOOL)hasAttribute:(NSString *)name
 {
     ASSERT(name);
 
-    // Method not reflected in DOM::ElementImpl interface
-    Element element(ElementImpl::createInstance([self _elementImpl]));
-    return element.hasAttribute(name);
+    return [self _elementImpl]->hasAttribute(name);
 }
 
 - (BOOL)hasAttributeNS:(NSString *)namespaceURI :(NSString *)localName
@@ -1529,9 +1414,7 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     ASSERT(namespaceURI);
     ASSERT(localName);
 
-    // Method not reflected in DOM::ElementImpl interface
-    Element element(ElementImpl::createInstance([self _elementImpl]));
-    return element.hasAttributeNS(namespaceURI, localName);
+    return [self _elementImpl]->hasAttributeNS(namespaceURI, localName);
 }
 
 @end
@@ -1540,10 +1423,7 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
 
 - (DOMCSSStyleDeclaration *)style
 {
-    ElementImpl *impl = [self _elementImpl];
-    if (impl->isHTMLElement())
-        return [DOMCSSStyleDeclaration _styleDeclarationWithImpl:static_cast<HTMLElementImpl *>(impl)->getInlineStyleDecl()];
-    return nil;
+    return [DOMCSSStyleDeclaration _styleDeclarationWithImpl:[self _elementImpl]->style()];
 }
 
 @end
@@ -1622,11 +1502,6 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
 
 @implementation DOMDocumentType
 
-- (DocumentTypeImpl *)_documentTypeImpl
-{
-    return static_cast<DocumentTypeImpl *>(DOM_cast<NodeImpl *>(_internal));
-}
-
 - (NSString *)name
 {
     return [self _documentTypeImpl]->publicId();
@@ -1659,6 +1534,15 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
 
 @end
 
+@implementation DOMDocumentType (WebCoreInternal)
+
+- (DocumentTypeImpl *)_documentTypeImpl
+{
+    return static_cast<DocumentTypeImpl *>(DOM_cast<NodeImpl *>(_internal));
+}
+
+@end
+
 //------------------------------------------------------------------------------------------
 // DOMNotation
 
@@ -2294,7 +2178,7 @@ class ObjCNodeFilterCondition : public NodeFilterCondition
 public:
     ObjCNodeFilterCondition(id <DOMNodeFilter>);
     virtual ~ObjCNodeFilterCondition();
-    virtual short acceptNode(const Node &) const;
+    virtual short acceptNode(FilterNode) const;
 
 private:
     ObjCNodeFilterCondition(const ObjCNodeFilterCondition &);
@@ -2315,7 +2199,7 @@ ObjCNodeFilterCondition::~ObjCNodeFilterCondition()
     CFRelease(m_filter);
 }
 
-short ObjCNodeFilterCondition::acceptNode(const Node &n) const
+short ObjCNodeFilterCondition::acceptNode(FilterNode n) const
 {
     if (n.isNull())
         return NodeFilter::FILTER_REJECT;
index 42979e1eee20bea4a64ba654699fe13dc03c0e7b..d81de7d4e68bd346e8fd6a1f1a3357677467ebd5 100644 (file)
@@ -32,7 +32,6 @@
 
 #import "dom_docimpl.h"
 #import "dom2_eventsimpl.h"
-#import "dom2_views.h"
 #import "dom2_viewsimpl.h"
 
 using DOM::EventImpl;
@@ -216,7 +215,7 @@ ALLOW_DOM_CAST(EventImpl)
 
 - (DOMNode *)relatedNode
 {
-    return [DOMNode _nodeWithImpl:[self _mutationEventImpl]->relatedNode().handle()];
+    return [DOMNode _nodeWithImpl:[self _mutationEventImpl]->relatedNode()];
 }
 
 - (NSString *)prevValue
index 7933a700db1cf0a9d73f01e814c5f5ff1bc365d0..d2bb2a7b44b5b01734fb3bb3b00408f47151aabd 100644 (file)
@@ -28,6 +28,7 @@
 #ifndef KWQCLIPBOARD_H_
 #define KWQCLIPBOARD_H_
 
+#include "KWQPixmap.h"
 #include "xml/dom2_eventsimpl.h"
 
 #ifdef __OBJC__
@@ -71,8 +72,8 @@ public:
     QPoint dragLocation() const;    // same point as client passed us
     QPixmap dragImage() const;
     void setDragImage(const QPixmap &, const QPoint &);
-    const DOM::Node dragImageElement();
-    void setDragImageElement(const DOM::Node &, const QPoint &);
+    DOM::NodeImpl *dragImageElement();
+    void setDragImageElement(DOM::NodeImpl *, const QPoint &);
 
     // Methods for getting info in Cocoa's type system
     NSImage *dragNSImage(NSPoint *loc);    // loc converted from dragLoc, based on whole image size
@@ -86,7 +87,7 @@ public:
     void setDragHasStarted() { m_dragStarted = true; }
 
 private:
-        void setDragImage(const QPixmap &pm, const DOM::Node &, const QPoint &loc);
+    void setDragImage(const QPixmap &pm, DOM::NodeImpl *, const QPoint &loc);
 
     NSPasteboard *m_pasteboard;
     bool m_forDragging;
@@ -94,12 +95,11 @@ private:
     DOM::DOMString m_effectAllowed;
     QPoint m_dragLoc;
     QPixmap m_dragImage;
-    DOM::Node m_dragImageElement;
+    khtml::SharedPtr<DOM::NodeImpl> m_dragImageElement;
     AccessPolicy m_policy;
     int m_changeCount;
     bool m_dragStarted;
     KWQKHTMLPart *m_part;   // used on the source side to generate dragging images
 };
 
-
 #endif
index 6ffc911bd8bbe537e7c085d5eff650ab03266a45..ebba0e64b6da9283c4397b7339fff12470e5815d 100644 (file)
 #import <AppKit/AppKit.h>
 
 using DOM::DOMString;
+using DOM::NodeImpl;
 
 KWQClipboard::KWQClipboard(bool forDragging, NSPasteboard *pasteboard, AccessPolicy policy, KWQKHTMLPart *part)
   : m_pasteboard(KWQRetain(pasteboard)), m_forDragging(forDragging),
-    m_dragImageElement(0), m_policy(policy), m_dragStarted(false), m_part(part)
+    m_policy(policy), m_dragStarted(false), m_part(part)
 {
     m_changeCount = [m_pasteboard changeCount];
 }
@@ -292,25 +293,25 @@ QPixmap KWQClipboard::dragImage() const
 
 void KWQClipboard::setDragImage(const QPixmap &pm, const QPoint &loc)
 {
-    setDragImage(pm, DOM::Node(0), loc);
+    setDragImage(pm, 0, loc);
 }
 
-const DOM::Node KWQClipboard::dragImageElement()
+DOM::NodeImpl *KWQClipboard::dragImageElement()
 {
-    return m_dragImageElement;
+    return m_dragImageElement.get();
 }
 
-void KWQClipboard::setDragImageElement(const DOM::Node &node, const QPoint &loc)
+void KWQClipboard::setDragImageElement(NodeImpl *node, const QPoint &loc)
 {
     setDragImage(QPixmap(), node, loc);
 }
 
-void KWQClipboard::setDragImage(const QPixmap &pm, const DOM::Node &node, const QPoint &loc)
+void KWQClipboard::setDragImage(const QPixmap &pm, NodeImpl *node, const QPoint &loc)
 {
     if (m_policy == ImageWritable || m_policy == Writable) {
         m_dragImage = pm;
         m_dragLoc = loc;
-        m_dragImageElement = node;
+        m_dragImageElement.reset(node);
         
         if (m_dragStarted && m_changeCount == [m_pasteboard changeCount]) {
             NSPoint cocoaLoc;
@@ -332,7 +333,7 @@ NSImage *KWQClipboard::dragNSImage(NSPoint *loc)
         if (m_part) {
             NSRect imageRect;
             NSRect elementRect;
-            result = m_part->snapshotDragImage(m_dragImageElement, &imageRect, &elementRect);
+            result = m_part->snapshotDragImage(m_dragImageElement.get(), &imageRect, &elementRect);
             if (loc) {
                 // Client specifies point relative to element, not the whole image, which may include child
                 // layers spread out all over the place.
index 30b8a02413c64017bcb60fd675e37ba235c84090..1b3906ff2ca78a7774cda8286507cb0b1feaed53 100644 (file)
@@ -2326,7 +2326,7 @@ void KWQKHTMLPart::khtmlMouseMoveEvent(MouseMoveEvent *event)
                     if (_dragSrcIsDHTML) {
                         int srcX, srcY;
                         _dragSrc.handle()->renderer()->absolutePosition(srcX, srcY);
-                        _dragClipboard->setDragImageElement(_dragSrc, QPoint(_mouseDownX - srcX, _mouseDownY - srcY));
+                        _dragClipboard->setDragImageElement(_dragSrc.handle(), QPoint(_mouseDownX - srcX, _mouseDownY - srcY));
                     }
                     
                     _mouseDownMayStartDrag = dispatchDragSrcEvent(EventImpl::DRAGSTART_EVENT, QPoint(_mouseDownWinX, _mouseDownWinY));
@@ -2530,7 +2530,7 @@ bool KWQKHTMLPart::passSubframeEventToSubframe(NodeImpl::MouseEvent &event)
 
     switch ([_currentEvent type]) {
        case NSLeftMouseDown: {
-            NodeImpl *node = event.innerNode.handle();
+            NodeImpl *node = event.innerNode.get();
             if (!node) {
                 return false;
             }
@@ -2797,10 +2797,11 @@ bool KWQKHTMLPart::sendContextMenuEvent(NSEvent *event)
     doc->prepareMouseEvent(false, xm, ym, &mev);
 
     bool swallowEvent = v->dispatchMouseEvent(EventImpl::CONTEXTMENU_EVENT,
-        mev.innerNode.handle(), true, 0, &qev, true, NodeImpl::MousePress);
+        mev.innerNode.get(), true, 0, &qev, true, NodeImpl::MousePress);
     if (!swallowEvent && !isPointInsideSelection(xm, ym) &&
-        ([_bridge selectWordBeforeMenuEvent] || [_bridge isEditable] || mev.innerNode.handle()->isContentEditable())) {
-        selectClosestWordFromMouseEvent(&qev, mev.innerNode, xm, ym);
+        ([_bridge selectWordBeforeMenuEvent] || [_bridge isEditable] || mev.innerNode->isContentEditable())) {
+        DOM::Node node(mev.innerNode.get());
+        selectClosestWordFromMouseEvent(&qev, node, xm, ym);
     }
 
     ASSERT(_currentEvent == event);