Changeset 163406 in webkit
- Timestamp:
- Feb 4, 2014 3:24:00 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r163402 r163406 1 2014-02-04 Simon Fraser <simon.fraser@apple.com> 2 3 Add WK2 event handling path for iOS, and make Mac and iOS code more similar 4 https://bugs.webkit.org/show_bug.cgi?id=128199 5 6 Reviewed by Sam Weinig. 7 8 EventHandlerIOS need some changes for WebKit2, where we have no native 9 widget. Merge those changes from EventHandlerMac. 10 11 Make a few drive-by changes to match EventHandlerMac behavior. 12 13 Clean up EventHandlerMac, removing trailing whitespace and fixing 14 the odd comment. 15 16 * page/ios/EventHandlerIOS.mm: 17 (WebCore::EventHandler::passWidgetMouseDownEventToWidget): 18 (WebCore::EventHandler::passMouseDownEventToWidget): 19 (WebCore::EventHandler::passSubframeEventToSubframe): 20 (WebCore::EventHandler::passWheelEventToWidget): 21 (WebCore::EventHandler::mouseDown): 22 (WebCore::EventHandler::mouseMoved): 23 (WebCore::frameHasPlatformWidget): 24 (WebCore::EventHandler::passMousePressEventToSubframe): 25 (WebCore::EventHandler::passMouseMoveEventToSubframe): 26 (WebCore::EventHandler::passMouseReleaseEventToSubframe): 27 * page/mac/EventHandlerMac.mm: 28 (WebCore::EventHandler::passWidgetMouseDownEventToWidget): 29 (WebCore::EventHandler::passMouseDownEventToWidget): 30 (WebCore::findViewInSubviews): 31 (WebCore::EventHandler::eventLoopHandleMouseUp): 32 (WebCore::EventHandler::passWheelEventToWidget): 33 (WebCore::EventHandler::mouseMoved): 34 1 35 2014-02-04 Benjamin Poulain <bpoulain@apple.com> 2 36 -
trunk/Source/WebCore/page/ios/EventHandlerIOS.mm
r161227 r163406 170 170 { 171 171 // Figure out which view to send the event to. 172 RenderObject*target = event.targetNode() ? event.targetNode()->renderer() : nullptr;172 auto target = event.targetNode() ? event.targetNode()->renderer() : nullptr; 173 173 if (!target || !target->isWidget()) 174 174 return false; … … 216 216 return true; 217 217 } 218 219 // In WebKit2 we will never have a native widget. Just return early and let the regular event handler machinery take care of 220 // dispatching the event. 221 if (!widget->platformWidget()) 222 return false; 218 223 219 224 BEGIN_BLOCK_OBJC_EXCEPTIONS; … … 252 257 ASSERT(!m_sendingEventToSubview); 253 258 m_sendingEventToSubview = true; 254 [view mouseDown:currentEvent()]; 259 260 { 261 WidgetHierarchyUpdatesSuspensionScope suspendWidgetHierarchyUpdates; 262 [view mouseDown:currentEvent()]; 263 } 264 255 265 m_sendingEventToSubview = false; 256 266 … … 354 364 if (!node) 355 365 return false; 356 RenderObject*renderer = node->renderer();366 auto renderer = node->renderer(); 357 367 if (!renderer || !renderer->isWidget()) 358 368 return false; … … 392 402 BEGIN_BLOCK_OBJC_EXCEPTIONS; 393 403 404 if (!widget) 405 return false; 406 407 NSView* nodeView = widget->platformWidget(); 408 if (!nodeView) { 409 // WK2 code path. No wheel events on iOS anyway. 410 return false; 411 } 412 394 413 if (currentEvent().type != WebEventScrollWheel || m_sendingEventToSubview || !widget) 395 414 return false; 396 415 397 NSView* nodeView = widget->platformWidget();398 416 ASSERT(nodeView); 399 417 ASSERT([nodeView superview]); … … 422 440 BEGIN_BLOCK_OBJC_EXCEPTIONS; 423 441 442 // FIXME: Why is this here? EventHandler::handleMousePressEvent() calls it. 424 443 m_frame.loader().resetMultipleFormSubmissionProtection(); 425 444 … … 464 483 CurrentEventScope scope(event); 465 484 event.wasHandled = mouseMoved(currentPlatformMouseEvent()); 485 486 // FIXME: Why is this here? 466 487 m_frame.document()->updateStyleIfNeeded(); 467 488 WKStopObservingContentChanges(); … … 470 491 } 471 492 493 static bool frameHasPlatformWidget(const Frame& frame) 494 { 495 if (FrameView* frameView = frame.view()) { 496 if (frameView->platformWidget()) 497 return true; 498 } 499 500 return false; 501 } 502 472 503 bool EventHandler::passMousePressEventToSubframe(MouseEventWithHitTestResults& mev, Frame* subframe) 473 504 { 474 return passSubframeEventToSubframe(mev, subframe); 505 // WebKit1 code path. 506 if (frameHasPlatformWidget(m_frame)) 507 return passSubframeEventToSubframe(mev, subframe); 508 509 // WebKit2 code path. 510 subframe->eventHandler().handleMousePressEvent(mev.event()); 511 return true; 475 512 } 476 513 477 514 bool EventHandler::passMouseMoveEventToSubframe(MouseEventWithHitTestResults& mev, Frame* subframe, HitTestResult* hoveredNode) 478 515 { 479 return passSubframeEventToSubframe(mev, subframe, hoveredNode); 516 // WebKit1 code path. 517 if (frameHasPlatformWidget(m_frame)) 518 return passSubframeEventToSubframe(mev, subframe, hoveredNode); 519 520 subframe->eventHandler().handleMouseMoveEvent(mev.event(), hoveredNode); 521 return true; 480 522 } 481 523 482 524 bool EventHandler::passMouseReleaseEventToSubframe(MouseEventWithHitTestResults& mev, Frame* subframe) 483 525 { 484 return passSubframeEventToSubframe(mev, subframe); 526 // WebKit1 code path. 527 if (frameHasPlatformWidget(m_frame)) 528 return passSubframeEventToSubframe(mev, subframe); 529 530 // WebKit2 code path. 531 subframe->eventHandler().handleMouseReleaseEvent(mev.event()); 532 return true; 485 533 } 486 534 -
trunk/Source/WebCore/page/mac/EventHandlerMac.mm
r156860 r163406 139 139 { 140 140 // Figure out which view to send the event to. 141 auto target = event.targetNode() ? event.targetNode()->renderer() : 0;141 auto target = event.targetNode() ? event.targetNode()->renderer() : nullptr; 142 142 if (!target || !target->isWidget()) 143 143 return false; 144 145 // Double-click events don't exist in Cocoa. Since passWidgetMouseDownEventToWidget will144 145 // Double-click events don't exist in Cocoa. Since passWidgetMouseDownEventToWidget() will 146 146 // just pass currentEvent down to the widget, we don't want to call it for events that 147 // don't correspond to Cocoa events. 147 // don't correspond to Cocoa events. The mousedown/ups will have already been passed on as 148 148 // part of the pressed/released handling. 149 149 return passMouseDownEventToWidget(toRenderWidget(target)->widget()); … … 177 177 // FIXME: This function always returns true. It should be changed either to return 178 178 // false in some cases or the return value should be removed. 179 179 180 180 RefPtr<Widget> widget = pWidget; 181 181 … … 185 185 } 186 186 187 // In WebKit2 we will never have a n NSView. Just return early and let the regular event handler machinery take care of187 // In WebKit2 we will never have a native widget. Just return early and let the regular event handler machinery take care of 188 188 // dispatching the event. 189 189 if (!widget->platformWidget()) … … 191 191 192 192 BEGIN_BLOCK_OBJC_EXCEPTIONS; 193 193 194 194 NSView *nodeView = widget->platformWidget(); 195 195 ASSERT([nodeView superview]); … … 199 199 return true; 200 200 } 201 201 202 202 Page* page = m_frame.page(); 203 203 if (!page) … … 213 213 // We need to "defer loading" while tracking the mouse, because tearing down the 214 214 // page while an AppKit control is tracking the mouse can cause a crash. 215 215 216 216 // FIXME: In theory, WebCore now tolerates tear-down while tracking the 217 217 // mouse. We should confirm that, and then remove the deferrsLoading 218 218 // hack entirely. 219 219 220 220 bool wasDeferringLoading = page->defersLoading(); 221 221 if (!wasDeferringLoading) … … 238 238 m_mouseDownView = view; 239 239 m_mouseDownWasInSubframe = false; 240 240 241 241 // Many AppKit widgets run their own event loops and consume events while the mouse is down. 242 242 // When they finish, currentEvent is the mouseUp that they exited on. We need to update … … 251 251 return true; 252 252 } 253 253 254 254 // Note that this does the same kind of check as [target isDescendantOf:superview]. 255 255 // There are two differences: This is a lot slower because it has to walk the whole … … 266 266 } 267 267 END_BLOCK_OBJC_EXCEPTIONS; 268 268 269 269 return false; 270 270 } … … 308 308 } 309 309 #endif // ENABLE(DRAG_SUPPORT) 310 310 311 311 bool EventHandler::eventLoopHandleMouseUp(const MouseEventWithHitTestResults&) 312 312 { … … 314 314 if (!view) 315 315 return false; 316 316 317 317 if (!m_mouseDownWasInSubframe) { 318 318 ASSERT(!m_sendingEventToSubview); … … 441 441 ASSERT([nodeView superview]); 442 442 NSView *view = [nodeView hitTest:[[nodeView superview] convertPoint:[currentNSEvent() locationInWindow] fromView:nil]]; 443 if (!view) 443 if (!view) { 444 444 // We probably hit the border of a RenderWidget 445 445 return false; 446 } 446 447 447 448 ASSERT(!m_sendingEventToSubview); … … 455 456 m_sendingEventToSubview = false; 456 457 return true; 457 458 458 459 END_BLOCK_OBJC_EXCEPTIONS; 459 460 return false; … … 592 593 if (!m_frame.view() || m_mousePressed || m_sendingEventToSubview) 593 594 return; 594 595 595 596 BEGIN_BLOCK_OBJC_EXCEPTIONS; 596 597 CurrentEventScope scope(event);
Note: See TracChangeset
for help on using the changeset viewer.