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

Side by Side Diff: Source/WebCore/page/EventHandler.cpp

Issue 14096013: Implement select element list box with shadow DOM. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@shadowselect
Patch Set: Created 7 years, 8 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed.
3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org)
4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies)
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 bool swallowEvent = false; 667 bool swallowEvent = false;
668 m_mousePressed = true; 668 m_mousePressed = true;
669 m_selectionInitiationState = HaveNotStartedSelection; 669 m_selectionInitiationState = HaveNotStartedSelection;
670 670
671 if (event.event().clickCount() == 2) 671 if (event.event().clickCount() == 2)
672 swallowEvent = handleMousePressEventDoubleClick(event); 672 swallowEvent = handleMousePressEventDoubleClick(event);
673 else if (event.event().clickCount() >= 3) 673 else if (event.event().clickCount() >= 3)
674 swallowEvent = handleMousePressEventTripleClick(event); 674 swallowEvent = handleMousePressEventTripleClick(event);
675 else 675 else
676 swallowEvent = handleMousePressEventSingleClick(event); 676 swallowEvent = handleMousePressEventSingleClick(event);
677 677
678 m_mouseDownMayStartAutoscroll = m_mouseDownMayStartSelect 678 m_mouseDownMayStartAutoscroll = m_mouseDownMayStartSelect
679 || (m_mousePressNode && m_mousePressNode->renderBox() && m_mousePressNod e->renderBox()->canBeProgramaticallyScrolled()); 679 || (m_mousePressNode && m_mousePressNode->renderBox() && m_mousePressNod e->renderBox()->canBeProgramaticallyScrolled());
680 680
681 return swallowEvent; 681 return swallowEvent;
682 } 682 }
683 683
684 bool EventHandler::handleMouseDraggedEvent(const MouseEventWithHitTestResults& e vent) 684 bool EventHandler::handleMouseDraggedEvent(const MouseEventWithHitTestResults& e vent)
685 { 685 {
686 if (!m_mousePressed) 686 if (!m_mousePressed)
687 return false; 687 return false;
688 688
689 if (handleDrag(event, ShouldCheckDragHysteresis)) 689 if (handleDrag(event, ShouldCheckDragHysteresis))
690 return true; 690 return true;
691 691
692 Node* targetNode = event.targetNode(); 692 Node* targetNode = event.targetNode();
693 if (event.event().button() != LeftButton || !targetNode) 693 if (event.event().button() != LeftButton || !targetNode)
694 return false; 694 return false;
695 695
696 RenderObject* renderer = targetNode->renderer();
697 if (!renderer) {
698 Node* parent = EventPathWalker::parent(targetNode);
699 if (!parent)
700 return false;
701
702 renderer = parent->renderer();
703 if (!renderer || !renderer->isListBox())
704 return false;
705 }
706
707 m_mouseDownMayStartDrag = false; 696 m_mouseDownMayStartDrag = false;
708 697
709 if (m_mouseDownMayStartAutoscroll && !panScrollInProgress()) {
710 m_autoscrollController->startAutoscrollForSelection(renderer);
711 m_mouseDownMayStartAutoscroll = false;
712 }
713
714 if (m_selectionInitiationState != ExtendedSelection) { 698 if (m_selectionInitiationState != ExtendedSelection) {
715 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::DisallowShadowContent); 699 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::DisallowShadowContent);
716 HitTestResult result(m_mouseDownPos); 700 HitTestResult result(m_mouseDownPos);
717 m_frame->document()->renderView()->hitTest(request, result); 701 m_frame->document()->renderView()->hitTest(request, result);
718 702
719 updateSelectionForMouseDrag(result); 703 updateSelectionForMouseDrag(result);
720 } 704 }
721 updateSelectionForMouseDrag(event.hitTestResult()); 705 updateSelectionForMouseDrag(event.hitTestResult());
722 return true; 706 return true;
723 } 707 }
(...skipping 934 matching lines...) Expand 10 before | Expand all | Expand 10 after
1658 } 1642 }
1659 } 1643 }
1660 } 1644 }
1661 1645
1662 m_lastMouseMoveEventSubframe = newSubframe; 1646 m_lastMouseMoveEventSubframe = newSubframe;
1663 1647
1664 if (swallowEvent) 1648 if (swallowEvent)
1665 return true; 1649 return true;
1666 1650
1667 swallowEvent = !dispatchMouseEvent(eventNames().mousemoveEvent, mev.targetNo de(), false, 0, mouseEvent, true); 1651 swallowEvent = !dispatchMouseEvent(eventNames().mousemoveEvent, mev.targetNo de(), false, 0, mouseEvent, true);
1652
1653 RenderObject* renderer = targetNode->renderer();
1654 if (!renderer) {
1655 Node* parent = EventPathWalker::parent(targetNode);
1656 if (!parent)
1657 return false;
1658
1659 renderer = parent->renderer();
1660 if (!renderer || !renderer->isListBox())
1661 return false;
1662 }
1663
1664 if (m_mouseDownMayStartAutoscroll && !panScrollInProgress()) {
1665 m_autoscrollController->startAutoscrollForSelection(renderer);
1666 m_mouseDownMayStartAutoscroll = false;
1667 }
1668 if (!swallowEvent) 1668 if (!swallowEvent)
1669 swallowEvent = handleMouseDraggedEvent(mev); 1669 swallowEvent = handleMouseDraggedEvent(mev);
1670 1670
1671 return swallowEvent; 1671 return swallowEvent;
1672 } 1672 }
1673 1673
1674 void EventHandler::invalidateClick() 1674 void EventHandler::invalidateClick()
1675 { 1675 {
1676 m_clickCount = 0; 1676 m_clickCount = 0;
1677 m_clickNode = 0; 1677 m_clickNode = 0;
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
1989 void EventHandler::setCapturingMouseEventsNode(PassRefPtr<Node> n) 1989 void EventHandler::setCapturingMouseEventsNode(PassRefPtr<Node> n)
1990 { 1990 {
1991 m_capturingMouseEventsNode = n; 1991 m_capturingMouseEventsNode = n;
1992 m_eventHandlerWillResetCapturingMouseEventsNode = false; 1992 m_eventHandlerWillResetCapturingMouseEventsNode = false;
1993 } 1993 }
1994 1994
1995 MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques t& request, const PlatformMouseEvent& mev) 1995 MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques t& request, const PlatformMouseEvent& mev)
1996 { 1996 {
1997 ASSERT(m_frame); 1997 ASSERT(m_frame);
1998 ASSERT(m_frame->document()); 1998 ASSERT(m_frame->document());
1999 1999
2000 return m_frame->document()->prepareMouseEvent(request, documentPointForWindo wPoint(m_frame, mev.position()), mev); 2000 return m_frame->document()->prepareMouseEvent(request, documentPointForWindo wPoint(m_frame, mev.position()), mev);
2001 } 2001 }
2002 2002
2003 #if ENABLE(SVG) 2003 #if ENABLE(SVG)
2004 static inline SVGElementInstance* instanceAssociatedWithShadowTreeElement(Node* referenceNode) 2004 static inline SVGElementInstance* instanceAssociatedWithShadowTreeElement(Node* referenceNode)
2005 { 2005 {
2006 if (!referenceNode || !referenceNode->isSVGElement()) 2006 if (!referenceNode || !referenceNode->isSVGElement())
2007 return 0; 2007 return 0;
2008 2008
2009 ShadowRoot* shadowRoot = referenceNode->containingShadowRoot(); 2009 ShadowRoot* shadowRoot = referenceNode->containingShadowRoot();
(...skipping 1988 matching lines...) Expand 10 before | Expand all | Expand 10 after
3998 unsigned EventHandler::accessKeyModifiers() 3998 unsigned EventHandler::accessKeyModifiers()
3999 { 3999 {
4000 #if OS(DARWIN) 4000 #if OS(DARWIN)
4001 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; 4001 return PlatformEvent::CtrlKey | PlatformEvent::AltKey;
4002 #else 4002 #else
4003 return PlatformEvent::AltKey; 4003 return PlatformEvent::AltKey;
4004 #endif 4004 #endif
4005 } 4005 }
4006 4006
4007 } // namespace WebCore 4007 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698