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

Side by Side Diff: chrome/browser/chromeos/input_method/input_method_engine.cc

Issue 346513003: Adds the legacy KeyboardEvent.keyCode attribute for extension IMEs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: make keyCode attribute optional, and fix tests. Created 6 years, 6 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/chromeos/input_method/input_method_engine.h" 5 #include "chrome/browser/chromeos/input_method/input_method_engine.h"
6 6
7 #undef FocusIn 7 #undef FocusIn
8 #undef FocusOut 8 #undef FocusOut
9 #undef RootWindow 9 #undef RootWindow
10 #include <map> 10 #include <map>
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 event.key_code(), 85 event.key_code(),
86 event.flags() ^ ui::EF_CONTROL_DOWN, 86 event.flags() ^ ui::EF_CONTROL_DOWN,
87 false); 87 false);
88 ch = event_no_ctrl.GetCharacter(); 88 ch = event_no_ctrl.GetCharacter();
89 } else { 89 } else {
90 ch = event.GetCharacter(); 90 ch = event.GetCharacter();
91 } 91 }
92 return base::UTF16ToUTF8(base::string16(1, ch)); 92 return base::UTF16ToUTF8(base::string16(1, ch));
93 } 93 }
94 94
95 void GetExtensionKeyboardEventFromKeyEvent(
96 const ui::KeyEvent& event,
97 InputMethodEngine::KeyboardEvent* ext_event) {
98 DCHECK(event.type() == ui::ET_KEY_RELEASED ||
99 event.type() == ui::ET_KEY_PRESSED);
100 DCHECK(ext_event);
101 ext_event->type = (event.type() == ui::ET_KEY_RELEASED) ? "keyup" : "keydown";
102
103 ext_event->code = event.code();
104 ext_event->key_code = static_cast<int>(event.key_code());
105 ext_event->alt_key = event.IsAltDown();
106 ext_event->ctrl_key = event.IsControlDown();
107 ext_event->shift_key = event.IsShiftDown();
108 ext_event->caps_lock = event.IsCapsLockDown();
109 ext_event->key = GetKeyFromEvent(event);
110 }
111
95 } // namespace 112 } // namespace
96 113
97 InputMethodEngine::InputMethodEngine() 114 InputMethodEngine::InputMethodEngine()
98 : current_input_type_(ui::TEXT_INPUT_TYPE_NONE), 115 : current_input_type_(ui::TEXT_INPUT_TYPE_NONE),
99 active_(false), 116 active_(false),
100 context_id_(0), 117 context_id_(0),
101 next_context_id_(1), 118 next_context_id_(1),
102 composition_text_(new CompositionText()), 119 composition_text_(new CompositionText()),
103 composition_cursor_(0), 120 composition_cursor_(0),
104 candidate_window_(new ui::CandidateWindow()), 121 candidate_window_(new ui::CandidateWindow()),
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 return false; 297 return false;
281 } 298 }
282 299
283 ui::EventProcessor* dispatcher = 300 ui::EventProcessor* dispatcher =
284 ash::Shell::GetPrimaryRootWindow()->GetHost()->event_processor(); 301 ash::Shell::GetPrimaryRootWindow()->GetHost()->event_processor();
285 302
286 for (size_t i = 0; i < events.size(); ++i) { 303 for (size_t i = 0; i < events.size(); ++i) {
287 const KeyboardEvent& event = events[i]; 304 const KeyboardEvent& event = events[i];
288 const ui::EventType type = 305 const ui::EventType type =
289 (event.type == "keyup") ? ui::ET_KEY_RELEASED : ui::ET_KEY_PRESSED; 306 (event.type == "keyup") ? ui::ET_KEY_RELEASED : ui::ET_KEY_PRESSED;
307 ui::KeyboardCode key_code = static_cast<ui::KeyboardCode>(event.key_code);
308 if (key_code == ui::VKEY_UNKNOWN)
309 key_code = ui::DomKeycodeToKeyboardCode(event.code);
290 310
291 int flags = ui::EF_NONE; 311 int flags = ui::EF_NONE;
292 flags |= event.alt_key ? ui::EF_ALT_DOWN : ui::EF_NONE; 312 flags |= event.alt_key ? ui::EF_ALT_DOWN : ui::EF_NONE;
293 flags |= event.ctrl_key ? ui::EF_CONTROL_DOWN : ui::EF_NONE; 313 flags |= event.ctrl_key ? ui::EF_CONTROL_DOWN : ui::EF_NONE;
294 flags |= event.shift_key ? ui::EF_SHIFT_DOWN : ui::EF_NONE; 314 flags |= event.shift_key ? ui::EF_SHIFT_DOWN : ui::EF_NONE;
295 flags |= event.caps_lock ? ui::EF_CAPS_LOCK_DOWN : ui::EF_NONE; 315 flags |= event.caps_lock ? ui::EF_CAPS_LOCK_DOWN : ui::EF_NONE;
296 316
297 ui::KeyEvent ui_event(type, 317 ui::KeyEvent ui_event(type,
298 ui::DomKeycodeToKeyboardCode(event.code), 318 key_code,
299 event.code, 319 event.code,
300 flags, 320 flags,
301 false /* is_char */); 321 false /* is_char */);
302 if (!event.key.empty()) 322 if (!event.key.empty())
303 ui_event.set_character(base::UTF8ToUTF16(event.key)[0]); 323 ui_event.set_character(base::UTF8ToUTF16(event.key)[0]);
304 base::AutoReset<const ui::KeyEvent*> reset_sent_key(&sent_key_event_, 324 base::AutoReset<const ui::KeyEvent*> reset_sent_key(&sent_key_event_,
305 &ui_event); 325 &ui_event);
306 ui::EventDispatchDetails details = dispatcher->OnEventFromSource(&ui_event); 326 ui::EventDispatchDetails details = dispatcher->OnEventFromSource(&ui_event);
307 if (details.dispatcher_destroyed) 327 if (details.dispatcher_destroyed)
308 break; 328 break;
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 } 613 }
594 614
595 void InputMethodEngine::PropertyActivate(const std::string& property_name) { 615 void InputMethodEngine::PropertyActivate(const std::string& property_name) {
596 observer_->OnMenuItemActivated(engine_id_, property_name); 616 observer_->OnMenuItemActivated(engine_id_, property_name);
597 } 617 }
598 618
599 void InputMethodEngine::Reset() { 619 void InputMethodEngine::Reset() {
600 observer_->OnReset(engine_id_); 620 observer_->OnReset(engine_id_);
601 } 621 }
602 622
603 namespace {
604
605 void GetExtensionKeyboardEventFromKeyEvent(
606 const ui::KeyEvent& event,
607 InputMethodEngine::KeyboardEvent* ext_event) {
608 DCHECK(event.type() == ui::ET_KEY_RELEASED ||
609 event.type() == ui::ET_KEY_PRESSED);
610 DCHECK(ext_event);
611 ext_event->type = (event.type() == ui::ET_KEY_RELEASED) ? "keyup" : "keydown";
612
613 ext_event->code = event.code();
614 ext_event->alt_key = event.IsAltDown();
615 ext_event->ctrl_key = event.IsControlDown();
616 ext_event->shift_key = event.IsShiftDown();
617 ext_event->caps_lock = event.IsCapsLockDown();
618 ext_event->key = GetKeyFromEvent(event);
619 }
620
621 } // namespace
622
623 void InputMethodEngine::ProcessKeyEvent( 623 void InputMethodEngine::ProcessKeyEvent(
624 const ui::KeyEvent& key_event, 624 const ui::KeyEvent& key_event,
625 const KeyEventDoneCallback& callback) { 625 const KeyEventDoneCallback& callback) {
626 626
627 KeyEventDoneCallback *handler = new KeyEventDoneCallback(); 627 KeyEventDoneCallback *handler = new KeyEventDoneCallback();
628 *handler = callback; 628 *handler = callback;
629 629
630 KeyboardEvent ext_event; 630 KeyboardEvent ext_event;
631 GetExtensionKeyboardEventFromKeyEvent(key_event, &ext_event); 631 GetExtensionKeyboardEventFromKeyEvent(key_event, &ext_event);
632 632
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
698 // TODO(nona): Implement it. 698 // TODO(nona): Implement it.
699 break; 699 break;
700 } 700 }
701 } 701 }
702 } 702 }
703 703
704 // TODO(nona): Support item.children. 704 // TODO(nona): Support item.children.
705 } 705 }
706 706
707 } // namespace chromeos 707 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698