Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(560)

Side by Side Diff: chrome/browser/extensions/extension_input_api.cc

Issue 10399046: Remove virtual keyboard support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: final rebase Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/extensions/extension_input_api.h" 5 #include "chrome/browser/extensions/extension_input_api.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "base/values.h" 11 #include "base/values.h"
12 #include "chrome/browser/extensions/key_identifier_conversion_views.h" 12 #include "chrome/browser/extensions/key_identifier_conversion_views.h"
13 #include "chrome/browser/ui/browser.h" 13 #include "chrome/browser/ui/browser.h"
14 #include "chrome/browser/ui/browser_window.h" 14 #include "chrome/browser/ui/browser_window.h"
15 #include "chrome/browser/ui/views/frame/browser_view.h" 15 #include "chrome/browser/ui/views/frame/browser_view.h"
16 #include "chrome/common/chrome_notification_types.h" 16 #include "chrome/common/chrome_notification_types.h"
17 #include "ui/views/events/event.h" 17 #include "ui/views/events/event.h"
18 #include "ui/views/ime/input_method.h" 18 #include "ui/views/ime/input_method.h"
19 #include "ui/views/views_delegate.h" 19 #include "ui/views/views_delegate.h"
20 #include "ui/views/widget/widget.h" 20 #include "ui/views/widget/widget.h"
21 21
22 #if defined(USE_VIRTUAL_KEYBOARD)
23 #include "content/public/browser/notification_service.h"
24 #endif
25
26 #if defined(OS_CHROMEOS) && defined(USE_VIRTUAL_KEYBOARD)
27 #include "chrome/browser/chromeos/input_method/input_method_manager.h"
28 #include "chrome/browser/chromeos/login/base_login_display_host.h"
29 #endif
30
31 namespace { 22 namespace {
32 23
33 // Keys. 24 // Keys.
34 const char kType[] = "type"; 25 const char kType[] = "type";
35 const char kKeyIdentifier[] = "keyIdentifier"; 26 const char kKeyIdentifier[] = "keyIdentifier";
36 const char kAlt[] = "altKey"; 27 const char kAlt[] = "altKey";
37 const char kCtrl[] = "ctrlKey"; 28 const char kCtrl[] = "ctrlKey";
38 const char kMeta[] = "metaKey"; 29 const char kMeta[] = "metaKey";
39 const char kShift[] = "shiftKey"; 30 const char kShift[] = "shiftKey";
40 const char kKeyDown[] = "keydown"; 31 const char kKeyDown[] = "keydown";
(...skipping 25 matching lines...) Expand all
66 (key_identifier.substr(2).find_first_not_of("0123456789abcdefABCDEF") == 57 (key_identifier.substr(2).find_first_not_of("0123456789abcdefABCDEF") ==
67 std::string::npos)) { 58 std::string::npos)) {
68 const bool result = 59 const bool result =
69 base::HexStringToInt(key_identifier.substr(2), &character); 60 base::HexStringToInt(key_identifier.substr(2), &character);
70 DCHECK(result) << key_identifier; 61 DCHECK(result) << key_identifier;
71 } 62 }
72 return character; 63 return character;
73 } 64 }
74 65
75 views::Widget* GetTopLevelWidget(Browser* browser) { 66 views::Widget* GetTopLevelWidget(Browser* browser) {
76 #if defined(OS_CHROMEOS) && defined(USE_VIRTUAL_KEYBOARD)
77 chromeos::LoginDisplayHost* host =
78 chromeos::BaseLoginDisplayHost::default_host();
79 if (host)
80 return views::Widget::GetWidgetForNativeWindow(host->GetNativeWindow());
81 #endif
82
83 if (!browser) 67 if (!browser)
84 return NULL; 68 return NULL;
85 69
86 BrowserWindow* window = browser->window(); 70 BrowserWindow* window = browser->window();
87 if (!window) 71 if (!window)
88 return NULL; 72 return NULL;
89 73
90 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser); 74 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
91 return browser_view ? browser_view->GetWidget() : NULL; 75 return browser_view ? browser_view->GetWidget() : NULL;
92 } 76 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 views::InputMethod* ime = widget->GetInputMethod(); 133 views::InputMethod* ime = widget->GetInputMethod();
150 if (ime) { 134 if (ime) {
151 ime->DispatchKeyEvent(event); 135 ime->DispatchKeyEvent(event);
152 } else if (!widget->OnKeyEvent(event)) { 136 } else if (!widget->OnKeyEvent(event)) {
153 error_ = kKeyEventUnprocessedError; 137 error_ = kKeyEventUnprocessedError;
154 return false; 138 return false;
155 } 139 }
156 140
157 return true; 141 return true;
158 } 142 }
159
160 #if defined(USE_VIRTUAL_KEYBOARD)
161 bool HideKeyboardFunction::RunImpl() {
162 content::NotificationService::current()->Notify(
163 chrome::NOTIFICATION_HIDE_KEYBOARD_INVOKED,
164 content::Source<HideKeyboardFunction>(this),
165 content::NotificationService::NoDetails());
166 return true;
167 }
168
169 bool SetKeyboardHeightFunction::RunImpl() {
170 int height = 0;
171 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &height));
172
173 if (height < 0) {
174 error_ = kInvalidHeight;
175 return false;
176 }
177
178 // TODO(penghuang) Check the height is not greater than height of browser view
179 // and set the height of virtual keyboard directly instead of using
180 // notification.
181 content::NotificationService::current()->Notify(
182 chrome::NOTIFICATION_SET_KEYBOARD_HEIGHT_INVOKED,
183 content::Source<SetKeyboardHeightFunction>(this),
184 content::Details<int>(&height));
185 return true;
186 }
187 #endif
188
189 #if defined(OS_CHROMEOS) && defined(USE_VIRTUAL_KEYBOARD)
190 // TODO(yusukes): This part should be moved to extension_input_api_chromeos.cc.
191 bool SendHandwritingStrokeFunction::RunImpl() {
192 // TODO(yusukes): Add a parameter for an input context ID.
193 ListValue* value = NULL;
194 EXTENSION_FUNCTION_VALIDATE(args_->GetList(0, &value));
195
196 chromeos::input_method::HandwritingStroke stroke;
197 for (size_t i = 0; i < value->GetSize(); ++i) {
198 DictionaryValue* dict;
199 double x = 0.0;
200 double y = 0.0;
201 EXTENSION_FUNCTION_VALIDATE(value->GetDictionary(i, &dict));
202 EXTENSION_FUNCTION_VALIDATE(dict->GetDouble("x", &x));
203 EXTENSION_FUNCTION_VALIDATE(dict->GetDouble("y", &y));
204 stroke.push_back(std::make_pair(x, y));
205 }
206
207 views::Widget* widget = GetTopLevelWidget(GetCurrentBrowser());
208 views::InputMethod* ime = widget ? widget->GetInputMethod() : NULL;
209 if (ime) {
210 static const views::KeyEvent* dummy_keydown = new views::KeyEvent(
211 ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, 0);
212 static const views::KeyEvent* dummy_keyup = new views::KeyEvent(
213 ui::ET_KEY_RELEASED, ui::VKEY_UNKNOWN, 0);
214 // These fake key events are necessary for clearing |suppress_next_result_|
215 // flag in view/ime/input_method_*.cc. Otherwise, clicking a candidate in
216 // the candidate window might be ignored.
217 ime->DispatchKeyEvent(*dummy_keydown);
218 ime->DispatchKeyEvent(*dummy_keyup);
219 }
220
221 chromeos::input_method::InputMethodManager::GetInstance()->
222 SendHandwritingStroke(stroke);
223 return true;
224 }
225
226 bool CancelHandwritingStrokesFunction::RunImpl() {
227 // TODO(yusukes): Add a parameter for an input context ID.
228 int stroke_count = 0; // zero means 'clear all strokes'.
229 if (HasOptionalArgument(0)) {
230 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &stroke_count));
231 EXTENSION_FUNCTION_VALIDATE(stroke_count >= 0);
232 }
233 chromeos::input_method::InputMethodManager::GetInstance()->
234 CancelHandwritingStrokes(stroke_count);
235 return true;
236 }
237 #endif
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_input_api.h ('k') | chrome/browser/extensions/extension_input_ui_api.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698