Title: [183077] trunk/Source/WebCore
Revision
183077
Author
bfulg...@apple.com
Date
2015-04-21 15:01:52 -0700 (Tue, 21 Apr 2015)

Log Message

Context menu doesn't account for selection semantics
https://bugs.webkit.org/show_bug.cgi?id=143958
<rdar://problem/19735706>

Reviewed by Tim Horton.

Before using the default word-only selection, check with the
lookup service to see if we can get a semantically appropriate
selection.

* page/EventHandler.cpp:
(WebCore::EventHandler::selectClosestWordFromHitTestResultBasedOnLookup):
(WebCore::EventHandler::selectClosestWordFromHitTestResult):
* page/EventHandler.h:
* page/mac/EventHandlerMac.mm:
(WebCore::EventHandler::selectClosestWordFromHitTestResultBasedOnLookup):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (183076 => 183077)


--- trunk/Source/WebCore/ChangeLog	2015-04-21 20:55:45 UTC (rev 183076)
+++ trunk/Source/WebCore/ChangeLog	2015-04-21 22:01:52 UTC (rev 183077)
@@ -1,3 +1,22 @@
+2015-04-21  Brent Fulgham  <bfulg...@apple.com>
+
+        Context menu doesn't account for selection semantics
+        https://bugs.webkit.org/show_bug.cgi?id=143958
+        <rdar://problem/19735706>
+
+        Reviewed by Tim Horton.
+
+        Before using the default word-only selection, check with the
+        lookup service to see if we can get a semantically appropriate
+        selection.
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::selectClosestWordFromHitTestResultBasedOnLookup):
+        (WebCore::EventHandler::selectClosestWordFromHitTestResult):
+        * page/EventHandler.h:
+        * page/mac/EventHandlerMac.mm:
+        (WebCore::EventHandler::selectClosestWordFromHitTestResultBasedOnLookup):
+
 2015-04-21  Anders Carlsson  <ander...@apple.com>
 
         Get rid of an unneeded function from LoaderNSURLExtras.mm

Modified: trunk/Source/WebCore/page/EventHandler.cpp (183076 => 183077)


--- trunk/Source/WebCore/page/EventHandler.cpp	2015-04-21 20:55:45 UTC (rev 183076)
+++ trunk/Source/WebCore/page/EventHandler.cpp	2015-04-21 22:01:52 UTC (rev 183077)
@@ -569,21 +569,31 @@
     return true;
 }
 
+#if !PLATFORM(MAC)
+VisibleSelection EventHandler::selectClosestWordFromHitTestResultBasedOnLookup(const HitTestResult&)
+{
+    return VisibleSelection();
+}
+#endif
+
 void EventHandler::selectClosestWordFromHitTestResult(const HitTestResult& result, AppendTrailingWhitespace appendTrailingWhitespace)
 {
     Node* targetNode = result.targetNode();
     VisibleSelection newSelection;
 
     if (targetNode && targetNode->renderer()) {
-        VisiblePosition pos(targetNode->renderer()->positionForPoint(result.localPoint(), nullptr));
-        if (pos.isNotNull()) {
-            newSelection = VisibleSelection(pos);
-            newSelection.expandUsingGranularity(WordGranularity);
+        newSelection = selectClosestWordFromHitTestResultBasedOnLookup(result);
+        if (newSelection.isNone()) {
+            VisiblePosition pos(targetNode->renderer()->positionForPoint(result.localPoint(), nullptr));
+            if (pos.isNotNull()) {
+                newSelection = VisibleSelection(pos);
+                newSelection.expandUsingGranularity(WordGranularity);
+            }
+
+            if (appendTrailingWhitespace == ShouldAppendTrailingWhitespace && newSelection.isRange())
+                newSelection.appendTrailingWhitespace();
         }
 
-        if (appendTrailingWhitespace == ShouldAppendTrailingWhitespace && newSelection.isRange())
-            newSelection.appendTrailingWhitespace();
-
         updateSelectionForMouseDownDispatchingSelectStart(targetNode, expandSelectionToRespectSelectOnMouseDown(*targetNode, newSelection), WordGranularity);
     }
 }

Modified: trunk/Source/WebCore/page/EventHandler.h (183076 => 183077)


--- trunk/Source/WebCore/page/EventHandler.h	2015-04-21 20:55:45 UTC (rev 183076)
+++ trunk/Source/WebCore/page/EventHandler.h	2015-04-21 22:01:52 UTC (rev 183077)
@@ -325,6 +325,7 @@
     bool eventActivatedView(const PlatformMouseEvent&) const;
     bool updateSelectionForMouseDownDispatchingSelectStart(Node*, const VisibleSelection&, TextGranularity);
     void selectClosestWordFromHitTestResult(const HitTestResult&, AppendTrailingWhitespace);
+    VisibleSelection selectClosestWordFromHitTestResultBasedOnLookup(const HitTestResult&);
     void selectClosestWordFromMouseEvent(const MouseEventWithHitTestResults&);
     void selectClosestWordOrLinkFromMouseEvent(const MouseEventWithHitTestResults&);
 

Modified: trunk/Source/WebCore/page/mac/EventHandlerMac.mm (183076 => 183077)


--- trunk/Source/WebCore/page/mac/EventHandlerMac.mm	2015-04-21 20:55:45 UTC (rev 183076)
+++ trunk/Source/WebCore/page/mac/EventHandlerMac.mm	2015-04-21 22:01:52 UTC (rev 183077)
@@ -31,6 +31,7 @@
 #include "Chrome.h"
 #include "ChromeClient.h"
 #include "DataTransfer.h"
+#include "DictionaryLookup.h"
 #include "DragController.h"
 #include "EventNames.h"
 #include "FocusController.h"
@@ -45,6 +46,7 @@
 #include "Page.h"
 #include "Pasteboard.h"
 #include "PlatformEventFactoryMac.h"
+#include "Range.h"
 #include "RenderLayer.h"
 #include "RenderListBox.h"
 #include "RenderWidget.h"
@@ -1007,4 +1009,13 @@
 #endif
 }
 
+VisibleSelection EventHandler::selectClosestWordFromHitTestResultBasedOnLookup(const HitTestResult& result)
+{
+    NSDictionary *options = nil;
+    if (RefPtr<Range> range = rangeForDictionaryLookupAtHitTestResult(result, &options))
+        return VisibleSelection(range.get());
+
+    return VisibleSelection();
 }
+
+}
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to