Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 10830176: [Mac]: Make dictionary context menu item use system settings for whether to launch Dictionary.app o… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_widget_host_view_mac.h" 5 #include "content/browser/renderer_host/render_widget_host_view_mac.h"
6 6
7 #include <QuartzCore/QuartzCore.h> 7 #include <QuartzCore/QuartzCore.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 - (void)setRWHVDelegate:(NSObject<RenderWidgetHostViewMacDelegate>*)delegate; 127 - (void)setRWHVDelegate:(NSObject<RenderWidgetHostViewMacDelegate>*)delegate;
128 - (void)gotUnhandledWheelEvent; 128 - (void)gotUnhandledWheelEvent;
129 - (void)scrollOffsetPinnedToLeft:(BOOL)left toRight:(BOOL)right; 129 - (void)scrollOffsetPinnedToLeft:(BOOL)left toRight:(BOOL)right;
130 - (void)setHasHorizontalScrollbar:(BOOL)has_horizontal_scrollbar; 130 - (void)setHasHorizontalScrollbar:(BOOL)has_horizontal_scrollbar;
131 - (void)keyEvent:(NSEvent*)theEvent wasKeyEquivalent:(BOOL)equiv; 131 - (void)keyEvent:(NSEvent*)theEvent wasKeyEquivalent:(BOOL)equiv;
132 - (void)cancelChildPopups; 132 - (void)cancelChildPopups;
133 - (void)windowDidChangeBackingProperties:(NSNotification*)notification; 133 - (void)windowDidChangeBackingProperties:(NSNotification*)notification;
134 - (void)windowChangedScreen:(NSNotification*)notification; 134 - (void)windowChangedScreen:(NSNotification*)notification;
135 - (void)checkForPluginImeCancellation; 135 - (void)checkForPluginImeCancellation;
136 - (void)updateTabBackingStoreScaleFactor; 136 - (void)updateTabBackingStoreScaleFactor;
137 - (NSRect)firstViewRectForCharacterRange:(NSRange)theRange
138 actualRange:(NSRangePointer)actualRange;
137 @end 139 @end
138 140
139 // NSEvent subtype for scroll gestures events. 141 // NSEvent subtype for scroll gestures events.
140 static const short kIOHIDEventTypeScroll = 6; 142 static const short kIOHIDEventTypeScroll = 6;
141 143
142 // A window subclass that allows the fullscreen window to become main and gain 144 // A window subclass that allows the fullscreen window to become main and gain
143 // keyboard focus. This is only used for pepper flash. Normal fullscreen is 145 // keyboard focus. This is only used for pepper flash. Normal fullscreen is
144 // handled by the browser. 146 // handled by the browser.
145 @interface PepperFlashFullscreenWindow : UnderlayOpenGLHostingWindow 147 @interface PepperFlashFullscreenWindow : UnderlayOpenGLHostingWindow
146 @end 148 @end
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 } 760 }
759 761
760 // 762 //
761 // RenderWidgetHostViewCocoa uses the stored selection text, 763 // RenderWidgetHostViewCocoa uses the stored selection text,
762 // which implements NSServicesRequests protocol. 764 // which implements NSServicesRequests protocol.
763 // 765 //
764 void RenderWidgetHostViewMac::SelectionChanged(const string16& text, 766 void RenderWidgetHostViewMac::SelectionChanged(const string16& text,
765 size_t offset, 767 size_t offset,
766 const ui::Range& range) { 768 const ui::Range& range) {
767 if (range.is_empty() || text.empty()) { 769 if (range.is_empty() || text.empty()) {
768 selected_text_.clear(); 770 selected_text_.clear();
769 } else { 771 } else {
770 size_t pos = range.GetMin() - offset; 772 size_t pos = range.GetMin() - offset;
771 size_t n = range.length(); 773 size_t n = range.length();
772 774
773 DCHECK(pos + n <= text.length()) << "The text can not fully cover range."; 775 DCHECK(pos + n <= text.length()) << "The text can not fully cover range.";
774 if (pos >= text.length()) { 776 if (pos >= text.length()) {
775 DCHECK(false) << "The text can not cover range."; 777 DCHECK(false) << "The text can not cover range.";
776 return; 778 return;
777 } 779 }
778 selected_text_ = UTF16ToUTF8(text.substr(pos, n)); 780 selected_text_ = UTF16ToUTF8(text.substr(pos, n));
779 } 781 }
780 782
781 [cocoa_view_ setSelectedRange:range.ToNSRange()]; 783 [cocoa_view_ setSelectedRange:range.ToNSRange()];
782 // Updaes markedRange when there is no marked text so that retrieving 784 // Updates markedRange when there is no marked text so that retrieving
783 // markedRange immediately after calling setMarkdText: returns the current 785 // markedRange immediately after calling setMarkdText: returns the current
784 // caret position. 786 // caret position.
785 if (![cocoa_view_ hasMarkedText]) { 787 if (![cocoa_view_ hasMarkedText]) {
786 [cocoa_view_ setMarkedRange:range.ToNSRange()]; 788 [cocoa_view_ setMarkedRange:range.ToNSRange()];
787 } 789 }
788 790
789 RenderWidgetHostViewBase::SelectionChanged(text, offset, range); 791 RenderWidgetHostViewBase::SelectionChanged(text, offset, range);
790 } 792 }
791 793
792 void RenderWidgetHostViewMac::SetShowingContextMenu(bool showing) { 794 void RenderWidgetHostViewMac::SetShowingContextMenu(bool showing) {
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
1392 } 1394 }
1393 1395
1394 void RenderWidgetHostViewMac::WindowFrameChanged() { 1396 void RenderWidgetHostViewMac::WindowFrameChanged() {
1395 if (render_widget_host_) { 1397 if (render_widget_host_) {
1396 render_widget_host_->Send(new ViewMsg_WindowFrameChanged( 1398 render_widget_host_->Send(new ViewMsg_WindowFrameChanged(
1397 render_widget_host_->GetRoutingID(), GetBoundsInRootWindow(), 1399 render_widget_host_->GetRoutingID(), GetBoundsInRootWindow(),
1398 GetViewBounds())); 1400 GetViewBounds()));
1399 } 1401 }
1400 } 1402 }
1401 1403
1404 void RenderWidgetHostViewMac::ShowDefinitionForSelection() {
1405 // Brings up either Dictionary.app or a light-weight dictionary panel,
1406 // depending on system settings.
1407 NSRange selection_range = [cocoa_view_ selectedRange];
1408 NSAttributedString* attr_string =
1409 [cocoa_view_ attributedSubstringForProposedRange:selection_range
1410 actualRange:nil];
1411 NSRect rect = [cocoa_view_ firstViewRectForCharacterRange:selection_range
1412 actualRange:nil];
1413
1414 // Set |rect.origin| to the text baseline based on |attr_string|'s font,
1415 // since -baselineDeltaForCharacterAtIndex: is currently not implemented.
1416 NSDictionary* attrs = [attr_string attributesAtIndex:0 effectiveRange:nil];
1417 NSFont* font = [attrs objectForKey:NSFontAttributeName];
1418 rect.origin.y += NSHeight(rect) - [font ascender];
1419 [cocoa_view_ showDefinitionForAttributedString:attr_string
1420 atPoint:rect.origin];
1421 }
1422
1402 void RenderWidgetHostViewMac::SetBackground(const SkBitmap& background) { 1423 void RenderWidgetHostViewMac::SetBackground(const SkBitmap& background) {
1403 RenderWidgetHostViewBase::SetBackground(background); 1424 RenderWidgetHostViewBase::SetBackground(background);
1404 if (render_widget_host_) 1425 if (render_widget_host_)
1405 render_widget_host_->Send(new ViewMsg_SetBackground( 1426 render_widget_host_->Send(new ViewMsg_SetBackground(
1406 render_widget_host_->GetRoutingID(), background)); 1427 render_widget_host_->GetRoutingID(), background));
1407 } 1428 }
1408 1429
1409 void RenderWidgetHostViewMac::OnAccessibilityNotifications( 1430 void RenderWidgetHostViewMac::OnAccessibilityNotifications(
1410 const std::vector<AccessibilityHostMsg_NotificationParams>& params) { 1431 const std::vector<AccessibilityHostMsg_NotificationParams>& params) {
1411 if (!GetBrowserAccessibilityManager()) { 1432 if (!GetBrowserAccessibilityManager()) {
(...skipping 1378 matching lines...) Expand 10 before | Expand all | Expand 10 after
2790 thePoint = [self convertPoint:thePoint fromView:nil]; 2811 thePoint = [self convertPoint:thePoint fromView:nil];
2791 thePoint.y = NSHeight([self frame]) - thePoint.y; 2812 thePoint.y = NSHeight([self frame]) - thePoint.y;
2792 2813
2793 NSUInteger index = 2814 NSUInteger index =
2794 TextInputClientMac::GetInstance()->GetCharacterIndexAtPoint( 2815 TextInputClientMac::GetInstance()->GetCharacterIndexAtPoint(
2795 renderWidgetHostView_->render_widget_host_, 2816 renderWidgetHostView_->render_widget_host_,
2796 gfx::Point(thePoint.x, thePoint.y)); 2817 gfx::Point(thePoint.x, thePoint.y));
2797 return index; 2818 return index;
2798 } 2819 }
2799 2820
2800 - (NSRect)firstRectForCharacterRange:(NSRange)theRange 2821 - (NSRect)firstViewRectForCharacterRange:(NSRange)theRange
2801 actualRange:(NSRangePointer)actualRange { 2822 actualRange:(NSRangePointer)actualRange {
2802 NSRect rect; 2823 NSRect rect;
2803 if (!renderWidgetHostView_->GetCachedFirstRectForCharacterRange( 2824 if (!renderWidgetHostView_->GetCachedFirstRectForCharacterRange(
2804 theRange, 2825 theRange,
2805 &rect, 2826 &rect,
2806 actualRange)) { 2827 actualRange)) {
2807 rect = TextInputClientMac::GetInstance()->GetFirstRectForRange( 2828 rect = TextInputClientMac::GetInstance()->GetFirstRectForRange(
2808 renderWidgetHostView_->render_widget_host_, theRange); 2829 renderWidgetHostView_->render_widget_host_, theRange);
2809 2830
2810 // TODO(thakis): Pipe |actualRange| through TextInputClientMac machinery. 2831 // TODO(thakis): Pipe |actualRange| through TextInputClientMac machinery.
2811 if (actualRange) 2832 if (actualRange)
2812 *actualRange = theRange; 2833 *actualRange = theRange;
2813 } 2834 }
2814 2835
2815 // The returned rectangle is in WebKit coordinates (upper left origin), so 2836 // The returned rectangle is in WebKit coordinates (upper left origin), so
2816 // flip the coordinate system and then convert it into screen coordinates for 2837 // flip the coordinate system.
2817 // return.
2818 NSRect viewFrame = [self frame]; 2838 NSRect viewFrame = [self frame];
2819 rect.origin.y = NSHeight(viewFrame) - NSMaxY(rect); 2839 rect.origin.y = NSHeight(viewFrame) - NSMaxY(rect);
2840 return rect;
2841 }
2842
2843 - (NSRect)firstRectForCharacterRange:(NSRange)theRange
2844 actualRange:(NSRangePointer)actualRange {
2845 NSRect rect = [self firstViewRectForCharacterRange:theRange
2846 actualRange:actualRange];
2847
2848 // Convert into screen coordinates for return.
2820 rect = [self convertRect:rect toView:nil]; 2849 rect = [self convertRect:rect toView:nil];
2821 rect.origin = [[self window] convertBaseToScreen:rect.origin]; 2850 rect.origin = [[self window] convertBaseToScreen:rect.origin];
2822 return rect; 2851 return rect;
2823 } 2852 }
2824 2853
2825 - (NSRange)markedRange { 2854 - (NSRange)markedRange {
2826 // An input method calls this method to check if an application really has 2855 // An input method calls this method to check if an application really has
2827 // a text being composed when hasMarkedText call returns true. 2856 // a text being composed when hasMarkedText call returns true.
2828 // Returns the range saved in the setMarkedText method so the input method 2857 // Returns the range saved in the setMarkedText method so the input method
2829 // calls the setMarkedText method and we can update the composition node 2858 // calls the setMarkedText method and we can update the composition node
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
3221 if (!string) return NO; 3250 if (!string) return NO;
3222 3251
3223 // If the user is currently using an IME, confirm the IME input, 3252 // If the user is currently using an IME, confirm the IME input,
3224 // and then insert the text from the service, the same as TextEdit and Safari. 3253 // and then insert the text from the service, the same as TextEdit and Safari.
3225 [self confirmComposition]; 3254 [self confirmComposition];
3226 [self insertText:string]; 3255 [self insertText:string];
3227 return YES; 3256 return YES;
3228 } 3257 }
3229 3258
3230 @end 3259 @end
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.h ('k') | content/browser/renderer_host/test_render_view_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698