Reviewed by Eric.
authortomernic <tomernic@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Mar 2006 21:17:51 +0000 (21:17 +0000)
committertomernic <tomernic@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Mar 2006 21:17:51 +0000 (21:17 +0000)
        - fix <rdar://problem/4380465> repro crash when unsuccessfully attempting to import image from Services menu

        * WebView/WebDataSource.m:
        (-[WebDataSource _imageElementWithImageResource:]): Quietly do nothing if passed nil.
        (-[WebDataSource _documentFragmentWithImageResource:]): Ditto.

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

WebKit/ChangeLog
WebKit/DefaultDelegates/WebDefaultContextMenuDelegate.m

index 39cb623c1508a9d789c690e977ef5ae62cf0432d..f2f9eb2f17c7e40a57c002464c6d2f02025be941 100644 (file)
@@ -8,6 +8,23 @@
         (-[WebDataSource _imageElementWithImageResource:]): Quietly do nothing if passed nil.
         (-[WebDataSource _documentFragmentWithImageResource:]): Ditto.
 
+2006-03-22  Tim Omernick  <timo@apple.com>
+
+        Reviewed by John Sullivan.
+
+        <rdar://problem/4439752> TinyMCE: "Search in Google" context menu is active but fails to work when selection is active
+        in textarea field.
+
+        * DefaultDelegates/WebDefaultContextMenuDelegate.m:
+        (-[WebDefaultUIDelegate menuItemWithTag:target:representedObject:]):
+        Added a representedObject parameter, which is set on the newly created menu item.
+        (-[WebDefaultUIDelegate contextMenuItemsForElement:defaultMenuItems:]):
+        Instead of setting the representedObject on each menu item after creating them all, pass the element to
+        -menuItemWithTag:target:representedObject:.
+        (-[WebDefaultUIDelegate editingContextMenuItemsForElement:defaultMenuItems:]):
+        ditto.  This fixes 4439752 because this method failed to set the representedObject on the menu items as
+        -contextMenuItemsForElement:defaultMenuItems: did.
+
 2006-03-22  Tim Omernick  <timo@apple.com>
 
         Reviewed by Kevin Decker.
index 8bb888fd7fc844440b34731e6256864d034419fe..56de3b8c1445efdae3c24a5347cf914159baaaf9 100644 (file)
@@ -65,11 +65,12 @@ static NSString *localizedMenuTitleFromAppKit(NSString *key, NSString *comment)
     return result;
 }
 
-- (NSMenuItem *)menuItemWithTag:(int)tag target:(id)target
+- (NSMenuItem *)menuItemWithTag:(int)tag target:(id)target representedObject:(id)representedObject
 {
     NSMenuItem *menuItem = [[[NSMenuItem alloc] init] autorelease];
     [menuItem setTag:tag];
     [menuItem setTarget:target]; // can be nil
+    [menuItem setRepresentedObject:representedObject];
     
     NSString *title = nil;
     SEL action = NULL;
@@ -199,10 +200,10 @@ static NSString *localizedMenuTitleFromAppKit(NSString *key, NSString *comment)
     
     if (linkURL) {
         if([WebView _canHandleRequest:[NSURLRequest requestWithURL:linkURL]]) {
-            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagOpenLinkInNewWindow target:self]];
-            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagDownloadLinkToDisk target:self]];
+            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagOpenLinkInNewWindow target:self representedObject:element]];
+            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagDownloadLinkToDisk target:self representedObject:element]];
         }
-        [menuItems addObject:[self menuItemWithTag:WebMenuItemTagCopyLinkToClipboard target:self]];
+        [menuItems addObject:[self menuItemWithTag:WebMenuItemTagCopyLinkToClipboard target:self representedObject:element]];
     }
     
     WebFrame *webFrame = [element objectForKey:WebElementFrameKey];
@@ -212,10 +213,10 @@ static NSString *localizedMenuTitleFromAppKit(NSString *key, NSString *comment)
         if (linkURL) {
             [menuItems addObject:[NSMenuItem separatorItem]];
         }
-        [menuItems addObject:[self menuItemWithTag:WebMenuItemTagOpenImageInNewWindow target:self]];
-        [menuItems addObject:[self menuItemWithTag:WebMenuItemTagDownloadImageToDisk target:self]];
+        [menuItems addObject:[self menuItemWithTag:WebMenuItemTagOpenImageInNewWindow target:self representedObject:element]];
+        [menuItems addObject:[self menuItemWithTag:WebMenuItemTagDownloadImageToDisk target:self representedObject:element]];
         if ([imageURL isFileURL] || [[webFrame dataSource] _fileWrapperForURL:imageURL]) {
-            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagCopyImageToClipboard target:self]];
+            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagCopyImageToClipboard target:self representedObject:element]];
         }
     }
     
@@ -227,8 +228,8 @@ static NSString *localizedMenuTitleFromAppKit(NSString *key, NSString *comment)
             // The Spotlight and Google items are implemented in WebView, and require that the
             // current document view conforms to WebDocumentText
             ASSERT([[[webFrame frameView] documentView] conformsToProtocol:@protocol(WebDocumentText)]);
-            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagSearchInSpotlight target:nil]];
-            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagSearchWeb target:nil]];
+            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagSearchInSpotlight target:nil representedObject:element]];
+            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagSearchWeb target:nil representedObject:element]];
             [menuItems addObject:[NSMenuItem separatorItem]];
 
             // FIXME 4184640: The Look Up in Dictionary item is only implemented in WebHTMLView, and so is present but
