Index: content/browser/renderer_host/render_widget_host_view_mac.mm |
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm |
index 252250ec3781eb1d579b3ca550e1c8182145556f..8d4602ebcec6bfd62f9b2e54ee25b764fdbc8383 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm |
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm |
@@ -180,6 +180,8 @@ static BOOL SupportsBackingPropertiesChangedNotification() { |
- (void)updateScreenProperties; |
- (void)setResponderDelegate: |
(NSObject<RenderWidgetHostViewMacDelegate>*)delegate; |
+- (void)showLookUpDictionaryOverlayInternal:(NSAttributedString*) string |
+ baselinePoint:(NSPoint) baselinePoint; |
@end |
// A window subclass that allows the fullscreen window to become main and gain |
@@ -2432,24 +2434,58 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged( |
} |
} |
-// This is invoked only on 10.8 or newer when the user taps a word using |
-// three fingers. |
-- (void)quickLookWithEvent:(NSEvent*)event { |
- NSPoint point = [self convertPoint:[event locationInWindow] fromView:nil]; |
+- (void)showLookUpDictionaryOverlayInternal:(NSAttributedString*) string |
+ baselinePoint:(NSPoint) baselinePoint { |
+ if ([string length] == 0) { |
+ // The PDF plugin does not support getting the attributed string at point. |
+ // Until it does, use NSPerformService(), which opens Dictionary.app. |
+ // TODO(shuchen): Support GetStringAtPoint() & GetStringFromRange() for PDF. |
+ // See crbug.com/152438. |
+ NSString* text = base::SysUTF8ToNSString( |
+ renderWidgetHostView_->selected_text()); |
+ if ([text length] == 0) |
+ return; |
+ 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; |
+ } |
+ dispatch_async(dispatch_get_main_queue(), ^{ |
+ [self showDefinitionForAttributedString:string |
+ atPoint:baselinePoint]; |
+ }); |
+} |
+ |
+- (void)showLookUpDictionaryOverlayFromRange:(NSRange)range { |
+ TextInputClientMac::GetInstance()->GetStringFromRange( |
+ renderWidgetHostView_->render_widget_host_, range, |
+ ^(NSAttributedString* string, NSPoint baselinePoint) { |
+ [self showLookUpDictionaryOverlayInternal:string |
+ baselinePoint:baselinePoint]; |
+ } |
+ ); |
+} |
+ |
+- (void)showLookUpDictionaryOverlayAtPoint:(NSPoint)point { |
TextInputClientMac::GetInstance()->GetStringAtPoint( |
renderWidgetHostView_->render_widget_host_, |
gfx::Point(point.x, NSHeight([self frame]) - point.y), |
^(NSAttributedString* string, NSPoint baselinePoint) { |
- if (string && [string length] > 0) { |
- dispatch_async(dispatch_get_main_queue(), ^{ |
- [self showDefinitionForAttributedString:string |
- atPoint:baselinePoint]; |
- }); |
- } |
+ [self showLookUpDictionaryOverlayInternal:string |
+ baselinePoint:baselinePoint]; |
} |
); |
} |
+// This is invoked only on 10.8 or newer when the user taps a word using |
+// three fingers. |
+- (void)quickLookWithEvent:(NSEvent*)event { |
+ NSPoint point = [self convertPoint:[event locationInWindow] fromView:nil]; |
+ [self showLookUpDictionaryOverlayAtPoint:point]; |
+} |
+ |
// This method handles 2 different types of hardware events. |
// (Apple does not distinguish between them). |
// a. Scrolling the middle wheel of a mouse. |