Index: chrome/browser/autocomplete/autocomplete_edit_view_views.cc |
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_views.cc b/chrome/browser/autocomplete/autocomplete_edit_view_views.cc |
index e3626b73a52f32d8264ff688dca1e47b41d4ec94..76a22d46c2faed83c1bbbb45223b93120a2360f0 100644 |
--- a/chrome/browser/autocomplete/autocomplete_edit_view_views.cc |
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_views.cc |
@@ -121,7 +121,7 @@ AutocompleteEditViewViews::AutocompleteEditViewViews( |
command_updater_(command_updater), |
popup_window_mode_(popup_window_mode), |
security_level_(ToolbarModel::NONE), |
- delete_was_pressed_(false), |
+ ime_composing_before_change_(false), |
delete_at_end_pressed_(false) { |
set_border(views::Border::CreateEmptyBorder(kAutocompleteVerticalMargin, 0, |
kAutocompleteVerticalMargin, 0)); |
@@ -164,10 +164,6 @@ void AutocompleteEditViewViews::SetBaseColor() { |
bool AutocompleteEditViewViews::HandleAfterKeyEvent( |
const views::KeyEvent& event, |
bool handled) { |
- handling_key_press_ = false; |
- if (content_maybe_changed_by_key_press_) |
- OnAfterPossibleChange(); |
- |
if (event.key_code() == ui::VKEY_RETURN) { |
bool alt_held = event.IsAltDown(); |
model_->AcceptInput(alt_held ? NEW_FOREGROUND_TAB : CURRENT_TAB, false); |
@@ -182,7 +178,7 @@ bool AutocompleteEditViewViews::HandleAfterKeyEvent( |
// the contents of omnibox2, we notify the AutocompleteEditModel class when |
// the control-key state is changed. |
model_->OnControlKeyChanged(true); |
- } else if (!text_changed_ && event.key_code() == ui::VKEY_DELETE && |
+ } else if (!handled && event.key_code() == ui::VKEY_DELETE && |
event.IsShiftDown()) { |
// If shift+del didn't change the text, we let this delete an entry from |
// the popup. We can't check to see if the IME handled it because even if |
@@ -255,18 +251,6 @@ void AutocompleteEditViewViews::HandleFocusOut() { |
//////////////////////////////////////////////////////////////////////////////// |
// AutocompleteEditViewViews, views::View implementation: |
- |
-bool AutocompleteEditViewViews::OnMousePressed( |
- const views::MouseEvent& event) { |
- if (event.IsLeftMouseButton()) { |
- // Button press event may change the selection, we need to record the change |
- // and report it to |model_| later when button is released. |
- OnBeforePossibleChange(); |
- } |
- // Pass the event through to TextfieldViews. |
- return false; |
-} |
- |
void AutocompleteEditViewViews::Layout() { |
gfx::Insets insets = GetInsets(); |
textfield_->SetBounds(insets.left(), insets.top(), |
@@ -478,17 +462,10 @@ void AutocompleteEditViewViews::OnBeforePossibleChange() { |
// Record our state. |
text_before_change_ = GetText(); |
textfield_->GetSelectedRange(&sel_before_change_); |
+ ime_composing_before_change_ = textfield_->IsIMEComposing(); |
} |
bool AutocompleteEditViewViews::OnAfterPossibleChange() { |
- // OnAfterPossibleChange should be called once per modification, |
- // and we should ignore if this is called while a key event is being handled |
- // because OnAfterPossibleChagne will be called after the key event is |
- // actually handled. |
- if (handling_key_press_) { |
- content_maybe_changed_by_key_press_ = true; |
- return false; |
- } |
ui::Range new_sel; |
textfield_->GetSelectedRange(&new_sel); |
@@ -497,7 +474,8 @@ bool AutocompleteEditViewViews::OnAfterPossibleChange() { |
// See if the text or selection have changed since OnBeforePossibleChange(). |
string16 new_text = GetText(); |
- text_changed_ = (new_text != text_before_change_); |
+ bool text_changed = (new_text != text_before_change_) || |
+ (ime_composing_before_change_ != textfield_->IsIMEComposing()); |
bool selection_differs = |
!((sel_before_change_.is_empty() && new_sel.is_empty()) || |
sel_before_change_.EqualsIgnoringDirection(new_sel)); |
@@ -511,24 +489,19 @@ bool AutocompleteEditViewViews::OnAfterPossibleChange() { |
(text_before_change_.length() > new_text.length()) && |
(new_sel.start() <= sel_before_change_.GetMin()); |
- delete_at_end_pressed_ = false; |
- |
bool something_changed = model_->OnAfterPossibleChange(new_text, |
- selection_differs, text_changed_, just_deleted_text, at_end_of_edit); |
+ selection_differs, text_changed, just_deleted_text, at_end_of_edit); |
// If only selection was changed, we don't need to call |model_|'s |
// OnChanged() method, which is called in TextChanged(). |
// But we still need to call EmphasizeURLComponents() to make sure the text |
// attributes are updated correctly. |
- if (something_changed && text_changed_) { |
+ if (something_changed && text_changed) |
TextChanged(); |
- } else if (selection_differs) { |
+ else if (selection_differs) |
EmphasizeURLComponents(); |
- } else if (delete_was_pressed_ && at_end_of_edit) { |
- delete_at_end_pressed_ = true; |
+ else if (delete_at_end_pressed_) |
model_->OnChanged(); |
- } |
- delete_was_pressed_ = false; |
return something_changed; |
} |
@@ -587,27 +560,19 @@ void AutocompleteEditViewViews::Observe(NotificationType type, |
void AutocompleteEditViewViews::ContentsChanged(views::Textfield* sender, |
const string16& new_contents) { |
- if (handling_key_press_) |
- content_maybe_changed_by_key_press_ = true; |
} |
bool AutocompleteEditViewViews::HandleKeyEvent( |
views::Textfield* textfield, |
const views::KeyEvent& event) { |
- delete_was_pressed_ = event.key_code() == ui::VKEY_DELETE; |
- |
- // Reset |text_changed_| before passing the key event on to the text view. |
- text_changed_ = false; |
- OnBeforePossibleChange(); |
- handling_key_press_ = true; |
- content_maybe_changed_by_key_press_ = false; |
+ delete_at_end_pressed_ = false; |
if (event.key_code() == ui::VKEY_BACK) { |
// Checks if it's currently in keyword search mode. |
if (model_->is_keyword_hint() || model_->keyword().empty()) |
return false; |
// If there is selection, let textfield handle the backspace. |
- if (!textfield_->GetSelectedText().empty()) |
+ if (textfield_->HasSelection()) |
return false; |
// If not at the begining of the text, let textfield handle the backspace. |
if (textfield_->GetCursorPosition()) |
@@ -616,9 +581,23 @@ bool AutocompleteEditViewViews::HandleKeyEvent( |
return true; |
} |
+ if (event.key_code() == ui::VKEY_DELETE && !event.IsAltDown()) { |
+ delete_at_end_pressed_ = |
+ (!textfield_->HasSelection() && |
+ textfield_->GetCursorPosition() == textfield_->text().length()); |
+ } |
+ |
return false; |
} |
+void AutocompleteEditViewViews::OnBeforeUserAction(views::Textfield* sender) { |
+ OnBeforePossibleChange(); |
+} |
+ |
+void AutocompleteEditViewViews::OnAfterUserAction(views::Textfield* sender) { |
+ OnAfterPossibleChange(); |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
// AutocompleteEditViewViews, private: |