Changeset 191699 in webkit
- Timestamp:
- Oct 28, 2015, 3:53:29 PM (9 years ago)
- Location:
- trunk/Source/WebKit/mac
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/mac/ChangeLog
r191591 r191699 1 2015-10-28 Anders Carlsson <andersca@apple.com> 2 3 WebKit, not WebCore, should do context menu conversion 4 https://bugs.webkit.org/show_bug.cgi?id=150640 5 6 Reviewed by Tim Horton. 7 8 * WebView/WebHTMLView.mm: 9 (createShareMenuItem): 10 (createMenuItem): 11 (createMenuItems): 12 (customMenuFromDefaultItems): 13 1 14 2015-10-26 Anders Carlsson <andersca@apple.com> 2 15 -
trunk/Source/WebKit/mac/WebView/WebHTMLView.mm
r191520 r191699 3529 3529 } 3530 3530 3531 static RetainPtr<NSMenuItem> createShareMenuItem(const HitTestResult& hitTestResult) 3532 { 3533 if (![[NSMenuItem class] respondsToSelector:@selector(standardShareMenuItemWithItems:)]) 3534 return nil; 3535 3536 auto items = adoptNS([[NSMutableArray alloc] init]); 3537 3538 if (!hitTestResult.absoluteLinkURL().isEmpty()) { 3539 NSURL *absoluteLinkURL = hitTestResult.absoluteLinkURL(); 3540 [items addObject:absoluteLinkURL]; 3541 } 3542 3543 if (!hitTestResult.absoluteMediaURL().isEmpty() && hitTestResult.isDownloadableMedia()) { 3544 NSURL *downloadableMediaURL = hitTestResult.absoluteMediaURL(); 3545 [items addObject:downloadableMediaURL]; 3546 } 3547 3548 if (Image* image = hitTestResult.image()) { 3549 if (RefPtr<SharedBuffer> buffer = image->data()) 3550 [items addObject:adoptNS([[NSImage alloc] initWithData:[NSData dataWithBytes:buffer->data() length:buffer->size()]]).get()]; 3551 } 3552 3553 if (!hitTestResult.selectedText().isEmpty()) { 3554 NSString *selectedText = hitTestResult.selectedText(); 3555 [items addObject:selectedText]; 3556 } 3557 3558 if (![items count]) 3559 return nil; 3560 3561 return [NSMenuItem standardShareMenuItemWithItems:items.get()]; 3562 } 3563 3564 static RetainPtr<NSMutableArray> createMenuItems(const HitTestResult&, const Vector<ContextMenuItem>&); 3565 3566 static RetainPtr<NSMenuItem> createMenuItem(const HitTestResult& hitTestResult, const ContextMenuItem& item) 3567 { 3568 if (item.action() == ContextMenuItemTagShareMenu) 3569 return createShareMenuItem(hitTestResult); 3570 3571 switch (item.type()) { 3572 case WebCore::ActionType: 3573 case WebCore::CheckableActionType: { 3574 auto menuItem = adoptNS([[NSMenuItem alloc] initWithTitle:item.title() action:@selector(forwardContextMenuAction:) keyEquivalent:@""]); 3575 3576 [menuItem setTag:item.action()]; 3577 [menuItem setEnabled:item.enabled()]; 3578 [menuItem setState:item.checked() ? NSOnState : NSOffState]; 3579 [menuItem setTarget:[WebMenuTarget sharedMenuTarget]]; 3580 3581 return menuItem; 3582 } 3583 3584 case SeparatorType: 3585 return [NSMenuItem separatorItem]; 3586 3587 case SubmenuType: { 3588 auto menu = adoptNS([[NSMenu alloc] init]); 3589 3590 auto submenuItems = createMenuItems(hitTestResult, contextMenuItemVector(item.platformSubMenu())); 3591 for (NSMenuItem *menuItem in submenuItems.get()) 3592 [menu addItem:menuItem]; 3593 3594 auto menuItem = adoptNS([[NSMenuItem alloc] initWithTitle:item.title() action:nullptr keyEquivalent:@""]); 3595 [menuItem setEnabled:item.enabled()]; 3596 [menuItem setSubmenu:menu.get()]; 3597 3598 return menuItem; 3599 } 3600 } 3601 } 3602 3603 static RetainPtr<NSMutableArray> createMenuItems(const HitTestResult& hitTestResult, const Vector<ContextMenuItem>& items) 3604 { 3605 auto menuItems = adoptNS([[NSMutableArray alloc] init]); 3606 3607 for (auto& item : items) { 3608 if (auto menuItem = createMenuItem(hitTestResult, item)) 3609 [menuItems addObject:menuItem.get()]; 3610 } 3611 3612 return menuItems; 3613 } 3614 3531 3615 static RetainPtr<NSArray> customMenuFromDefaultItems(WebView *webView, const ContextMenu& defaultMenu) 3532 3616 { 3617 const auto& hitTestResult = webView.page->contextMenuController().hitTestResult(); 3618 auto defaultMenuItems = createMenuItems(hitTestResult, contextMenuItemVector(defaultMenu.platformDescription())); 3619 3533 3620 id delegate = [webView UIDelegate]; 3534 3621 SEL selector = @selector(webView:contextMenuItemsForElement:defaultMenuItems:); 3535 3622 if (![delegate respondsToSelector:selector]) 3536 return defaultMenu .platformDescription();3537 3538 auto element = adoptNS([[WebElementDictionary alloc] initWithHitTestResult: [webView page]->contextMenuController().hitTestResult()]);3623 return defaultMenuItems; 3624 3625 auto element = adoptNS([[WebElementDictionary alloc] initWithHitTestResult:hitTestResult]); 3539 3626 3540 3627 BOOL preVersion3Client = isPreVersion3Client(); … … 3542 3629 DOMNode *node = [element objectForKey:WebElementDOMNodeKey]; 3543 3630 if ([node isKindOfClass:[DOMHTMLInputElement class]] && [(DOMHTMLInputElement *)node _isTextField]) 3544 return defaultMenu .platformDescription();3631 return defaultMenuItems; 3545 3632 if ([node isKindOfClass:[DOMHTMLTextAreaElement class]]) 3546 return defaultMenu.platformDescription(); 3547 } 3548 3549 NSMutableArray *defaultMenuItems = defaultMenu.platformDescription(); 3550 3551 for (NSMenuItem *menuItem in defaultMenuItems) { 3633 return defaultMenuItems; 3634 } 3635 3636 for (NSMenuItem *menuItem in defaultMenuItems.get()) { 3552 3637 if (!menuItem.representedObject) 3553 3638 menuItem.representedObject = element.get(); 3554 3639 } 3555 3640 3556 auto savedItems = fixMenusToSendToOldClients(defaultMenuItems );3557 3558 NSArray *delegateSuppliedItems = CallUIDelegate(webView, selector, element.get(), defaultMenuItems );3641 auto savedItems = fixMenusToSendToOldClients(defaultMenuItems.get()); 3642 3643 NSArray *delegateSuppliedItems = CallUIDelegate(webView, selector, element.get(), defaultMenuItems.get()); 3559 3644 3560 3645 return fixMenusReceivedFromOldClients(delegateSuppliedItems, savedItems.get()).autorelease();
Note:
See TracChangeset
for help on using the changeset viewer.