REGRESSION (WebKit2) Need to support Learn button.
authorenrica@apple.com <enrica@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 2 May 2014 01:40:13 +0000 (01:40 +0000)
committerenrica@apple.com <enrica@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 2 May 2014 01:40:13 +0000 (01:40 +0000)
https://bugs.webkit.org/show_bug.cgi?id=132454
<rdar://problem/16778889>

Reviewed by Benjamin Poulain.

For traditional Chinese we support the ability to add shortcuts
for typing. This is done by pressing the Learn button on the system
menu. This patch adds the necessary code to canPerformAction to enable
the button when appropriate as well as the implementation of the action
itself.
It also adds a check for the Replace button not to be shown when the
selection only contains CJ characters.

* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView _addShortcut:]):
(-[WKContentView canPerformAction:withSender:]):

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

Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm

index bc50088..e36acf1 100644 (file)
@@ -1,3 +1,23 @@
+2014-05-01  Enrica Casucci  <enrica@apple.com>
+
+        REGRESSION (WebKit2) Need to support Learn button.
+        https://bugs.webkit.org/show_bug.cgi?id=132454
+        <rdar://problem/16778889>
+
+        Reviewed by Benjamin Poulain.
+
+        For traditional Chinese we support the ability to add shortcuts
+        for typing. This is done by pressing the Learn button on the system
+        menu. This patch adds the necessary code to canPerformAction to enable
+        the button when appropriate as well as the implementation of the action
+        itself.
+        It also adds a check for the Replace button not to be shown when the
+        selection only contains CJ characters.
+
+        * UIProcess/ios/WKContentViewInteraction.mm:
+        (-[WKContentView _addShortcut:]):
+        (-[WKContentView canPerformAction:withSender:]):
+
 2014-05-01  Benjamin Poulain  <bpoulain@apple.com>
 
         [iOS][WK2] Tweak the extended background exclusion for MobileSafari
index c96532e..370d937 100644 (file)
 #import "_WKFormDelegate.h"
 #import "_WKFormInputSession.h"
 #import <DataDetectorsUI/DDDetectionController.h>
+#import <TextInput/TI_NSStringExtras.h>
 #import <UIKit/_UIHighlightView.h>
 #import <UIKit/_UIWebHighlightLongPressGestureRecognizer.h>
 #import <UIKit/UIFont_Private.h>
 #import <UIKit/UIGestureRecognizer_Private.h>
 #import <UIKit/UIKeyboardImpl.h>
+#import <UIKit/UIKeyboardIntl.h>
 #import <UIKit/UILongPressGestureRecognizer_Private.h>
 #import <UIKit/UITapGestureRecognizer_Private.h>
 #import <UIKit/UITextInteractionAssistant_Private.h>
@@ -124,6 +126,7 @@ static const float tapAndHoldDelay  = 0.75;
 
 @interface UITextInteractionAssistant (StagingToRemove)
 - (void)scheduleReplacementsForText:(NSString *)text;
+- (void)showTextServiceFor:(NSString *)selectedTerm fromRect:(CGRect)presentationRect;
 @end
 
 @interface WKFormInputSession : NSObject <_WKFormInputSession>
@@ -848,7 +851,8 @@ static inline bool isSamePair(UIGestureRecognizer *a, UIGestureRecognizer *b, UI
 
 - (void)_addShortcut:(id)sender
 {
-    // FIXME: To be implemented.
+    if (_textSelectionAssistant && [_textSelectionAssistant respondsToSelector:@selector(showTextServiceFor:fromRect:)])
+        [_textSelectionAssistant showTextServiceFor:[self selectedText] fromRect:_page->editorState().selectionRects[0].rect()];
 }
 
 - (NSString *)selectedText
@@ -923,12 +927,25 @@ static inline bool isSamePair(UIGestureRecognizer *a, UIGestureRecognizer *b, UI
     if (action == @selector(_addShortcut:)) {
         if (_page->editorState().isInPasswordField || !(hasWebSelection || _page->editorState().selectionIsRange))
             return NO;
-        // FIXME: need to implement, returning NO always for now.
-        return NO;
+
+        NSString *selectedText = [self selectedText];
+        if (![selectedText length])
+            return NO;
+
+        if (!UIKeyboardEnabledInputModesAllowOneToManyShortcuts())
+            return NO;
+        if (![selectedText _containsCJScripts])
+            return NO;
+        return YES;
     }
 
-    if (action == @selector(_promptForReplace:))
-        return _page->editorState().selectionIsRange && _page->editorState().isReplaceAllowed && [[UIKeyboardImpl activeInstance] autocorrectSpellingEnabled];
+    if (action == @selector(_promptForReplace:)) {
+        if (!_page->editorState().selectionIsRange || !_page->editorState().isReplaceAllowed || ![[UIKeyboardImpl activeInstance] autocorrectSpellingEnabled])
+            return NO;
+        if ([[self selectedText] _containsCJScriptsOnly])
+            return NO;
+        return YES;
+    }
 
     if (action == @selector(select:)) {
         // Disable select in password fields so that you can't see word boundaries.