Title: [261229] trunk/Source/WebCore
- Revision
- 261229
- Author
- [email protected]
- Date
- 2020-05-06 08:30:16 -0700 (Wed, 06 May 2020)
Log Message
Factor EventHandler code that sends mouseEnteredContentArea/mouseExitedContentArea into its own function
https://bugs.webkit.org/show_bug.cgi?id=211494
Reviewed by Antti Koivisto.
mouseEnteredContentArea/mouseEnteredContentArea are used only to notify overlay scrollbars
of state changes. Factor the code that calls these functions into a separate EventHandler
function, and refactor it for clarity, now we know that both lastElementUnderMouse and elementUnderMouse
must belong to this EventHandler's Frame's Document.
* page/EventHandler.cpp:
(WebCore::EventHandler::updateMouseEventTargetNode):
(WebCore::EventHandler::notifyScrollableAreasOfMouseEnterExit):
* page/EventHandler.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (261228 => 261229)
--- trunk/Source/WebCore/ChangeLog 2020-05-06 15:00:50 UTC (rev 261228)
+++ trunk/Source/WebCore/ChangeLog 2020-05-06 15:30:16 UTC (rev 261229)
@@ -1,3 +1,20 @@
+2020-05-06 Simon Fraser <[email protected]>
+
+ Factor EventHandler code that sends mouseEnteredContentArea/mouseExitedContentArea into its own function
+ https://bugs.webkit.org/show_bug.cgi?id=211494
+
+ Reviewed by Antti Koivisto.
+
+ mouseEnteredContentArea/mouseEnteredContentArea are used only to notify overlay scrollbars
+ of state changes. Factor the code that calls these functions into a separate EventHandler
+ function, and refactor it for clarity, now we know that both lastElementUnderMouse and elementUnderMouse
+ must belong to this EventHandler's Frame's Document.
+
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::updateMouseEventTargetNode):
+ (WebCore::EventHandler::notifyScrollableAreasOfMouseEnterExit):
+ * page/EventHandler.h:
+
2020-05-06 Zalan Bujtas <[email protected]>
[LFC] BlockFormattingContext::computeHeightAndMargin should special case the table box
Modified: trunk/Source/WebCore/page/EventHandler.cpp (261228 => 261229)
--- trunk/Source/WebCore/page/EventHandler.cpp 2020-05-06 15:00:50 UTC (rev 261228)
+++ trunk/Source/WebCore/page/EventHandler.cpp 2020-05-06 15:30:16 UTC (rev 261229)
@@ -2548,42 +2548,8 @@
// Fire mouseout/mouseover if the mouse has shifted to a different node.
if (fireMouseOverOut == FireMouseOverOut::Yes) {
- auto scrollableAreaForLastNode = enclosingScrollableArea(m_lastElementUnderMouse.get());
- auto scrollableAreaForNodeUnderMouse = enclosingScrollableArea(m_elementUnderMouse.get());
- Page* page = m_frame.page();
+ notifyScrollableAreasOfMouseEnterExit(m_lastElementUnderMouse.get(), m_elementUnderMouse.get());
- if (m_lastElementUnderMouse && !m_elementUnderMouse) {
- // The mouse has moved between frames.
- if (Frame* frame = m_lastElementUnderMouse->document().frame()) {
- if (FrameView* frameView = frame->view())
- frameView->mouseExitedContentArea();
- }
- } else if (page && (scrollableAreaForLastNode && (!scrollableAreaForNodeUnderMouse || scrollableAreaForNodeUnderMouse != scrollableAreaForLastNode))) {
- // The mouse has moved between layers.
- if (Frame* frame = m_lastElementUnderMouse->document().frame()) {
- if (FrameView* frameView = frame->view()) {
- if (frameView->containsScrollableArea(scrollableAreaForLastNode))
- scrollableAreaForLastNode->mouseExitedContentArea();
- }
- }
- }
-
- if (m_elementUnderMouse && !m_lastElementUnderMouse) {
- // The mouse has moved between frames.
- if (Frame* frame = m_elementUnderMouse->document().frame()) {
- if (FrameView* frameView = frame->view())
- frameView->mouseEnteredContentArea();
- }
- } else if (page && (scrollableAreaForNodeUnderMouse && (!scrollableAreaForLastNode || scrollableAreaForNodeUnderMouse != scrollableAreaForLastNode))) {
- // The mouse has moved between layers.
- if (Frame* frame = m_elementUnderMouse->document().frame()) {
- if (FrameView* frameView = frame->view()) {
- if (frameView->containsScrollableArea(scrollableAreaForNodeUnderMouse))
- scrollableAreaForNodeUnderMouse->mouseEnteredContentArea();
- }
- }
- }
-
if (m_lastElementUnderMouse && &m_lastElementUnderMouse->document() != m_frame.document()) {
m_lastElementUnderMouse = nullptr;
m_lastScrollbarUnderMouse = nullptr;
@@ -2639,6 +2605,38 @@
}
}
+void EventHandler::notifyScrollableAreasOfMouseEnterExit(Element* lastElementUnderMouse, Element* elementUnderMouse)
+{
+ auto* frameView = m_frame.view();
+ if (!frameView)
+ return;
+
+ auto scrollableAreaForLastNode = enclosingScrollableArea(lastElementUnderMouse);
+ auto scrollableAreaForNodeUnderMouse = enclosingScrollableArea(elementUnderMouse);
+
+ if (!!lastElementUnderMouse != !!elementUnderMouse) {
+ if (elementUnderMouse) {
+ frameView->mouseEnteredContentArea();
+ if (scrollableAreaForNodeUnderMouse)
+ scrollableAreaForNodeUnderMouse->mouseEnteredContentArea();
+ } else {
+ if (scrollableAreaForLastNode)
+ scrollableAreaForLastNode->mouseExitedContentArea();
+ frameView->mouseExitedContentArea();
+ }
+ return;
+ }
+
+ if ((!scrollableAreaForLastNode && !scrollableAreaForNodeUnderMouse) || scrollableAreaForLastNode == scrollableAreaForNodeUnderMouse)
+ return;
+
+ if (scrollableAreaForLastNode)
+ scrollableAreaForLastNode->mouseExitedContentArea();
+
+ if (scrollableAreaForNodeUnderMouse)
+ scrollableAreaForNodeUnderMouse->mouseEnteredContentArea();
+}
+
static RefPtr<Element> findFirstMouseFocusableElementInComposedTree(Element& host)
{
ASSERT(host.shadowRoot());
Modified: trunk/Source/WebCore/page/EventHandler.h (261228 => 261229)
--- trunk/Source/WebCore/page/EventHandler.h 2020-05-06 15:00:50 UTC (rev 261228)
+++ trunk/Source/WebCore/page/EventHandler.h 2020-05-06 15:30:16 UTC (rev 261229)
@@ -403,6 +403,8 @@
enum class FireMouseOverOut { No, Yes };
void updateMouseEventTargetNode(Node*, const PlatformMouseEvent&, FireMouseOverOut);
+ void notifyScrollableAreasOfMouseEnterExit(Element* lastElementUnderMouse, Element* elementUnderMouse);
+
MouseEventWithHitTestResults prepareMouseEvent(const HitTestRequest&, const PlatformMouseEvent&);
enum class Cancelable { No, Yes };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes