Chromium Code Reviews| 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 66f1c31650f7799701f8aba763b515e7c340aaeb..926a863114598e70e92b319878dcf16f0121a837 100644 |
| --- a/content/browser/renderer_host/render_widget_host_view_mac.mm |
| +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm |
| @@ -1225,6 +1225,7 @@ void RenderWidgetHostViewMac::SelectionBoundsChanged( |
| const ViewHostMsg_SelectionBounds_Params& params) { |
| if (params.anchor_rect == params.focus_rect) |
| caret_rect_ = params.anchor_rect; |
| + first_selection_rect_ = params.anchor_rect; |
| } |
| void RenderWidgetHostViewMac::SetShowingContextMenu(bool showing) { |
| @@ -1453,6 +1454,12 @@ bool RenderWidgetHostViewMac::GetCachedFirstRectForCharacterRange( |
| return true; |
| } |
| + if (composition_range_.is_empty()) { |
| + *actual_range = selection_range_.ToNSRange(); |
| + *rect = NSRectFromCGRect(first_selection_rect_.ToCGRect()); |
| + return true; |
| + } |
| + |
| const gfx::Range request_range_in_composition = |
| ConvertCharacterRangeToCompositionRange(gfx::Range(range)); |
| if (request_range_in_composition == gfx::Range::InvalidRange()) |
| @@ -2887,10 +2894,34 @@ extern NSString *NSTextInputReplacementRangeAttributeName; |
| // TODO(thakis): Pipe |actualRange| through TextInputClientMac machinery. |
| if (actualRange) |
| *actualRange = range; |
| - NSAttributedString* str = |
| - TextInputClientMac::GetInstance()->GetAttributedSubstringFromRange( |
| - renderWidgetHostView_->render_widget_host_, range); |
| - return str; |
| + |
| + const gfx::Range requested_range(range); |
| + if (requested_range.is_reversed()) |
| + return nil; |
| + |
| + gfx::Range expected_range; |
| + base::string16 expected_text; |
| + |
| + if (!renderWidgetHostView_->composition_range().is_empty()) { |
| + expected_text = markedText_; |
| + expected_range = renderWidgetHostView_->composition_range(); |
| + } else { |
| + expected_text = renderWidgetHostView_->selection_text(); |
| + size_t offset = renderWidgetHostView_->selection_text_offset(); |
| + expected_range = gfx::Range(offset, offset + expected_text.size()); |
| + } |
| + |
| + if (!expected_range.Contains(requested_range)) |
| + return nil; |
| + |
| + std::string result_text; |
| + if (!base::UTF16ToUTF8( |
|
yukawa
2015/08/21 06:54:50
(optional) Perhaps we can use something here to av
Shu Chen
2015/08/21 07:11:54
Done.
|
| + expected_text.data() + requested_range.start() - expected_range.start(), |
| + requested_range.length(), &result_text)) { |
| + return nil; |
| + } |
| + NSString *nstr = [[NSString alloc] initWithUTF8String:result_text.c_str()]; |
| + return [[NSAttributedString alloc] initWithString:nstr]; |
| } |
| - (NSInteger)conversationIdentifier { |