Fix a bug where the context menu does not show in PDF documents if there is no
authortimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Apr 2011 18:52:52 +0000 (18:52 +0000)
committertimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Apr 2011 18:52:52 +0000 (18:52 +0000)
UI delegate or the UI delegate does not respond to the context menu selector.

https://webkit.org/b/57958

Reviewed by Darin Adler.

* WebView/WebView.mm:
(-[WebView _menuForElement:defaultItems:]): CallUIDelegate returns nil
if UIDelegate is nil or doesn't respond to the selector. So check that
here to distinguish between using defaultMenuItems or the delegate
really returning nil to say "no context menu".

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

Source/WebKit/mac/ChangeLog
Source/WebKit/mac/WebView/WebView.mm

index 0118777..51e5f82 100644 (file)
@@ -1,3 +1,18 @@
+2011-04-06  Timothy Hatcher  <timothy@apple.com>
+
+        Fix a bug where the context menu does not show in PDF documents if there is no
+        UI delegate or the UI delegate does not respond to the context menu selector.
+
+        https://webkit.org/b/57958
+
+        Reviewed by Darin Adler.
+
+        * WebView/WebView.mm:
+        (-[WebView _menuForElement:defaultItems:]): CallUIDelegate returns nil
+        if UIDelegate is nil or doesn't respond to the selector. So check that
+        here to distinguish between using defaultMenuItems or the delegate
+        really returning nil to say "no context menu".
+
 2011-04-11  Jer Noble  <jer.noble@apple.com>
 
         Unreviewed; roll out unintentional change to WebFullScreenController.mm.
index 35da9d6..450b103 100644 (file)
@@ -1297,10 +1297,16 @@ static bool fastDocumentTeardownEnabled()
 - (NSMenu *)_menuForElement:(NSDictionary *)element defaultItems:(NSArray *)items
 {
     NSArray *defaultMenuItems = [[WebDefaultUIDelegate sharedUIDelegate] webView:self contextMenuItemsForElement:element defaultMenuItems:items];
-
-    NSArray *menuItems = CallUIDelegate(self, @selector(webView:contextMenuItemsForElement:defaultMenuItems:), element, defaultMenuItems);
-    if (!menuItems)
-        return nil;
+    NSArray *menuItems = defaultMenuItems;
+
+    // CallUIDelegate returns nil if UIDelegate is nil or doesn't respond to the selector. So we need to check that here
+    // to distinguish between using defaultMenuItems or the delegate really returning nil to say "no context menu".
+    SEL selector = @selector(webView:contextMenuItemsForElement:defaultMenuItems:);
+    if (_private->UIDelegate && [_private->UIDelegate respondsToSelector:selector]) {
+        menuItems = CallUIDelegate(self, selector, element, defaultMenuItems);
+        if (!menuItems)
+            return nil;
+    }
 
     unsigned count = [menuItems count];
     if (!count)