Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(325)

Side by Side Diff: WebCore/svg/SVGAElement.cpp

Issue 3366025: Merge 67246 - 2010-09-109 Peter Kasting <pkasting@google.com>... (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/517/
Patch Set: Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « WebCore/html/HTMLAnchorElement.cpp ('k') | WebCore/wml/WMLAElement.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org> 2 * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2007 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005, 2007 Rob Buis <buis@kde.org>
4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
5 * Copyright (C) 2010 Apple Inc. All rights reserved.
5 * 6 *
6 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
10 * 11 *
11 * This library is distributed in the hope that it will be useful, 12 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details. 15 * Library General Public License for more details.
(...skipping 11 matching lines...) Expand all
26 27
27 #include "Attr.h" 28 #include "Attr.h"
28 #include "Attribute.h" 29 #include "Attribute.h"
29 #include "CSSHelper.h" 30 #include "CSSHelper.h"
30 #include "Document.h" 31 #include "Document.h"
31 #include "EventHandler.h" 32 #include "EventHandler.h"
32 #include "EventNames.h" 33 #include "EventNames.h"
33 #include "Frame.h" 34 #include "Frame.h"
34 #include "FrameLoader.h" 35 #include "FrameLoader.h"
35 #include "FrameLoaderTypes.h" 36 #include "FrameLoaderTypes.h"
37 #include "HTMLAnchorElement.h"
36 #include "KeyboardEvent.h" 38 #include "KeyboardEvent.h"
37 #include "MouseEvent.h" 39 #include "MouseEvent.h"
38 #include "PlatformMouseEvent.h" 40 #include "PlatformMouseEvent.h"
39 #include "RenderSVGInline.h" 41 #include "RenderSVGInline.h"
40 #include "RenderSVGTransformableContainer.h" 42 #include "RenderSVGTransformableContainer.h"
41 #include "ResourceRequest.h" 43 #include "ResourceRequest.h"
42 #include "SVGNames.h" 44 #include "SVGNames.h"
43 #include "SVGSMILElement.h" 45 #include "SVGSMILElement.h"
44 #include "XLinkNames.h" 46 #include "XLinkNames.h"
45 47
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 } 120 }
119 121
120 RenderObject* SVGAElement::createRenderer(RenderArena* arena, RenderStyle*) 122 RenderObject* SVGAElement::createRenderer(RenderArena* arena, RenderStyle*)
121 { 123 {
122 if (static_cast<SVGElement*>(parent())->isTextContent()) 124 if (static_cast<SVGElement*>(parent())->isTextContent())
123 return new (arena) RenderSVGInline(this); 125 return new (arena) RenderSVGInline(this);
124 126
125 return new (arena) RenderSVGTransformableContainer(this); 127 return new (arena) RenderSVGTransformableContainer(this);
126 } 128 }
127 129
128 void SVGAElement::defaultEventHandler(Event* evt) 130 void SVGAElement::defaultEventHandler(Event* event)
129 { 131 {
130 if (isLink() && (evt->type() == eventNames().clickEvent || (evt->type() == e ventNames().keydownEvent && focused()))) { 132 if (isLink()) {
131 MouseEvent* e = 0; 133 if (focused() && isEnterKeyKeydownEvent(event)) {
132 if (evt->type() == eventNames().clickEvent && evt->isMouseEvent()) 134 event->setDefaultHandled();
133 e = static_cast<MouseEvent*>(evt); 135 dispatchSimulatedClick(event);
134
135 KeyboardEvent* k = 0;
136 if (evt->type() == eventNames().keydownEvent && evt->isKeyboardEvent())
137 k = static_cast<KeyboardEvent*>(evt);
138
139 if (e && e->button() == RightButton) {
140 SVGStyledTransformableElement::defaultEventHandler(evt);
141 return; 136 return;
142 } 137 }
143
144 if (k) {
145 if (k->keyIdentifier() != "Enter") {
146 SVGStyledTransformableElement::defaultEventHandler(evt);
147 return;
148 }
149 evt->setDefaultHandled();
150 dispatchSimulatedClick(evt);
151 return;
152 }
153
154 String target = this->target();
155 if (e && e->button() == MiddleButton)
156 target = "_blank";
157 else if (target.isEmpty()) // if target is empty, default to "_self" or use xlink:target if set
158 target = (getAttribute(XLinkNames::showAttr) == "new") ? "_blank" : "_self";
159 138
160 if (!evt->defaultPrevented()) { 139 if (isLinkClick(event)) {
161 String url = deprecatedParseURL(href()); 140 String url = deprecatedParseURL(href());
141
162 #if ENABLE(SVG_ANIMATION) 142 #if ENABLE(SVG_ANIMATION)
163 if (url.startsWith("#")) { 143 if (url[0] == '#') {
164 Element* targetElement = document()->getElementById(url.substrin g(1)); 144 Element* targetElement = document()->getElementById(url.substrin g(1));
165 if (SVGSMILElement::isSMILElement(targetElement)) { 145 if (SVGSMILElement::isSMILElement(targetElement)) {
166 SVGSMILElement* timed = static_cast<SVGSMILElement*>(targetE lement); 146 static_cast<SVGSMILElement*>(targetElement)->beginByLinkActi vation();
167 timed->beginByLinkActivation(); 147 event->setDefaultHandled();
168 evt->setDefaultHandled();
169 SVGStyledTransformableElement::defaultEventHandler(evt);
170 return; 148 return;
171 } 149 }
172 } 150 }
173 #endif 151 #endif
174 if (document()->frame()) 152
175 document()->frame()->loader()->urlSelected(document()->completeU RL(url), target, evt, false, false, true, SendReferrer); 153 // FIXME: Why does the SVG anchor element have this special logic
154 // for middle click that the HTML anchor element does not have?
155 // Making a middle click open a link in a new window or tab is
156 // properly handled at the client level, not inside WebKit; this
157 // code should be deleted.
158 String target = isMiddleMouseButtonEvent(event) ? "_blank" : this->t arget();
159
160 // FIXME: It's not clear why setting target to "_self" is ever
161 // helpful.
162 if (target.isEmpty())
163 target = (getAttribute(XLinkNames::showAttr) == "new") ? "_blank " : "_self";
164
165 handleLinkClick(event, document(), url, target);
166 return;
176 } 167 }
177
178 evt->setDefaultHandled();
179 } 168 }
180 169
181 SVGStyledTransformableElement::defaultEventHandler(evt); 170 SVGStyledTransformableElement::defaultEventHandler(event);
182 } 171 }
183 172
184 bool SVGAElement::supportsFocus() const 173 bool SVGAElement::supportsFocus() const
185 { 174 {
186 if (isContentEditable()) 175 if (isContentEditable())
187 return SVGStyledTransformableElement::supportsFocus(); 176 return SVGStyledTransformableElement::supportsFocus();
188 return true; 177 return true;
189 } 178 }
190 179
191 bool SVGAElement::isFocusable() const 180 bool SVGAElement::isFocusable() const
(...skipping 28 matching lines...) Expand all
220 return false; 209 return false;
221 if (parent() && parent()->isSVGElement()) 210 if (parent() && parent()->isSVGElement())
222 return parent()->childShouldCreateRenderer(child); 211 return parent()->childShouldCreateRenderer(child);
223 212
224 return SVGElement::childShouldCreateRenderer(child); 213 return SVGElement::childShouldCreateRenderer(child);
225 } 214 }
226 215
227 } // namespace WebCore 216 } // namespace WebCore
228 217
229 #endif // ENABLE(SVG) 218 #endif // ENABLE(SVG)
OLDNEW
« no previous file with comments | « WebCore/html/HTMLAnchorElement.cpp ('k') | WebCore/wml/WMLAElement.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698