OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 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 | 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 "views/events/event.h" | 5 #include "views/events/event.h" |
6 | 6 |
7 #include <gdk/gdk.h> | 7 #include <gdk/gdk.h> |
8 | 8 |
| 9 #include "base/logging.h" |
9 #include "ui/base/keycodes/keyboard_code_conversion_gtk.h" | 10 #include "ui/base/keycodes/keyboard_code_conversion_gtk.h" |
10 | 11 |
11 namespace views { | 12 namespace views { |
12 | 13 |
13 KeyEvent::KeyEvent(const GdkEventKey* event) | 14 namespace { |
14 : Event(event->type == GDK_KEY_PRESS ? | 15 |
15 ui::ET_KEY_PRESSED : ui::ET_KEY_RELEASED, | 16 ui::EventType EventTypeFromNative(NativeEvent native_event) { |
16 GetFlagsFromGdkState(event->state)), | 17 switch (native_event->type) { |
17 // TODO(erg): All these values are iffy. | 18 case GDK_KEY_PRESS: |
18 key_code_(ui::WindowsKeyCodeForGdkKeyCode(event->keyval)), | 19 return ui::ET_KEY_PRESSED; |
19 repeat_count_(0), | 20 case GDK_KEY_RELEASE: |
20 message_flags_(0) | 21 return ui::ET_KEY_RELEASED; |
21 #if !defined(TOUCH_UI) | 22 default: |
22 , native_event_(event) | 23 NOTREACHED(); |
23 #endif | 24 break; |
24 { | 25 } |
| 26 return ui::ET_UNKNOWN; |
25 } | 27 } |
26 | 28 |
| 29 GdkEventKey* GetGdkEventKeyFromNative(NativeEvent native_event) { |
| 30 DCHECK(native_event->type == GDK_KEY_PRESS || |
| 31 native_event->type == GDK_KEY_RELEASE); |
| 32 return &native_event->key; |
| 33 } |
| 34 |
| 35 } // namespace |
| 36 |
| 37 //////////////////////////////////////////////////////////////////////////////// |
| 38 // Event, public: |
| 39 |
27 // static | 40 // static |
28 int Event::GetFlagsFromGdkState(int state) { | 41 int Event::GetFlagsFromGdkState(int state) { |
29 int flags = 0; | 42 int flags = 0; |
30 if (state & GDK_LOCK_MASK) | 43 if (state & GDK_LOCK_MASK) |
31 flags |= ui::EF_CAPS_LOCK_DOWN; | 44 flags |= ui::EF_CAPS_LOCK_DOWN; |
32 if (state & GDK_CONTROL_MASK) | 45 if (state & GDK_CONTROL_MASK) |
33 flags |= ui::EF_CONTROL_DOWN; | 46 flags |= ui::EF_CONTROL_DOWN; |
34 if (state & GDK_SHIFT_MASK) | 47 if (state & GDK_SHIFT_MASK) |
35 flags |= ui::EF_SHIFT_DOWN; | 48 flags |= ui::EF_SHIFT_DOWN; |
36 if (state & GDK_MOD1_MASK) | 49 if (state & GDK_MOD1_MASK) |
37 flags |= ui::EF_ALT_DOWN; | 50 flags |= ui::EF_ALT_DOWN; |
38 if (state & GDK_BUTTON1_MASK) | 51 if (state & GDK_BUTTON1_MASK) |
39 flags |= ui::EF_LEFT_BUTTON_DOWN; | 52 flags |= ui::EF_LEFT_BUTTON_DOWN; |
40 if (state & GDK_BUTTON2_MASK) | 53 if (state & GDK_BUTTON2_MASK) |
41 flags |= ui::EF_MIDDLE_BUTTON_DOWN; | 54 flags |= ui::EF_MIDDLE_BUTTON_DOWN; |
42 if (state & GDK_BUTTON3_MASK) | 55 if (state & GDK_BUTTON3_MASK) |
43 flags |= ui::EF_RIGHT_BUTTON_DOWN; | 56 flags |= ui::EF_RIGHT_BUTTON_DOWN; |
44 return flags; | 57 return flags; |
45 } | 58 } |
46 | 59 |
| 60 //////////////////////////////////////////////////////////////////////////////// |
| 61 // Event, private: |
| 62 |
| 63 void Event::Init() { |
| 64 native_event_ = NULL; |
| 65 native_event_2_ = NULL; |
| 66 } |
| 67 |
| 68 void Event::InitWithNativeEvent(NativeEvent native_event) { |
| 69 native_event_ = native_event; |
| 70 // TODO(beng): remove once we rid views of Gtk/Gdk. |
| 71 native_event_2_ = NULL; |
| 72 } |
| 73 |
| 74 #if !defined(TOUCH_UI) |
| 75 void Event::InitWithNativeEvent2(NativeEvent2 native_event_2, |
| 76 FromNativeEvent2) { |
| 77 // No one should ever call this on non-Touch Linux. |
| 78 // TODO(beng): remove once we rid views of Gtk/Gdk. |
| 79 NOTREACHED(); |
| 80 native_event_2_ = NULL; |
| 81 } |
| 82 #endif |
| 83 |
| 84 //////////////////////////////////////////////////////////////////////////////// |
| 85 // KeyEvent, public: |
| 86 |
| 87 KeyEvent::KeyEvent(NativeEvent native_event) |
| 88 : Event(native_event, EventTypeFromNative(native_event), |
| 89 GetFlagsFromGdkState( |
| 90 GetGdkEventKeyFromNative(native_event)->state)), |
| 91 key_code_(ui::WindowsKeyCodeForGdkKeyCode( |
| 92 GetGdkEventKeyFromNative(native_event)->keyval)) { |
| 93 } |
| 94 |
| 95 #if !defined(TOUCH_UI) |
| 96 KeyEvent::KeyEvent(NativeEvent2 native_event_2, FromNativeEvent2 from_native) |
| 97 : Event(native_event_2, ui::ET_UNKNOWN, 0, from_native) { |
| 98 // No one should ever call this on Gtk-views. |
| 99 // TODO(beng): remove once we rid views of Gtk/Gdk. |
| 100 NOTREACHED(); |
| 101 } |
| 102 #endif |
| 103 |
47 } // namespace views | 104 } // namespace views |
OLD | NEW |