summaryrefslogtreecommitdiffstats
path: root/WebCore/svg/SVGElement.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/svg/SVGElement.cpp')
-rw-r--r--WebCore/svg/SVGElement.cpp31
1 files changed, 21 insertions, 10 deletions
diff --git a/WebCore/svg/SVGElement.cpp b/WebCore/svg/SVGElement.cpp
index 9ecfe7d..7f54dd0 100644
--- a/WebCore/svg/SVGElement.cpp
+++ b/WebCore/svg/SVGElement.cpp
@@ -25,6 +25,7 @@
#if ENABLE(SVG)
#include "SVGElement.h"
+#include "CSSCursorImageValue.h"
#include "DOMImplementation.h"
#include "Document.h"
#include "Event.h"
@@ -33,7 +34,9 @@
#include "FrameView.h"
#include "HTMLNames.h"
#include "PlatformString.h"
+#include "RegisteredEventListener.h"
#include "RenderObject.h"
+#include "SVGCursorElement.h"
#include "SVGDocumentExtensions.h"
#include "SVGElementInstance.h"
#include "SVGNames.h"
@@ -42,7 +45,6 @@
#include "SVGURIReference.h"
#include "SVGUseElement.h"
#include "XMLNames.h"
-#include "RegisteredEventListener.h"
namespace WebCore {
@@ -51,11 +53,17 @@ using namespace HTMLNames;
SVGElement::SVGElement(const QualifiedName& tagName, Document* doc)
: StyledElement(tagName, doc)
, m_shadowParent(0)
+ , m_cursorElement(0)
+ , m_cursorImageValue(0)
{
}
SVGElement::~SVGElement()
{
+ if (m_cursorElement)
+ m_cursorElement->removeClient(this);
+ if (m_cursorImageValue)
+ m_cursorImageValue->removeReferencedElement(this);
}
bool SVGElement::isSupported(StringImpl* feature, StringImpl* version) const
@@ -180,13 +188,12 @@ static bool hasLoadListener(SVGElement* node)
{
Node* currentNode = node;
while (currentNode && currentNode->isElementNode()) {
- RegisteredEventListenerList *list = static_cast<Element*>(currentNode)->localEventListeners();
- if (list) {
- RegisteredEventListenerList::Iterator end = list->end();
- for (RegisteredEventListenerList::Iterator it = list->begin(); it != end; ++it)
- if ((*it)->eventType() == eventNames().loadEvent &&
- (*it)->useCapture() == true || currentNode == node)
- return true;
+ const RegisteredEventListenerVector& listeners = static_cast<Element*>(currentNode)->eventListeners();
+ size_t size = listeners.size();
+ for (size_t i = 0; i < size; ++i) {
+ const RegisteredEventListener& r = *listeners[i];
+ if (r.eventType() == eventNames().loadEvent && r.useCapture() || currentNode == node)
+ return true;
}
currentNode = currentNode->parentNode();
}
@@ -204,8 +211,7 @@ void SVGElement::sendSVGLoadEventIfPossible(bool sendParentLoadEvents)
if (hasLoadListener(currentTarget.get())) {
RefPtr<Event> event = Event::create(eventNames().loadEvent, false, false);
event->setTarget(currentTarget);
- ExceptionCode ignored = 0;
- currentTarget->dispatchGenericEvent(event.release(), ignored);
+ currentTarget->dispatchGenericEvent(event.release());
}
currentTarget = (parent && parent->isSVGElement()) ? static_pointer_cast<SVGElement>(parent) : 0;
}
@@ -281,6 +287,11 @@ void SVGElement::setSynchronizedSVGAttributes(bool value) const
m_areSVGAttributesValid = value;
}
+ContainerNode* SVGElement::eventParentNode()
+{
+ return m_shadowParent ? m_shadowParent : StyledElement::eventParentNode();
+}
+
}
#endif // ENABLE(SVG)