Chromium Code Reviews| Index: views/controls/textfield/native_textfield_views.cc |
| =================================================================== |
| --- views/controls/textfield/native_textfield_views.cc (revision 103758) |
| +++ views/controls/textfield/native_textfield_views.cc (working copy) |
| @@ -226,15 +226,16 @@ |
| selected.selection_end()); |
| size_t selected_range_length = max_of_selected_range - |
| min_of_selected_range; |
| - if (max_of_selected_range <= drop_destination.selection_end()) |
| - drop_destination.set_selection_end( |
| - drop_destination.selection_end() - selected_range_length); |
| - else if (min_of_selected_range <= drop_destination.selection_end()) |
| - drop_destination.set_selection_end(min_of_selected_range); |
| - model_->DeleteSelectionAndInsertTextAt(text, |
| - drop_destination.selection_end()); |
| + size_t drop_destination_end = drop_destination.selection_end(); |
| + if (max_of_selected_range <= drop_destination_end) |
| + drop_destination_end -= selected_range_length; |
| + else if (min_of_selected_range <= drop_destination_end) |
| + drop_destination_end = min_of_selected_range; |
| + model_->DeleteSelectionAndInsertTextAt(text, drop_destination_end); |
| } else { |
| - drop_destination.set_selection_start(drop_destination.selection_end()); |
| + drop_destination = gfx::SelectionModel(drop_destination.selection_end(), |
|
msw
2011/10/04 07:25:41
Why make this change? Constructing a new Selection
xji
2011/10/05 01:23:42
Ah, this is not needed. drop_destination's selecti
|
| + drop_destination.caret_pos(), |
| + drop_destination.caret_placement()); |
| model_->MoveCursorTo(drop_destination); |
| // Drop always inserts text even if the textfield is not in insert mode. |
| model_->InsertText(text); |
| @@ -278,8 +279,8 @@ |
| // Merge selection models of "start_pos" and "end_pos" so that |
| // selection start is the value from "start_pos", while selection end, |
| // caret position, and caret placement are values from "end_pos". |
| - gfx::SelectionModel sel(end_pos); |
| - sel.set_selection_start(start_pos.selection_start()); |
| + gfx::SelectionModel sel(start_pos.selection_start(), end_pos.selection_end(), |
| + end_pos.caret_pos(), end_pos.caret_placement()); |
| model_->SelectSelectionModel(sel); |
| OnCaretBoundsChanged(); |
| @@ -490,6 +491,16 @@ |
| return model_->HasCompositionText(); |
| } |
| +void NativeTextfieldViews::GetSelectedRange(ui::Range* range) const { |
| + model_->GetSelectedRange(range); |
| +} |
| + |
| +void NativeTextfieldViews::SelectRange(const ui::Range& range) { |
| + model_->SelectRange(range); |
| + OnCaretBoundsChanged(); |
| + SchedulePaint(); |
| +} |
| + |
| void NativeTextfieldViews::GetSelectionModel(gfx::SelectionModel* sel) const { |
| model_->GetSelectionModel(sel); |
| } |
| @@ -758,7 +769,7 @@ |
| return false; |
| OnBeforeUserAction(); |
| - SelectSelectionModel(gfx::SelectionModel(range.start(), range.end())); |
| + SelectRange(range); |
| OnAfterUserAction(); |
| return true; |
| } |
| @@ -768,8 +779,7 @@ |
| return false; |
| OnBeforeUserAction(); |
| - gfx::SelectionModel selection(range.start(), range.end()); |
| - model_->SelectSelectionModel(selection); |
| + model_->SelectRange(range); |
| if (model_->HasSelection()) { |
| model_->DeleteSelection(); |
| UpdateAfterChange(true, true); |