Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/ui/views/unhandled_keyboard_event_handler.h" | |
| 6 | |
| 7 #include "base/logging.h" | |
| 8 #include "content/public/browser/native_web_keyboard_event.h" | |
| 9 #include "ui/aura/event.h" | |
| 10 #include "ui/views/focus/focus_manager.h" | |
| 11 | |
| 12 namespace { | |
| 13 | |
| 14 using WebKit::WebInputEvent; | |
| 15 | |
| 16 // TODO(oshima): Use NativeWebKeyboardEvent.os_event to convert to Views event | |
| 17 // and remove the following functions. | |
| 18 | |
| 19 // Convert WebKi'ts event type to Views event type. | |
| 20 ui::EventType GetEventType(const NativeWebKeyboardEvent& event) { | |
| 21 switch (event.type) { | |
| 22 case WebInputEvent::RawKeyDown: | |
| 23 case WebInputEvent::KeyDown: | |
| 24 case WebInputEvent::Char: | |
| 25 return ui::ET_KEY_PRESSED; | |
| 26 case WebInputEvent::KeyUp: | |
| 27 return ui::ET_KEY_RELEASED; | |
| 28 default: | |
| 29 NOTREACHED() << "Unknown event type:" << event.type; | |
| 30 return ui::ET_UNKNOWN; | |
| 31 } | |
| 32 } | |
| 33 | |
| 34 // Converts WebKit's modifiers to View's event flag. | |
| 35 ui::EventFlags ConvertModifier(const NativeWebKeyboardEvent& event, | |
| 36 WebInputEvent::Modifiers modifier, | |
| 37 ui::EventFlags flag) { | |
| 38 return event.modifiers & modifier ? flag : static_cast<ui::EventFlags>(0); | |
| 39 } | |
| 40 | |
| 41 int GetEventFlag(const NativeWebKeyboardEvent& event) { | |
| 42 return | |
| 43 ConvertModifier(event, WebInputEvent::ShiftKey, ui::EF_SHIFT_DOWN) | | |
| 44 ConvertModifier(event, WebInputEvent::ControlKey, ui::EF_CONTROL_DOWN) | | |
| 45 ConvertModifier(event, WebInputEvent::AltKey, ui::EF_ALT_DOWN) | | |
| 46 ConvertModifier( | |
| 47 event, WebInputEvent::LeftButtonDown, ui::EF_LEFT_BUTTON_DOWN) | | |
| 48 ConvertModifier( | |
| 49 event, WebInputEvent::MiddleButtonDown, ui::EF_MIDDLE_BUTTON_DOWN) | | |
| 50 ConvertModifier( | |
| 51 event, WebInputEvent::RightButtonDown, ui::EF_RIGHT_BUTTON_DOWN) | | |
| 52 ConvertModifier(event, WebInputEvent::CapsLockOn, ui::EF_CAPS_LOCK_DOWN); | |
| 53 } | |
| 54 | |
| 55 } // namespace | |
| 56 | |
| 57 UnhandledKeyboardEventHandler::UnhandledKeyboardEventHandler() { | |
| 58 } | |
| 59 | |
| 60 void UnhandledKeyboardEventHandler::HandleKeyboardEvent( | |
| 61 const NativeWebKeyboardEvent& event, | |
| 62 views::FocusManager* focus_manager) { | |
| 63 if (!focus_manager) { | |
| 64 NOTREACHED(); | |
| 65 return; | |
| 66 } | |
| 67 if (event.os_event && !event.skip_in_browser) { | |
| 68 // The instance of event.os_event is not copied right now and | |
| 69 // cannot be used here. Convert NativeWebKeyboardEvent for now. | |
| 70 // TODO(oshima): Fix NativeWebKeyboardEvent so that we can | |
| 71 // use |KeyEvent(const NativeEvent)| constructor. | |
|
oshima
2011/12/16 00:34:37
I'm working on NativeWebKeyboard fix in separate C
| |
| 72 views::KeyEvent views_event( | |
| 73 GetEventType(event), | |
| 74 static_cast<ui::KeyboardCode>(event.windowsKeyCode), | |
| 75 GetEventFlag(event)); | |
| 76 focus_manager->OnKeyEvent(views_event); | |
| 77 } | |
| 78 } | |
| OLD | NEW |