[GTK] It should process MouseMoved events when the parent window is not active
authorcsaavedra@igalia.com <csaavedra@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 6 Jul 2017 13:35:02 +0000 (13:35 +0000)
committercsaavedra@igalia.com <csaavedra@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 6 Jul 2017 13:35:02 +0000 (13:35 +0000)
https://bugs.webkit.org/show_bug.cgi?id=116691

Reviewed by Michael Catanzaro.

From reading the comments in the related code, only in Safari it
is desired that MouseMoved events are not processed when the
parent window is not active. In other ports, in particular those
targeting Linux, these events should be processed for consistency
with other browsers.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::setCursor):
* UIProcess/mac/PageClientImpl.mm:
(WebKit::PageClientImpl::setCursor):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::handleMouseEvent):
(WebKit::WebPage::mouseEvent):  No need to always pass a boolean
parameter that is only checked for one type of event. Do the check
internally in handleMouseEvent() only when needed and only in Cocoa.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@219195 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/WebPageProxy.cpp
Source/WebKit2/UIProcess/mac/PageClientImpl.mm
Source/WebKit2/WebProcess/WebPage/WebPage.cpp

index b0dc0bd..cb3aee4 100644 (file)
@@ -1,3 +1,26 @@
+2017-07-06  Claudio Saavedra  <csaavedra@igalia.com>
+
+        [GTK] It should process MouseMoved events when the parent window is not active
+        https://bugs.webkit.org/show_bug.cgi?id=116691
+
+        Reviewed by Michael Catanzaro.
+
+        From reading the comments in the related code, only in Safari it
+        is desired that MouseMoved events are not processed when the
+        parent window is not active. In other ports, in particular those
+        targeting Linux, these events should be processed for consistency
+        with other browsers.
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::setCursor):
+        * UIProcess/mac/PageClientImpl.mm:
+        (WebKit::PageClientImpl::setCursor):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::handleMouseEvent):
+        (WebKit::WebPage::mouseEvent):  No need to always pass a boolean
+        parameter that is only checked for one type of event. Do the check
+        internally in handleMouseEvent() only when needed and only in Cocoa.
+
 2017-07-05  Don Olmstead  <don.olmstead@sony.com>
 
         [WTF] Move SoftLinking.h into WTF
index f1186aa..ac9edf0 100644 (file)
@@ -4842,10 +4842,7 @@ void WebPageProxy::setToolTip(const String& toolTip)
 
 void WebPageProxy::setCursor(const WebCore::Cursor& cursor)
 {
-    // The Web process may have asked to change the cursor when the view was in an active window, but
-    // if it is no longer in a window or the window is not active, then the cursor should not change.
-    if (m_pageClient.isViewWindowActive())
-        m_pageClient.setCursor(cursor);
+    m_pageClient.setCursor(cursor);
 }
 
 void WebPageProxy::setCursorHiddenUntilMouseMoves(bool hiddenUntilMouseMoves)
index 76d29c9..3b14d9c 100644 (file)
@@ -290,6 +290,11 @@ void PageClientImpl::setCursor(const WebCore::Cursor& cursor)
 {
     // FIXME: Would be nice to share this code with WebKit1's WebChromeClient.
 
+    // The Web process may have asked to change the cursor when the view was in an active window, but
+    // if it is no longer in a window or the window is not active, then the cursor should not change.
+    if (!isViewWindowActive())
+        return;
+
     if ([NSApp _cursorRectCursor])
         return;
 
index 1f90de4..d5ce3f1 100644 (file)
@@ -2281,7 +2281,7 @@ void WebPage::contextMenuForKeyEvent()
 }
 #endif
 
-static bool handleMouseEvent(const WebMouseEvent& mouseEvent, WebPage* page, bool onlyUpdateScrollbars)
+static bool handleMouseEvent(const WebMouseEvent& mouseEvent, WebPage* page)
 {
     Frame& frame = page->corePage()->mainFrame();
     if (!frame.view())
@@ -2307,8 +2307,15 @@ static bool handleMouseEvent(const WebMouseEvent& mouseEvent, WebPage* page, boo
             return page->corePage()->userInputBridge().handleMouseReleaseEvent(platformMouseEvent);
 
         case PlatformEvent::MouseMoved:
-            if (onlyUpdateScrollbars)
+#if PLATFORM(COCOA)
+            // We need to do a full, normal hit test during this mouse event if the page is active or if a mouse
+            // button is currently pressed. It is possible that neither of those things will be true since on
+            // Lion when legacy scrollbars are enabled, WebKit receives mouse events all the time. If it is one
+            // of those cases where the page is not active and the mouse is not pressed, then we can fire a more
+            // efficient scrollbars-only version of the event.
+            if (!(page->corePage()->focusController().isActive() || (mouseEvent.button() != WebMouseEvent::NoButton)))
                 return page->corePage()->userInputBridge().handleMouseMoveOnScrollbarEvent(platformMouseEvent);
+#endif
             return page->corePage()->userInputBridge().handleMouseMoveEvent(platformMouseEvent);
 
         case PlatformEvent::MouseForceChanged:
@@ -2356,14 +2363,7 @@ void WebPage::mouseEvent(const WebMouseEvent& mouseEvent)
 
     if (!handled) {
         CurrentEvent currentEvent(mouseEvent);
-
-        // We need to do a full, normal hit test during this mouse event if the page is active or if a mouse
-        // button is currently pressed. It is possible that neither of those things will be true since on
-        // Lion when legacy scrollbars are enabled, WebKit receives mouse events all the time. If it is one
-        // of those cases where the page is not active and the mouse is not pressed, then we can fire a more
-        // efficient scrollbars-only version of the event.
-        bool onlyUpdateScrollbars = !(m_page->focusController().isActive() || (mouseEvent.button() != WebMouseEvent::NoButton));
-        handled = handleMouseEvent(mouseEvent, this, onlyUpdateScrollbars);
+        handled = handleMouseEvent(mouseEvent, this);
     }
 
     send(Messages::WebPageProxy::DidReceiveEvent(static_cast<uint32_t>(mouseEvent.type()), handled));