Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "chrome/browser/ui/views/omnibox/omnibox_view_views.h" | 5 #include "chrome/browser/ui/views/omnibox/omnibox_view_views.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 32 #include "ui/accessibility/ax_view_state.h" | 32 #include "ui/accessibility/ax_view_state.h" |
| 33 #include "ui/base/clipboard/scoped_clipboard_writer.h" | 33 #include "ui/base/clipboard/scoped_clipboard_writer.h" |
| 34 #include "ui/base/dragdrop/drag_drop_types.h" | 34 #include "ui/base/dragdrop/drag_drop_types.h" |
| 35 #include "ui/base/dragdrop/os_exchange_data.h" | 35 #include "ui/base/dragdrop/os_exchange_data.h" |
| 36 #include "ui/base/ime/text_input_client.h" | 36 #include "ui/base/ime/text_input_client.h" |
| 37 #include "ui/base/ime/text_input_type.h" | 37 #include "ui/base/ime/text_input_type.h" |
| 38 #include "ui/base/l10n/l10n_util.h" | 38 #include "ui/base/l10n/l10n_util.h" |
| 39 #include "ui/base/models/simple_menu_model.h" | 39 #include "ui/base/models/simple_menu_model.h" |
| 40 #include "ui/base/resource/resource_bundle.h" | 40 #include "ui/base/resource/resource_bundle.h" |
| 41 #include "ui/events/event.h" | 41 #include "ui/events/event.h" |
| 42 #include "ui/gfx/animation/slide_animation.h" | |
| 42 #include "ui/gfx/canvas.h" | 43 #include "ui/gfx/canvas.h" |
| 43 #include "ui/gfx/font_list.h" | 44 #include "ui/gfx/font_list.h" |
| 44 #include "ui/gfx/selection_model.h" | 45 #include "ui/gfx/selection_model.h" |
| 45 #include "ui/views/border.h" | 46 #include "ui/views/border.h" |
| 46 #include "ui/views/button_drag_utils.h" | 47 #include "ui/views/button_drag_utils.h" |
| 47 #include "ui/views/controls/textfield/textfield.h" | 48 #include "ui/views/controls/textfield/textfield.h" |
| 48 #include "ui/views/ime/input_method.h" | 49 #include "ui/views/ime/input_method.h" |
| 49 #include "ui/views/layout/fill_layout.h" | 50 #include "ui/views/layout/fill_layout.h" |
| 50 #include "ui/views/views_delegate.h" | 51 #include "ui/views/views_delegate.h" |
| 51 #include "ui/views/widget/widget.h" | 52 #include "ui/views/widget/widget.h" |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 171 SetReadOnly(true); | 172 SetReadOnly(true); |
| 172 | 173 |
| 173 // Initialize the popup view using the same font. | 174 // Initialize the popup view using the same font. |
| 174 popup_view_.reset(OmniboxPopupContentsView::Create( | 175 popup_view_.reset(OmniboxPopupContentsView::Create( |
| 175 GetFontList(), this, model(), location_bar_view_)); | 176 GetFontList(), this, model(), location_bar_view_)); |
| 176 | 177 |
| 177 #if defined(OS_CHROMEOS) | 178 #if defined(OS_CHROMEOS) |
| 178 chromeos::input_method::InputMethodManager::Get()-> | 179 chromeos::input_method::InputMethodManager::Get()-> |
| 179 AddCandidateWindowObserver(this); | 180 AddCandidateWindowObserver(this); |
| 180 #endif | 181 #endif |
| 182 | |
| 183 fade_in_animation_.reset(new gfx::SlideAnimation(this)); | |
| 184 fade_in_animation_->SetTweenType(gfx::Tween::LINEAR); | |
| 185 fade_in_animation_->SetSlideDuration(300); | |
| 186 } | |
| 187 | |
| 188 void OmniboxViewViews::FadeIn() { | |
| 189 fade_in_animation_->Show(); | |
| 181 } | 190 } |
| 182 | 191 |
| 183 //////////////////////////////////////////////////////////////////////////////// | 192 //////////////////////////////////////////////////////////////////////////////// |
| 193 // OmniboxViewViews, gfx::AnimationDelegate implementation: | |
| 194 | |
| 195 void OmniboxViewViews::AnimationProgressed(const gfx::Animation* animation) { | |
| 196 if (animation == fade_in_animation_.get()) { | |
|
Peter Kasting
2014/03/21 21:22:10
Nit: No {} (2 places)
Justin Donnelly
2014/03/24 22:59:37
Done. Although this one actually doesn't need the
| |
| 197 SchedulePaint(); | |
| 198 } | |
| 199 } | |
| 200 | |
| 201 void OmniboxViewViews::AnimationEnded(const gfx::Animation* animation) { | |
| 202 if (animation == fade_in_animation_.get()) { | |
| 203 fade_in_animation_->Reset(); | |
| 204 } | |
| 205 } | |
| 206 | |
| 207 //////////////////////////////////////////////////////////////////////////////// | |
| 184 // OmniboxViewViews, views::Textfield implementation: | 208 // OmniboxViewViews, views::Textfield implementation: |
| 185 | 209 |
| 186 const char* OmniboxViewViews::GetClassName() const { | 210 const char* OmniboxViewViews::GetClassName() const { |
| 187 return kViewClassName; | 211 return kViewClassName; |
| 188 } | 212 } |
| 189 | 213 |
| 214 void OmniboxViewViews::OnPaint(gfx::Canvas* canvas) { | |
| 215 if (fade_in_animation_->is_animating()) { | |
| 216 canvas->SaveLayerAlpha(static_cast<uint8>( | |
| 217 fade_in_animation_->CurrentValueBetween(0, 255))); | |
| 218 views::Textfield::OnPaint(canvas); | |
| 219 canvas->Restore(); | |
| 220 } else { | |
| 221 views::Textfield::OnPaint(canvas); | |
| 222 } | |
| 223 } | |
| 224 | |
| 190 bool OmniboxViewViews::OnMousePressed(const ui::MouseEvent& event) { | 225 bool OmniboxViewViews::OnMousePressed(const ui::MouseEvent& event) { |
| 191 select_all_on_mouse_release_ = | 226 select_all_on_mouse_release_ = |
| 192 (event.IsOnlyLeftMouseButton() || event.IsOnlyRightMouseButton()) && | 227 (event.IsOnlyLeftMouseButton() || event.IsOnlyRightMouseButton()) && |
| 193 (!HasFocus() || (model()->focus_state() == OMNIBOX_FOCUS_INVISIBLE)); | 228 (!HasFocus() || (model()->focus_state() == OMNIBOX_FOCUS_INVISIBLE)); |
| 194 if (select_all_on_mouse_release_) { | 229 if (select_all_on_mouse_release_) { |
| 195 // Restore caret visibility whenever the user clicks in the omnibox in a way | 230 // Restore caret visibility whenever the user clicks in the omnibox in a way |
| 196 // that would give it focus. We must handle this case separately here | 231 // that would give it focus. We must handle this case separately here |
| 197 // because if the omnibox currently has invisible focus, the mouse event | 232 // because if the omnibox currently has invisible focus, the mouse event |
| 198 // won't trigger either SetFocus() or OmniboxEditModel::OnSetFocus(). | 233 // won't trigger either SetFocus() or OmniboxEditModel::OnSetFocus(). |
| 199 model()->SetCaretVisibility(true); | 234 model()->SetCaretVisibility(true); |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 399 native_view = client->GetFocusedWindow(); | 434 native_view = client->GetFocusedWindow(); |
| 400 } | 435 } |
| 401 #endif | 436 #endif |
| 402 model()->OnWillKillFocus(native_view); | 437 model()->OnWillKillFocus(native_view); |
| 403 // Close the popup. | 438 // Close the popup. |
| 404 CloseOmniboxPopup(); | 439 CloseOmniboxPopup(); |
| 405 | 440 |
| 406 // Tell the model to reset itself. | 441 // Tell the model to reset itself. |
| 407 model()->OnKillFocus(); | 442 model()->OnKillFocus(); |
| 408 | 443 |
| 409 OnDidKillFocus(); | |
| 410 | |
| 411 // Make sure the beginning of the text is visible. | 444 // Make sure the beginning of the text is visible. |
| 412 SelectRange(gfx::Range(0)); | 445 SelectRange(gfx::Range(0)); |
| 446 | |
| 447 OnDidKillFocus(); | |
|
Peter Kasting
2014/03/21 21:22:10
Does the order of these last two statements matter
Justin Donnelly
2014/03/24 22:59:37
Not really, no. I was trying to deal with the fac
| |
| 413 } | 448 } |
| 414 | 449 |
| 415 base::string16 OmniboxViewViews::GetSelectionClipboardText() const { | 450 base::string16 OmniboxViewViews::GetSelectionClipboardText() const { |
| 416 return SanitizeTextForPaste(Textfield::GetSelectionClipboardText()); | 451 return SanitizeTextForPaste(Textfield::GetSelectionClipboardText()); |
| 417 } | 452 } |
| 418 | 453 |
| 419 //////////////////////////////////////////////////////////////////////////////// | 454 //////////////////////////////////////////////////////////////////////////////// |
| 420 // OmniboxViewViews, OmniboxView implementation: | 455 // OmniboxViewViews, OmniboxView implementation: |
| 421 | 456 |
| 422 void OmniboxViewViews::SaveStateToTab(content::WebContents* tab) { | 457 void OmniboxViewViews::SaveStateToTab(content::WebContents* tab) { |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 738 IDS_PASTE_AND_SEARCH : IDS_PASTE_AND_GO); | 773 IDS_PASTE_AND_SEARCH : IDS_PASTE_AND_GO); |
| 739 } | 774 } |
| 740 | 775 |
| 741 void OmniboxViewViews::ExecuteCommand(int command_id, int event_flags) { | 776 void OmniboxViewViews::ExecuteCommand(int command_id, int event_flags) { |
| 742 switch (command_id) { | 777 switch (command_id) { |
| 743 // These commands don't invoke the popup via OnBefore/AfterPossibleChange(). | 778 // These commands don't invoke the popup via OnBefore/AfterPossibleChange(). |
| 744 case IDS_PASTE_AND_GO: | 779 case IDS_PASTE_AND_GO: |
| 745 model()->PasteAndGo(GetClipboardText()); | 780 model()->PasteAndGo(GetClipboardText()); |
| 746 break; | 781 break; |
| 747 case IDS_SHOW_URL: | 782 case IDS_SHOW_URL: |
| 748 ShowURL(); | 783 controller()->ShowURL(); |
| 749 break; | 784 break; |
| 750 case IDC_EDIT_SEARCH_ENGINES: | 785 case IDC_EDIT_SEARCH_ENGINES: |
| 751 command_updater()->ExecuteCommand(command_id); | 786 command_updater()->ExecuteCommand(command_id); |
| 752 break; | 787 break; |
| 753 | 788 |
| 754 default: | 789 default: |
| 755 OnBeforePossibleChange(); | 790 OnBeforePossibleChange(); |
| 756 if (command_id == IDS_APP_PASTE) | 791 if (command_id == IDS_APP_PASTE) |
| 757 OnPaste(); | 792 OnPaste(); |
| 758 else if (Textfield::IsCommandIdEnabled(command_id)) | 793 else if (Textfield::IsCommandIdEnabled(command_id)) |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 997 const base::string16 text(GetClipboardText()); | 1032 const base::string16 text(GetClipboardText()); |
| 998 if (!text.empty()) { | 1033 if (!text.empty()) { |
| 999 // Record this paste, so we can do different behavior. | 1034 // Record this paste, so we can do different behavior. |
| 1000 model()->OnPaste(); | 1035 model()->OnPaste(); |
| 1001 // Force a Paste operation to trigger the text_changed code in | 1036 // Force a Paste operation to trigger the text_changed code in |
| 1002 // OnAfterPossibleChange(), even if identical contents are pasted. | 1037 // OnAfterPossibleChange(), even if identical contents are pasted. |
| 1003 text_before_change_.clear(); | 1038 text_before_change_.clear(); |
| 1004 InsertOrReplaceText(text); | 1039 InsertOrReplaceText(text); |
| 1005 } | 1040 } |
| 1006 } | 1041 } |
| OLD | NEW |