@@ -236,25 +237,25 @@ static NSString *localizedMenuTitleFromAppKit(NSString *key, NSString *comment)
             // be better not to include it in the menu if the documentView isn't a WebHTMLView, but that could break 
             // existing clients that have code that relies on it being present (unlikely for clients outside of Apple, 
             // but Safari has such code).
-            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagLookUpInDictionary target:nil]];            
+            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagLookUpInDictionary target:nil representedObject:element]];            
             [menuItems addObject:[NSMenuItem separatorItem]];
-            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagCopy target:nil]];
+            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagCopy target:nil representedObject:element]];
         } else {
             WebView *wv = [webFrame webView];
             if ([wv canGoBack]) {
-                [menuItems addObject:[self menuItemWithTag:WebMenuItemTagGoBack target:wv]];
+                [menuItems addObject:[self menuItemWithTag:WebMenuItemTagGoBack target:wv representedObject:element]];
             }
             if ([wv canGoForward]) {
-                [menuItems addObject:[self menuItemWithTag:WebMenuItemTagGoForward target:wv]];
+                [menuItems addObject:[self menuItemWithTag:WebMenuItemTagGoForward target:wv representedObject:element]];
             }
             if ([wv isLoading]) {
-                [menuItems addObject:[self menuItemWithTag:WebMenuItemTagStop target:wv]];
+                [menuItems addObject:[self menuItemWithTag:WebMenuItemTagStop target:wv representedObject:element]];
             } else {
-                [menuItems addObject:[self menuItemWithTag:WebMenuItemTagReload target:wv]];
+                [menuItems addObject:[self menuItemWithTag:WebMenuItemTagReload target:wv representedObject:element]];
             }
             
             if (webFrame != [wv mainFrame]) {
-                [menuItems addObject:[self menuItemWithTag:WebMenuItemTagOpenFrameInNewWindow target:self]];
+                [menuItems addObject:[self menuItemWithTag:WebMenuItemTagOpenFrameInNewWindow target:self representedObject:element]];
             }
         }
     }
@@ -262,9 +263,6 @@ static NSString *localizedMenuTitleFromAppKit(NSString *key, NSString *comment)
     // Add the default items at the end, if any, after a separator
     [self appendDefaultItems:defaultMenuItems toArray:menuItems];
 
-    // Attach element as the represented object to each item.
-    [menuItems makeObjectsPerformSelector:@selector(setRepresentedObject:) withObject:element];
-    
     return menuItems;
 }
 
@@ -283,29 +281,29 @@ static NSString *localizedMenuTitleFromAppKit(NSString *key, NSString *comment)
             NSEnumerator *enumerator = [guesses objectEnumerator];
             NSString *guess;
             while ((guess = [enumerator nextObject]) != nil) {
-                item = [self menuItemWithTag:WebMenuItemTagSpellingGuess target:nil];
+                item = [self menuItemWithTag:WebMenuItemTagSpellingGuess target:nil representedObject:element];
                 [item setTitle:guess];
                 [menuItems addObject:item];
             }
         } else {
-            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagNoGuessesFound target:nil]];
+            [menuItems addObject:[self menuItemWithTag:WebMenuItemTagNoGuessesFound target:nil representedObject:element]];
         }
         [menuItems addObject:[NSMenuItem separatorItem]];
-        [menuItems addObject:[self menuItemWithTag:WebMenuItemTagIgnoreSpelling target:nil]];
-        [menuItems addObject:[self menuItemWithTag:WebMenuItemTagLearnSpelling target:nil]];
+        [menuItems addObject:[self menuItemWithTag:WebMenuItemTagIgnoreSpelling target:nil representedObject:element]];
+        [menuItems addObject:[self menuItemWithTag:WebMenuItemTagLearnSpelling target:nil representedObject:element]];
         [menuItems addObject:[NSMenuItem separatorItem]];
     }
     
     // Add items that aren't in our nib, originally because they were Tiger-only.
     // FIXME: We should update the nib to include these.
-    [menuItems addObject:[self menuItemWithTag:WebMenuItemTagSearchInSpotlight target:nil]];
-    [menuItems addObject:[self menuItemWithTag:WebMenuItemTagSearchWeb target:nil]];
+    [menuItems addObject:[self menuItemWithTag:WebMenuItemTagSearchInSpotlight target:nil representedObject:element]];
+    [menuItems addObject:[self menuItemWithTag:WebMenuItemTagSearchWeb target:nil representedObject:element]];
     [menuItems addObject:[NSMenuItem separatorItem]];
     // FIXME: The NSTextView behavior for looking text up in the dictionary is different if
     // there was a selection before you clicked than if the selection was created as part of
     // the click. This is desired by the dictionary folks apparently, though it seems bizarre.
     // It might be tricky to pull this off in WebKit.
-    [menuItems addObject:[self menuItemWithTag:WebMenuItemTagLookUpInDictionary target:nil]];
+    [menuItems addObject:[self menuItemWithTag:WebMenuItemTagLookUpInDictionary target:nil representedObject:element]];
     [menuItems addObject:[NSMenuItem separatorItem]];
     
     // Load our NSTextView-like context menu nib.