Index: content/browser/renderer_host/render_widget_host_view_mac_dictionary_helper.mm |
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_dictionary_helper.mm b/content/browser/renderer_host/render_widget_host_view_mac_dictionary_helper.mm |
index 69e99227575ed403a9c13973cc0aef403c290f7c..92f10bc2688d6d9e84c2a68b9bc772205fc97c83 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_mac_dictionary_helper.mm |
+++ b/content/browser/renderer_host/render_widget_host_view_mac_dictionary_helper.mm |
@@ -22,12 +22,38 @@ |
void RenderWidgetHostViewMacDictionaryHelper::ShowDefinitionForSelection() { |
NSRange selection_range = [view_->cocoa_view() selectedRange]; |
+ NSAttributedString* attr_string = |
+ [view_->cocoa_view() attributedSubstringForProposedRange:selection_range |
+ actualRange:nil]; |
+ if (!attr_string) { |
+ if (view_->selected_text().empty()) |
+ return; |
+ // The PDF plugin does not support getting the attributed string. Until it |
+ // does, use NSPerformService(), which opens Dictionary.app. |
+ // http://crbug.com/152438 |
+ // TODO(asvitkine): This should be removed after the above support is added. |
+ NSString* text = base::SysUTF8ToNSString(view_->selected_text()); |
+ NSPasteboard* pasteboard = [NSPasteboard pasteboardWithUniqueName]; |
+ NSArray* types = [NSArray arrayWithObject:NSStringPboardType]; |
+ [pasteboard declareTypes:types owner:nil]; |
+ if ([pasteboard setString:text forType:NSStringPboardType]) |
+ NSPerformService(@"Look Up in Dictionary", pasteboard); |
+ return; |
+ } |
+ |
NSRect rect = |
[view_->cocoa_view() firstViewRectForCharacterRange:selection_range |
actualRange:nil]; |
+ |
+ NSDictionary* attrs = [attr_string attributesAtIndex:0 effectiveRange:nil]; |
+ NSFont* font = [attrs objectForKey:NSFontAttributeName]; |
+ rect.origin.y += NSHeight(rect) - [font ascender]; |
+ |
rect.origin.x += offset_.x(); |
- rect.origin.y += NSHeight(rect) + offset_.y(); |
- [view_->cocoa_view() showLookUpDictionaryOverlayAtPoint:rect.origin]; |
+ rect.origin.y += offset_.y(); |
+ |
+ [target_view_->cocoa_view() showDefinitionForAttributedString:attr_string |
+ atPoint:rect.origin]; |
} |
} // namespace content |