summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/webkit/WebCore/dom/Node.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/webkit/WebCore/dom/Node.cpp')
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Node.cpp186
1 files changed, 90 insertions, 96 deletions
diff --git a/src/3rdparty/webkit/WebCore/dom/Node.cpp b/src/3rdparty/webkit/WebCore/dom/Node.cpp
index cd554df..3ddf4c0 100644
--- a/src/3rdparty/webkit/WebCore/dom/Node.cpp
+++ b/src/3rdparty/webkit/WebCore/dom/Node.cpp
@@ -282,7 +282,7 @@ void Node::stopIgnoringLeaks()
#endif
}
-Node::StyleChange Node::diff( RenderStyle *s1, RenderStyle *s2 )
+Node::StyleChange Node::diff(const RenderStyle* s1, const RenderStyle* s2)
{
// FIXME: The behavior of this function is just totally wrong. It doesn't handle
// explicit inheritance of non-inherited properties and so you end up not re-resolving
@@ -302,6 +302,12 @@ Node::StyleChange Node::diff( RenderStyle *s1, RenderStyle *s2 )
else if (s1->inheritedNotEqual(s2))
ch = Inherit;
+ // For nth-child and other positional rules, treat styles as different if they have
+ // changed positionally in the DOM. This way subsequent sibling resolutions won't be confused
+ // by the wrong child index and evaluate to incorrect results.
+ if (ch == NoChange && s1->childIndex() != s2->childIndex())
+ ch = NoInherit;
+
// If the pseudoStyles have changed, we want any StyleChange that is not NoChange
// because setStyle will do the right thing with anything else.
if (ch == NoChange && s1->hasPseudoStyle(BEFORE)) {
@@ -1353,6 +1359,14 @@ bool Node::canStartSelection() const
{
if (isContentEditable())
return true;
+
+ if (renderer()) {
+ RenderStyle* style = renderer()->style();
+ // We allow selections to begin within an element that has -webkit-user-select: none set,
+ // but if the element is draggable then dragging should take priority over selection.
+ if (style->userDrag() == DRAG_ELEMENT && style->userSelect() == SELECT_NONE)
+ return false;
+ }
return parent() ? parent()->canStartSelection() : true;
}
@@ -2478,7 +2492,7 @@ bool Node::dispatchGenericEvent(PassRefPtr<Event> prpEvent)
event->setEventPhase(Event::CAPTURING_PHASE);
if (targetForWindowEvents) {
- event->setCurrentTarget(targetForWindowEvents->document()); // FIXME: targetForWindowEvents should be the event target.
+ event->setCurrentTarget(targetForWindowEvents);
targetForWindowEvents->handleEvent(event.get(), true);
if (event->propagationStopped())
goto doneDispatching;
@@ -2516,7 +2530,7 @@ bool Node::dispatchGenericEvent(PassRefPtr<Event> prpEvent)
goto doneDispatching;
}
if (targetForWindowEvents) {
- event->setCurrentTarget(targetForWindowEvents->document()); // FIXME: targetForWindowEvents should be the event target.
+ event->setCurrentTarget(targetForWindowEvents);
targetForWindowEvents->handleEvent(event.get(), false);
if (event->propagationStopped() || event->cancelBubble())
goto doneDispatching;
@@ -2619,7 +2633,7 @@ bool Node::dispatchMouseEvent(const PlatformMouseEvent& event, const AtomicStrin
return dispatchMouseEvent(eventType, button, detail,
contentsPos.x(), contentsPos.y(), event.globalX(), event.globalY(),
event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(),
- false, relatedTarget);
+ false, relatedTarget, 0);
}
void Node::dispatchSimulatedMouseEvent(const AtomicString& eventType,
@@ -3083,66 +3097,6 @@ void Node::setOnmousewheel(PassRefPtr<EventListener> eventListener)
setAttributeEventListener(eventNames().mousewheelEvent, eventListener);
}
-EventListener* Node::onbeforecut() const
-{
- return getAttributeEventListener(eventNames().beforecutEvent);
-}
-
-void Node::setOnbeforecut(PassRefPtr<EventListener> eventListener)
-{
- setAttributeEventListener(eventNames().beforecutEvent, eventListener);
-}
-
-EventListener* Node::oncut() const
-{
- return getAttributeEventListener(eventNames().cutEvent);
-}
-
-void Node::setOncut(PassRefPtr<EventListener> eventListener)
-{
- setAttributeEventListener(eventNames().cutEvent, eventListener);
-}
-
-EventListener* Node::onbeforecopy() const
-{
- return getAttributeEventListener(eventNames().beforecopyEvent);
-}
-
-void Node::setOnbeforecopy(PassRefPtr<EventListener> eventListener)
-{
- setAttributeEventListener(eventNames().beforecopyEvent, eventListener);
-}
-
-EventListener* Node::oncopy() const
-{
- return getAttributeEventListener(eventNames().copyEvent);
-}
-
-void Node::setOncopy(PassRefPtr<EventListener> eventListener)
-{
- setAttributeEventListener(eventNames().copyEvent, eventListener);
-}
-
-EventListener* Node::onbeforepaste() const
-{
- return getAttributeEventListener(eventNames().beforepasteEvent);
-}
-
-void Node::setOnbeforepaste(PassRefPtr<EventListener> eventListener)
-{
- setAttributeEventListener(eventNames().beforepasteEvent, eventListener);
-}
-
-EventListener* Node::onpaste() const
-{
- return getAttributeEventListener(eventNames().pasteEvent);
-}
-
-void Node::setOnpaste(PassRefPtr<EventListener> eventListener)
-{
- setAttributeEventListener(eventNames().pasteEvent, eventListener);
-}
-
EventListener* Node::ondragenter() const
{
return getAttributeEventListener(eventNames().dragenterEvent);
@@ -3213,84 +3167,124 @@ void Node::setOndragend(PassRefPtr<EventListener> eventListener)
setAttributeEventListener(eventNames().dragendEvent, eventListener);
}
-EventListener* Node::onreset() const
+EventListener* Node::onscroll() const
{
- return getAttributeEventListener(eventNames().resetEvent);
+ return getAttributeEventListener(eventNames().scrollEvent);
}
-void Node::setOnreset(PassRefPtr<EventListener> eventListener)
+void Node::setOnscroll(PassRefPtr<EventListener> eventListener)
{
- setAttributeEventListener(eventNames().resetEvent, eventListener);
+ setAttributeEventListener(eventNames().scrollEvent, eventListener);
}
-EventListener* Node::onresize() const
+EventListener* Node::onselect() const
{
- return getAttributeEventListener(eventNames().resizeEvent);
+ return getAttributeEventListener(eventNames().selectEvent);
}
-void Node::setOnresize(PassRefPtr<EventListener> eventListener)
+void Node::setOnselect(PassRefPtr<EventListener> eventListener)
{
- setAttributeEventListener(eventNames().resizeEvent, eventListener);
+ setAttributeEventListener(eventNames().selectEvent, eventListener);
}
-EventListener* Node::onscroll() const
+EventListener* Node::onsubmit() const
{
- return getAttributeEventListener(eventNames().scrollEvent);
+ return getAttributeEventListener(eventNames().submitEvent);
}
-void Node::setOnscroll(PassRefPtr<EventListener> eventListener)
+void Node::setOnsubmit(PassRefPtr<EventListener> eventListener)
{
- setAttributeEventListener(eventNames().scrollEvent, eventListener);
+ setAttributeEventListener(eventNames().submitEvent, eventListener);
}
-EventListener* Node::onsearch() const
+EventListener* Node::onbeforecut() const
{
- return getAttributeEventListener(eventNames().searchEvent);
+ return getAttributeEventListener(eventNames().beforecutEvent);
}
-void Node::setOnsearch(PassRefPtr<EventListener> eventListener)
+void Node::setOnbeforecut(PassRefPtr<EventListener> eventListener)
{
- setAttributeEventListener(eventNames().searchEvent, eventListener);
+ setAttributeEventListener(eventNames().beforecutEvent, eventListener);
}
-EventListener* Node::onselect() const
+EventListener* Node::oncut() const
{
- return getAttributeEventListener(eventNames().selectEvent);
+ return getAttributeEventListener(eventNames().cutEvent);
}
-void Node::setOnselect(PassRefPtr<EventListener> eventListener)
+void Node::setOncut(PassRefPtr<EventListener> eventListener)
{
- setAttributeEventListener(eventNames().selectEvent, eventListener);
+ setAttributeEventListener(eventNames().cutEvent, eventListener);
}
-EventListener* Node::onselectstart() const
+EventListener* Node::onbeforecopy() const
{
- return getAttributeEventListener(eventNames().selectstartEvent);
+ return getAttributeEventListener(eventNames().beforecopyEvent);
}
-void Node::setOnselectstart(PassRefPtr<EventListener> eventListener)
+void Node::setOnbeforecopy(PassRefPtr<EventListener> eventListener)
{
- setAttributeEventListener(eventNames().selectstartEvent, eventListener);
+ setAttributeEventListener(eventNames().beforecopyEvent, eventListener);
}
-EventListener* Node::onsubmit() const
+EventListener* Node::oncopy() const
{
- return getAttributeEventListener(eventNames().submitEvent);
+ return getAttributeEventListener(eventNames().copyEvent);
}
-void Node::setOnsubmit(PassRefPtr<EventListener> eventListener)
+void Node::setOncopy(PassRefPtr<EventListener> eventListener)
{
- setAttributeEventListener(eventNames().submitEvent, eventListener);
+ setAttributeEventListener(eventNames().copyEvent, eventListener);
+}
+
+EventListener* Node::onbeforepaste() const
+{
+ return getAttributeEventListener(eventNames().beforepasteEvent);
+}
+
+void Node::setOnbeforepaste(PassRefPtr<EventListener> eventListener)
+{
+ setAttributeEventListener(eventNames().beforepasteEvent, eventListener);
+}
+
+EventListener* Node::onpaste() const
+{
+ return getAttributeEventListener(eventNames().pasteEvent);
+}
+
+void Node::setOnpaste(PassRefPtr<EventListener> eventListener)
+{
+ setAttributeEventListener(eventNames().pasteEvent, eventListener);
+}
+
+EventListener* Node::onreset() const
+{
+ return getAttributeEventListener(eventNames().resetEvent);
+}
+
+void Node::setOnreset(PassRefPtr<EventListener> eventListener)
+{
+ setAttributeEventListener(eventNames().resetEvent, eventListener);
+}
+
+EventListener* Node::onsearch() const
+{
+ return getAttributeEventListener(eventNames().searchEvent);
+}
+
+void Node::setOnsearch(PassRefPtr<EventListener> eventListener)
+{
+ setAttributeEventListener(eventNames().searchEvent, eventListener);
}
-EventListener* Node::onunload() const
+EventListener* Node::onselectstart() const
{
- return getAttributeEventListener(eventNames().unloadEvent);
+ return getAttributeEventListener(eventNames().selectstartEvent);
}
-void Node::setOnunload(PassRefPtr<EventListener> eventListener)
+void Node::setOnselectstart(PassRefPtr<EventListener> eventListener)
{
- setAttributeEventListener(eventNames().unloadEvent, eventListener);
+ setAttributeEventListener(eventNames().selectstartEvent, eventListener);
}
} // namespace WebCore