Index: Source/core/html/HTMLAnchorElement.cpp |
diff --git a/Source/core/html/HTMLAnchorElement.cpp b/Source/core/html/HTMLAnchorElement.cpp |
index 777e94ad8c543206bf59dc9f7affbba86a98cc4d..08806bc29a44ce5191a315b972796de6b1b9c831 100644 |
--- a/Source/core/html/HTMLAnchorElement.cpp |
+++ b/Source/core/html/HTMLAnchorElement.cpp |
@@ -109,8 +109,6 @@ using namespace HTMLNames; |
HTMLAnchorElement::HTMLAnchorElement(const QualifiedName& tagName, Document& document) |
: HTMLElement(tagName, document) |
- , m_hasRootEditableElementForSelectionOnMouseDown(false) |
- , m_wasShiftKeyDownOnMouseDown(false) |
, m_linkRelations(0) |
, m_cachedVisitedLinkHash(0) |
{ |
@@ -129,7 +127,6 @@ PassRefPtr<HTMLAnchorElement> HTMLAnchorElement::create(const QualifiedName& tag |
HTMLAnchorElement::~HTMLAnchorElement() |
{ |
- clearRootEditableElementForSelectionOnMouseDown(); |
} |
bool HTMLAnchorElement::supportsFocus() const |
@@ -194,7 +191,7 @@ static void appendServerMapMousePosition(StringBuilder& url, Event* event) |
void HTMLAnchorElement::defaultEventHandler(Event* event) |
{ |
if (isLink()) { |
- if (focused() && isEnterKeyKeydownEvent(event) && treatLinkAsLiveForEventType(NonMouseEvent)) { |
+ if (focused() && isEnterKeyKeydownEvent(event) && isLiveLink()) { |
event->setDefaultHandled(); |
dispatchSimulatedClick(event); |
return; |
@@ -202,25 +199,11 @@ void HTMLAnchorElement::defaultEventHandler(Event* event) |
prefetchEventHandler()->handleEvent(event); |
- if (isLinkClick(event) && treatLinkAsLiveForEventType(eventType(event))) { |
+ if (isLinkClick(event) && isLiveLink()) { |
handleClick(event); |
prefetchEventHandler()->reset(); |
return; |
} |
- |
- if (rendererIsEditable()) { |
- // This keeps track of the editable block that the selection was in (if it was in one) just before the link was clicked |
- // for the LiveWhenNotFocused editable link behavior |
- if (event->type() == EventTypeNames::mousedown && event->isMouseEvent() && toMouseEvent(event)->button() != RightButton && document().frame()) { |
- setRootEditableElementForSelectionOnMouseDown(document().frame()->selection().rootEditableElement()); |
- m_wasShiftKeyDownOnMouseDown = toMouseEvent(event)->shiftKey(); |
- } else if (event->type() == EventTypeNames::mouseover) { |
- // These are cleared on mouseover and not mouseout because their values are needed for drag events, |
- // but drag events happen after mouse out events. |
- clearRootEditableElementForSelectionOnMouseDown(); |
- m_wasShiftKeyDownOnMouseDown = false; |
- } |
- } |
} |
HTMLElement::defaultEventHandler(event); |
@@ -228,32 +211,8 @@ void HTMLAnchorElement::defaultEventHandler(Event* event) |
void HTMLAnchorElement::setActive(bool down) |
{ |
- if (rendererIsEditable()) { |
- EditableLinkBehavior editableLinkBehavior = EditableLinkDefaultBehavior; |
- if (Settings* settings = document().settings()) |
- editableLinkBehavior = settings->editableLinkBehavior(); |
- |
- switch (editableLinkBehavior) { |
- default: |
- case EditableLinkDefaultBehavior: |
- case EditableLinkAlwaysLive: |
- break; |
- |
- case EditableLinkNeverLive: |
- return; |
- |
- // Don't set the link to be active if the current selection is in the same editable block as |
- // this link |
- case EditableLinkLiveWhenNotFocused: |
- if (down && document().frame() && document().frame()->selection().rootEditableElement() == rootEditableElement()) |
- return; |
- break; |
- |
- case EditableLinkOnlyLiveWithShiftKey: |
- return; |
- } |
- |
- } |
+ if (rendererIsEditable()) |
+ return; |
ContainerNode::setActive(down); |
} |
@@ -392,7 +351,7 @@ String HTMLAnchorElement::text() |
bool HTMLAnchorElement::isLiveLink() const |
{ |
- return isLink() && treatLinkAsLiveForEventType(m_wasShiftKeyDownOnMouseDown ? MouseEventWithShiftKey : MouseEventWithoutShiftKey); |
+ return isLink() && !rendererIsEditable(); |
} |
void HTMLAnchorElement::sendPings(const KURL& destinationURL) |
@@ -445,43 +404,6 @@ void HTMLAnchorElement::handleClick(Event* event) |
} |
} |
-HTMLAnchorElement::EventType HTMLAnchorElement::eventType(Event* event) |
-{ |
- if (!event->isMouseEvent()) |
- return NonMouseEvent; |
- return toMouseEvent(event)->shiftKey() ? MouseEventWithShiftKey : MouseEventWithoutShiftKey; |
-} |
- |
-bool HTMLAnchorElement::treatLinkAsLiveForEventType(EventType eventType) const |
-{ |
- if (!rendererIsEditable()) |
- return true; |
- |
- Settings* settings = document().settings(); |
- if (!settings) |
- return true; |
- |
- switch (settings->editableLinkBehavior()) { |
- case EditableLinkDefaultBehavior: |
- case EditableLinkAlwaysLive: |
- return true; |
- |
- case EditableLinkNeverLive: |
- return false; |
- |
- // If the selection prior to clicking on this link resided in the same editable block as this link, |
- // and the shift key isn't pressed, we don't want to follow the link. |
- case EditableLinkLiveWhenNotFocused: |
- return eventType == MouseEventWithShiftKey || (eventType == MouseEventWithoutShiftKey && rootEditableElementForSelectionOnMouseDown() != rootEditableElement()); |
- |
- case EditableLinkOnlyLiveWithShiftKey: |
- return eventType == MouseEventWithShiftKey; |
- } |
- |
- ASSERT_NOT_REACHED(); |
- return false; |
-} |
- |
bool isEnterKeyKeydownEvent(Event* event) |
{ |
return event->type() == EventTypeNames::keydown && event->isKeyboardEvent() && toKeyboardEvent(event)->keyIdentifier() == "Enter"; |
@@ -497,40 +419,6 @@ bool HTMLAnchorElement::willRespondToMouseClickEvents() |
return isLink() || HTMLElement::willRespondToMouseClickEvents(); |
} |
-typedef HashMap<const HTMLAnchorElement*, RefPtr<Element> > RootEditableElementMap; |
- |
-static RootEditableElementMap& rootEditableElementMap() |
-{ |
- DEFINE_STATIC_LOCAL(RootEditableElementMap, map, ()); |
- return map; |
-} |
- |
-Element* HTMLAnchorElement::rootEditableElementForSelectionOnMouseDown() const |
-{ |
- if (!m_hasRootEditableElementForSelectionOnMouseDown) |
- return 0; |
- return rootEditableElementMap().get(this); |
-} |
- |
-void HTMLAnchorElement::clearRootEditableElementForSelectionOnMouseDown() |
-{ |
- if (!m_hasRootEditableElementForSelectionOnMouseDown) |
- return; |
- rootEditableElementMap().remove(this); |
- m_hasRootEditableElementForSelectionOnMouseDown = false; |
-} |
- |
-void HTMLAnchorElement::setRootEditableElementForSelectionOnMouseDown(Element* element) |
-{ |
- if (!element) { |
- clearRootEditableElementForSelectionOnMouseDown(); |
- return; |
- } |
- |
- rootEditableElementMap().set(this, element); |
- m_hasRootEditableElementForSelectionOnMouseDown = true; |
-} |
- |
HTMLAnchorElement::PrefetchEventHandler* HTMLAnchorElement::prefetchEventHandler() |
{ |
if (!m_prefetchEventHandler) |