Cursor doesn't change back to pointer when leaving the Safari window
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Apr 2014 06:11:22 +0000 (06:11 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Apr 2014 06:11:22 +0000 (06:11 +0000)
https://bugs.webkit.org/show_bug.cgi?id=132038

Reviewed by Alexey Proskuryakov.

Source/WebCore:
r147739 incorrectly added an early exit in EventHandler::selectCursor when hit test result didn't have
any node associated with it. Since we will hit this code when the cursor is outside of the WebView,
we still need to take the CURSOR_AUTO path as did the code before r147739.

No new test is added since this behavior can't be tested in DRT or WTR.

* page/EventHandler.cpp:
(WebCore::EventHandler::selectCursor):

Source/WebKit/mac:
Since the cursor type is now updated asynchronously after r147739,
[window windowNumber] != [NSWindow windowNumberAtPoint:[NSEvent mouseLocation] belowWindowWithWindowNumber:0]
evalutes to false depending on how fast cursor is moving.

Instead, check whether the NSWindow of the WebView is the key window or not since
key window appears to control the cursor style in Cocoa as far as I've tested:
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyWindow.html

* WebCoreSupport/WebChromeClient.mm:
(WebChromeClient::setCursor):

Source/WebKit2:
Since the cursor type is now updated asynchronously after r147739,
[window windowNumber] != [NSWindow windowNumberAtPoint:[NSEvent mouseLocation] belowWindowWithWindowNumber:0]
evalutes to false depending on how fast cursor is moving.

Instead, check whether the NSWindow of the WebView is the key window or not since
key window appears to control the cursor style in Cocoa as far as I've tested:
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyWindow.html

* UIProcess/mac/PageClientImpl.mm:
(WebKit::PageClientImpl::setCursor):

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

Source/WebCore/ChangeLog
Source/WebCore/page/EventHandler.cpp
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm
Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/mac/PageClientImpl.mm

index 2224c02a8c20c13a8d2c8734500cac45592abae5..5a5ff194f7bf50ac7d29a3874443288e6830f7cf 100644 (file)
@@ -1,3 +1,19 @@
+2014-04-22  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Cursor doesn't change back to pointer when leaving the Safari window
+        https://bugs.webkit.org/show_bug.cgi?id=132038
+
+        Reviewed by Alexey Proskuryakov.
+
+        r147739 incorrectly added an early exit in EventHandler::selectCursor when hit test result didn't have
+        any node associated with it. Since we will hit this code when the cursor is outside of the WebView,
+        we still need to take the CURSOR_AUTO path as did the code before r147739.
+
+        No new test is added since this behavior can't be tested in DRT or WTR.
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::selectCursor):
+
 2014-04-22  Zalan Bujtas  <zalan@apple.com>
 
         Do not paint border image when the border rect is empty.
index bbda67ed162794c8be433af026b52a61404d6ea4..76c0456bd7fd84f22344816560fc61ebb2b51ffb 100644 (file)
@@ -1311,10 +1311,7 @@ OptionalCursor EventHandler::selectCursor(const HitTestResult& result, bool shif
 #endif
 
     Node* node = result.targetNode();
-    if (!node)
-        return NoCursorChange;
-
-    auto renderer = node->renderer();
+    auto renderer = node ? node->renderer() : 0;
     RenderStyle* style = renderer ? &renderer->style() : nullptr;
     bool horizontalText = !style || style->isHorizontalWritingMode();
     const Cursor& iBeam = horizontalText ? iBeamCursor() : verticalTextCursor();
@@ -1386,7 +1383,7 @@ OptionalCursor EventHandler::selectCursor(const HitTestResult& result, bool shif
 
     switch (style ? style->cursor() : CURSOR_AUTO) {
     case CURSOR_AUTO: {
-        bool editable = node->hasEditableStyle();
+        bool editable = node && node->hasEditableStyle();
 
         if (useHandCursor(node, result.isOverLink(), shiftKey))
             return handCursor();
index 48d51d05d5974423087c6bf608c9c394068fc4f2..5a07ecf9dc31365c85574bbc68fb5169ea0ffb0f 100644 (file)
@@ -1,3 +1,21 @@
+2014-04-22  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Cursor doesn't change back to pointer when leaving the Safari window
+        https://bugs.webkit.org/show_bug.cgi?id=132038
+
+        Reviewed by Alexey Proskuryakov.
+
+        Since the cursor type is now updated asynchronously after r147739,
+        [window windowNumber] != [NSWindow windowNumberAtPoint:[NSEvent mouseLocation] belowWindowWithWindowNumber:0]
+        evalutes to false depending on how fast cursor is moving.
+
+        Instead, check whether the NSWindow of the WebView is the key window or not since
+        key window appears to control the cursor style in Cocoa as far as I've tested:
+        https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyWindow.html
+
+        * WebCoreSupport/WebChromeClient.mm:
+        (WebChromeClient::setCursor):
+
 2014-04-22  Commit Queue  <commit-queue@webkit.org>
 
         Unreviewed, rolling out r167674.
index 976b7cf1f504a2b0a99a59ec9106c607da5bdab9..641249bade0987efb69c10e6af2a5908b41733c2 100644 (file)
@@ -773,10 +773,7 @@ void WebChromeClient::setCursor(const WebCore::Cursor& cursor)
         return;
 
     NSWindow *window = [m_webView window];
-    if (!window)
-        return;
-
-    if ([window windowNumber] != [NSWindow windowNumberAtPoint:[NSEvent mouseLocation] belowWindowWithWindowNumber:0])
+    if (!window || ![window isKeyWindow])
         return;
 
     NSCursor *platformCursor = cursor.platformCursor();
index 92ea2d58a9bae3096972efdcda2c494bf46fee5d..37ec7e65b47dcfbac3a33a48e97818dc3e82489f 100644 (file)
@@ -1,3 +1,21 @@
+2014-04-22  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Cursor doesn't change back to pointer when leaving the Safari window
+        https://bugs.webkit.org/show_bug.cgi?id=132038
+
+        Reviewed by Alexey Proskuryakov.
+
+        Since the cursor type is now updated asynchronously after r147739,
+        [window windowNumber] != [NSWindow windowNumberAtPoint:[NSEvent mouseLocation] belowWindowWithWindowNumber:0]
+        evalutes to false depending on how fast cursor is moving.
+
+        Instead, check whether the NSWindow of the WebView is the key window or not since
+        key window appears to control the cursor style in Cocoa as far as I've tested:
+        https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyWindow.html
+
+        * UIProcess/mac/PageClientImpl.mm:
+        (WebKit::PageClientImpl::setCursor):
+
 2014-04-22  Yongjun Zhang  <yongjun_zhang@apple.com>
 
         Add SPI to expose provisional URL from Frame.
index 81c19c7f4c62687a54973b5e27865b12316177d1..9a1e75e1f8318b6861eddec09d28d87d4c38e47d 100644 (file)
@@ -324,10 +324,7 @@ void PageClientImpl::setCursor(const WebCore::Cursor& cursor)
         return;
 
     NSWindow *window = [m_wkView window];
-    if (!window)
-        return;
-
-    if ([window windowNumber] != [NSWindow windowNumberAtPoint:[NSEvent mouseLocation] belowWindowWithWindowNumber:0])
+    if (!window || ![window isKeyWindow])
         return;
 
     NSCursor *platformCursor = cursor.platformCursor();