OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights |
3 * reserved. | 3 * reserved. |
4 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 4 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
5 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) | 5 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) |
6 * | 6 * |
7 * Redistribution and use in source and binary forms, with or without | 7 * Redistribution and use in source and binary forms, with or without |
8 * modification, are permitted provided that the following conditions | 8 * modification, are permitted provided that the following conditions |
9 * are met: | 9 * are met: |
10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
(...skipping 1164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1175 newNodeUnderMouse = m_capturingMouseEventsNode.get(); | 1175 newNodeUnderMouse = m_capturingMouseEventsNode.get(); |
1176 } else { | 1176 } else { |
1177 // If the target node is a text node, dispatch on the parent node - | 1177 // If the target node is a text node, dispatch on the parent node - |
1178 // rdar://4196646 | 1178 // rdar://4196646 |
1179 if (newNodeUnderMouse && newNodeUnderMouse->isTextNode()) | 1179 if (newNodeUnderMouse && newNodeUnderMouse->isTextNode()) |
1180 newNodeUnderMouse = FlatTreeTraversal::parent(*newNodeUnderMouse); | 1180 newNodeUnderMouse = FlatTreeTraversal::parent(*newNodeUnderMouse); |
1181 } | 1181 } |
1182 return newNodeUnderMouse; | 1182 return newNodeUnderMouse; |
1183 } | 1183 } |
1184 | 1184 |
| 1185 bool EventHandler::isTouchPointerIdActiveOnFrame(int pointerId, |
| 1186 LocalFrame* frame) const { |
| 1187 DCHECK_EQ(m_frame, m_frame->localFrameRoot()); |
| 1188 return m_pointerEventManager->isTouchPointerIdActiveOnFrame(pointerId, frame); |
| 1189 } |
| 1190 |
| 1191 bool EventHandler::rootFrameTouchPointerActiveInCurrentFrame( |
| 1192 int pointerId) const { |
| 1193 return m_frame != m_frame->localFrameRoot() && |
| 1194 m_frame->localFrameRoot() |
| 1195 ->eventHandler() |
| 1196 .isTouchPointerIdActiveOnFrame(pointerId, m_frame); |
| 1197 } |
| 1198 |
1185 bool EventHandler::isPointerEventActive(int pointerId) { | 1199 bool EventHandler::isPointerEventActive(int pointerId) { |
1186 return m_pointerEventManager->isActive(pointerId); | 1200 return m_pointerEventManager->isActive(pointerId) || |
| 1201 rootFrameTouchPointerActiveInCurrentFrame(pointerId); |
1187 } | 1202 } |
1188 | 1203 |
1189 void EventHandler::setPointerCapture(int pointerId, EventTarget* target) { | 1204 void EventHandler::setPointerCapture(int pointerId, EventTarget* target) { |
1190 // TODO(crbug.com/591387): This functionality should be per page not per | 1205 // TODO(crbug.com/591387): This functionality should be per page not per |
1191 // frame. | 1206 // frame. |
1192 m_pointerEventManager->setPointerCapture(pointerId, target); | 1207 if (rootFrameTouchPointerActiveInCurrentFrame(pointerId)) { |
| 1208 m_frame->localFrameRoot()->eventHandler().setPointerCapture(pointerId, |
| 1209 target); |
| 1210 } else { |
| 1211 m_pointerEventManager->setPointerCapture(pointerId, target); |
| 1212 } |
1193 } | 1213 } |
1194 | 1214 |
1195 void EventHandler::releasePointerCapture(int pointerId, EventTarget* target) { | 1215 void EventHandler::releasePointerCapture(int pointerId, EventTarget* target) { |
1196 m_pointerEventManager->releasePointerCapture(pointerId, target); | 1216 if (rootFrameTouchPointerActiveInCurrentFrame(pointerId)) { |
| 1217 m_frame->localFrameRoot()->eventHandler().releasePointerCapture(pointerId, |
| 1218 target); |
| 1219 } else { |
| 1220 m_pointerEventManager->releasePointerCapture(pointerId, target); |
| 1221 } |
1197 } | 1222 } |
1198 | 1223 |
1199 bool EventHandler::hasPointerCapture(int pointerId, | 1224 bool EventHandler::hasPointerCapture(int pointerId, |
1200 const EventTarget* target) const { | 1225 const EventTarget* target) const { |
1201 return m_pointerEventManager->hasPointerCapture(pointerId, target); | 1226 if (rootFrameTouchPointerActiveInCurrentFrame(pointerId)) { |
| 1227 return m_frame->localFrameRoot()->eventHandler().hasPointerCapture( |
| 1228 pointerId, target); |
| 1229 } else { |
| 1230 return m_pointerEventManager->hasPointerCapture(pointerId, target); |
| 1231 } |
1202 } | 1232 } |
1203 | 1233 |
1204 bool EventHandler::hasProcessedPointerCapture(int pointerId, | 1234 bool EventHandler::hasProcessedPointerCapture(int pointerId, |
1205 const EventTarget* target) const { | 1235 const EventTarget* target) const { |
1206 return m_pointerEventManager->hasProcessedPointerCapture(pointerId, target); | 1236 return m_pointerEventManager->hasProcessedPointerCapture(pointerId, target); |
1207 } | 1237 } |
1208 | 1238 |
1209 void EventHandler::elementRemoved(EventTarget* target) { | 1239 void EventHandler::elementRemoved(EventTarget* target) { |
1210 m_pointerEventManager->elementRemoved(target); | 1240 m_pointerEventManager->elementRemoved(target); |
1211 } | 1241 } |
(...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2050 } | 2080 } |
2051 | 2081 |
2052 FrameHost* EventHandler::frameHost() const { | 2082 FrameHost* EventHandler::frameHost() const { |
2053 if (!m_frame->page()) | 2083 if (!m_frame->page()) |
2054 return nullptr; | 2084 return nullptr; |
2055 | 2085 |
2056 return &m_frame->page()->frameHost(); | 2086 return &m_frame->page()->frameHost(); |
2057 } | 2087 } |
2058 | 2088 |
2059 } // namespace blink | 2089 } // namespace blink |
OLD | NEW |