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 <set> | 7 #include <set> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 const gfx::Range& selection, | 94 const gfx::Range& selection, |
95 const gfx::Range& saved_selection_for_focus_change) | 95 const gfx::Range& saved_selection_for_focus_change) |
96 : model_state(model_state), | 96 : model_state(model_state), |
97 selection(selection), | 97 selection(selection), |
98 saved_selection_for_focus_change(saved_selection_for_focus_change) { | 98 saved_selection_for_focus_change(saved_selection_for_focus_change) { |
99 } | 99 } |
100 | 100 |
101 OmniboxState::~OmniboxState() { | 101 OmniboxState::~OmniboxState() { |
102 } | 102 } |
103 | 103 |
104 | |
105 // Helpers -------------------------------------------------------------------- | |
106 | |
107 // We'd like to set the text input type to TEXT_INPUT_TYPE_URL, because this | |
108 // triggers URL-specific layout in software keyboards, e.g. adding top-level "/" | |
109 // and ".com" keys for English. However, this also causes IMEs to default to | |
110 // Latin character mode, which makes entering search queries difficult for IME | |
111 // users. Therefore, we try to guess whether an IME will be used based on the | |
112 // application language, and set the input type accordingly. | |
113 ui::TextInputType DetermineTextInputType() { | |
114 #if defined(OS_WIN) | |
115 DCHECK(g_browser_process); | |
116 const std::string& locale = g_browser_process->GetApplicationLocale(); | |
117 const std::string& language = locale.substr(0, 2); | |
118 // Assume CJK + Thai users are using an IME. | |
119 if (language == "ja" || | |
120 language == "ko" || | |
121 language == "th" || | |
122 language == "zh") | |
123 return ui::TEXT_INPUT_TYPE_SEARCH; | |
124 #endif | |
125 return ui::TEXT_INPUT_TYPE_URL; | |
126 } | |
127 | |
128 } // namespace | 104 } // namespace |
129 | 105 |
130 | 106 |
131 // OmniboxViewViews ----------------------------------------------------------- | 107 // OmniboxViewViews ----------------------------------------------------------- |
132 | 108 |
133 // static | 109 // static |
134 const char OmniboxViewViews::kViewClassName[] = "OmniboxViewViews"; | 110 const char OmniboxViewViews::kViewClassName[] = "OmniboxViewViews"; |
135 | 111 |
136 OmniboxViewViews::OmniboxViewViews(OmniboxEditController* controller, | 112 OmniboxViewViews::OmniboxViewViews(OmniboxEditController* controller, |
137 Profile* profile, | 113 Profile* profile, |
(...skipping 26 matching lines...) Expand all Loading... |
164 RemoveCandidateWindowObserver(this); | 140 RemoveCandidateWindowObserver(this); |
165 #endif | 141 #endif |
166 | 142 |
167 // Explicitly teardown members which have a reference to us. Just to be safe | 143 // Explicitly teardown members which have a reference to us. Just to be safe |
168 // we want them to be destroyed before destroying any other internal state. | 144 // we want them to be destroyed before destroying any other internal state. |
169 popup_view_.reset(); | 145 popup_view_.reset(); |
170 } | 146 } |
171 | 147 |
172 void OmniboxViewViews::Init() { | 148 void OmniboxViewViews::Init() { |
173 set_controller(this); | 149 set_controller(this); |
174 SetTextInputType(DetermineTextInputType()); | 150 SetTextInputType(ui::TEXT_INPUT_TYPE_URL); |
175 | 151 |
176 if (popup_window_mode_) | 152 if (popup_window_mode_) |
177 SetReadOnly(true); | 153 SetReadOnly(true); |
178 | 154 |
179 if (location_bar_view_) { | 155 if (location_bar_view_) { |
180 // Initialize the popup view using the same font. | 156 // Initialize the popup view using the same font. |
181 popup_view_.reset(OmniboxPopupContentsView::Create( | 157 popup_view_.reset(OmniboxPopupContentsView::Create( |
182 GetFontList(), this, model(), location_bar_view_)); | 158 GetFontList(), this, model(), location_bar_view_)); |
183 } | 159 } |
184 | 160 |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 Textfield::ExecuteCommand(command_id, event_flags); | 348 Textfield::ExecuteCommand(command_id, event_flags); |
373 return; | 349 return; |
374 } | 350 } |
375 OnBeforePossibleChange(); | 351 OnBeforePossibleChange(); |
376 location_bar_view_->command_updater()->ExecuteCommand(command_id); | 352 location_bar_view_->command_updater()->ExecuteCommand(command_id); |
377 OnAfterPossibleChange(true); | 353 OnAfterPossibleChange(true); |
378 return; | 354 return; |
379 } | 355 } |
380 } | 356 } |
381 | 357 |
| 358 ui::TextInputType OmniboxViewViews::GetTextInputType() const { |
| 359 ui::TextInputType input_type = views::Textfield::GetTextInputType(); |
| 360 // We'd like to set the text input type to TEXT_INPUT_TYPE_URL, because this |
| 361 // triggers URL-specific layout in software keyboards, e.g. adding top-level |
| 362 // "/" and ".com" keys for English. However, this also causes IMEs to default |
| 363 // to Latin character mode, which makes entering search queries difficult for |
| 364 // IME users. Therefore, we try to guess whether an IME will be used based on |
| 365 // the input language, and set the input type accordingly. |
| 366 #if defined(OS_WIN) |
| 367 if (input_type != ui::TEXT_INPUT_TYPE_NONE && location_bar_view_) { |
| 368 ui::InputMethod* input_method = |
| 369 location_bar_view_->GetWidget()->GetInputMethod(); |
| 370 if (input_method && input_method->IsInputLocaleCJK()) |
| 371 return ui::TEXT_INPUT_TYPE_SEARCH; |
| 372 } |
| 373 #endif |
| 374 return input_type; |
| 375 } |
| 376 |
| 377 |
382 void OmniboxViewViews::SetTextAndSelectedRange(const base::string16& text, | 378 void OmniboxViewViews::SetTextAndSelectedRange(const base::string16& text, |
383 const gfx::Range& range) { | 379 const gfx::Range& range) { |
384 SetText(text); | 380 SetText(text); |
385 SelectRange(range); | 381 SelectRange(range); |
386 } | 382 } |
387 | 383 |
388 base::string16 OmniboxViewViews::GetSelectedText() const { | 384 base::string16 OmniboxViewViews::GetSelectedText() const { |
389 // TODO(oshima): Support IME. | 385 // TODO(oshima): Support IME. |
390 return views::Textfield::GetSelectedText(); | 386 return views::Textfield::GetSelectedText(); |
391 } | 387 } |
(...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1086 paste_position + 1, IDS_PASTE_AND_GO, IDS_PASTE_AND_GO); | 1082 paste_position + 1, IDS_PASTE_AND_GO, IDS_PASTE_AND_GO); |
1087 | 1083 |
1088 menu_contents->AddSeparator(ui::NORMAL_SEPARATOR); | 1084 menu_contents->AddSeparator(ui::NORMAL_SEPARATOR); |
1089 | 1085 |
1090 // Minor note: We use IDC_ for command id here while the underlying textfield | 1086 // Minor note: We use IDC_ for command id here while the underlying textfield |
1091 // is using IDS_ for all its command ids. This is because views cannot depend | 1087 // is using IDS_ for all its command ids. This is because views cannot depend |
1092 // on IDC_ for now. | 1088 // on IDC_ for now. |
1093 menu_contents->AddItemWithStringId(IDC_EDIT_SEARCH_ENGINES, | 1089 menu_contents->AddItemWithStringId(IDC_EDIT_SEARCH_ENGINES, |
1094 IDS_EDIT_SEARCH_ENGINES); | 1090 IDS_EDIT_SEARCH_ENGINES); |
1095 } | 1091 } |
OLD | NEW |