Title: [175832] trunk/Source/WebKit/mac
Revision
175832
Author
bda...@apple.com
Date
2014-11-10 14:36:21 -0800 (Mon, 10 Nov 2014)

Log Message

WK1: Support default actions for editable text
https://bugs.webkit.org/show_bug.cgi?id=138580
-and corresponding-
rdar://problem/18877497

Reviewed by Tim Horton.

New menu type, and new action type for paste. 

* WebView/WebActionMenuController.mm:
(-[WebActionMenuController isMenuForTextContent]):
(-[WebActionMenuController willOpenMenu:withEvent:]):
(-[WebActionMenuController _defaultMenuItemsForEditableText:]):
(-[WebActionMenuController _paste:]):
(-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]):
(-[WebActionMenuController _defaultMenuItemsForHitTestResult:]):
* WebView/WebUIDelegatePrivate.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/mac/ChangeLog (175831 => 175832)


--- trunk/Source/WebKit/mac/ChangeLog	2014-11-10 22:12:01 UTC (rev 175831)
+++ trunk/Source/WebKit/mac/ChangeLog	2014-11-10 22:36:21 UTC (rev 175832)
@@ -1,5 +1,25 @@
 2014-11-10  Beth Dakin  <bda...@apple.com>
 
+        WK1: Support default actions for editable text
+        https://bugs.webkit.org/show_bug.cgi?id=138580
+        -and corresponding-
+        rdar://problem/18877497
+
+        Reviewed by Tim Horton.
+
+        New menu type, and new action type for paste. 
+
+        * WebView/WebActionMenuController.mm:
+        (-[WebActionMenuController isMenuForTextContent]):
+        (-[WebActionMenuController willOpenMenu:withEvent:]):
+        (-[WebActionMenuController _defaultMenuItemsForEditableText:]):
+        (-[WebActionMenuController _paste:]):
+        (-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]):
+        (-[WebActionMenuController _defaultMenuItemsForHitTestResult:]):
+        * WebView/WebUIDelegatePrivate.h:
+
+2014-11-10  Beth Dakin  <bda...@apple.com>
+
         WK1: Text is getting selected even when an action menu fails to invoke
         https://bugs.webkit.org/show_bug.cgi?id=138576
         -and corresponding-

Modified: trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm (175831 => 175832)


--- trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm	2014-11-10 22:12:01 UTC (rev 175831)
+++ trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm	2014-11-10 22:36:21 UTC (rev 175832)
@@ -126,12 +126,17 @@
         [actionMenu addItem:item];
 }
 
+- (BOOL)isMenuForTextContent
+{
+    return _type == WebActionMenuReadOnlyText || _type == WebActionMenuEditableText;
+}
+
 - (void)willOpenMenu:(NSMenu *)menu withEvent:(NSEvent *)event
 {
     if (menu != _webView.actionMenu)
         return;
 
-    if (_type != WebActionMenuReadOnlyText) {
+    if (![self isMenuForTextContent]) {
         [[_webView _selectedOrMainFrame] _clearSelection];
         return;
     }
@@ -259,6 +264,15 @@
     return @[ copyTextItem.get(), lookupTextItem.get() ];
 }
 
+- (NSArray *)_defaultMenuItemsForEditableText:(WebElementDictionary *)hitTestResult
+{
+    RetainPtr<NSMenuItem> copyTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagCopyText withHitTestResult:hitTestResult];
+    RetainPtr<NSMenuItem> lookupTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagLookupText withHitTestResult:hitTestResult];
+    RetainPtr<NSMenuItem> pasteItem = [self _createActionMenuItemForTag:WebActionMenuItemTagPaste withHitTestResult:hitTestResult];
+
+    return @[ copyTextItem.get(), lookupTextItem.get(), pasteItem.get() ];
+}
+
 - (void)_copySelection:(id)sender
 {
     [_webView _executeCoreCommandByName:@"copy" value:nil];
@@ -283,6 +297,11 @@
     WKShowWordDefinitionWindow(popupInfo.attributedString.get(), textBaselineOrigin, popupInfo.options.get());
 }
 
+- (void)_paste:(id)sender
+{
+    [_webView _executeCoreCommandByName:@"paste" value:nil];
+}
+
 - (void)_selectLookupText
 {
     NSDictionary *options = nil;
@@ -391,6 +410,12 @@
         image = [NSImage imageNamed:@"NSActionMenuLookup"];
         break;
 
+    case WebActionMenuItemTagPaste:
+        selector = @selector(_paste:);
+        title = @"Paste";
+        image = [NSImage imageNamed:@"NSActionMenuPaste"];
+        break;
+
     default:
         ASSERT_NOT_REACHED();
         return nil;
@@ -419,6 +444,11 @@
 
     Node* node = _hitTestResult.innerNode();
     if (node && node->isTextNode()) {
+        if (_hitTestResult.isContentEditable()) {
+            _type = WebActionMenuEditableText;
+            return [self _defaultMenuItemsForEditableText:hitTestResult];
+        }
+
         _type = WebActionMenuReadOnlyText;
         return [self _defaultMenuItemsForText:hitTestResult];
     }

Modified: trunk/Source/WebKit/mac/WebView/WebUIDelegatePrivate.h (175831 => 175832)


--- trunk/Source/WebKit/mac/WebView/WebUIDelegatePrivate.h	2014-11-10 22:12:01 UTC (rev 175831)
+++ trunk/Source/WebKit/mac/WebView/WebUIDelegatePrivate.h	2014-11-10 22:36:21 UTC (rev 175832)
@@ -118,13 +118,15 @@
     WebActionMenuItemTagPreviewLink,
     WebActionMenuItemTagAddLinkToSafariReadingList,
     WebActionMenuItemTagCopyText,
-    WebActionMenuItemTagLookupText
+    WebActionMenuItemTagLookupText,
+    WebActionMenuItemTagPaste
 };
 
 typedef enum {
     WebActionMenuNone = 0,
     WebActionMenuLink,
-    WebActionMenuReadOnlyText
+    WebActionMenuReadOnlyText,
+    WebActionMenuEditableText
 } WebActionMenuType;
 
 // Message Sources.
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to