OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/event.h" | 5 #include "views/event.h" |
6 | 6 |
7 #include <gdk/gdk.h> | 7 #include <gdk/gdk.h> |
8 | 8 |
9 namespace views { | 9 namespace views { |
10 | 10 |
11 KeyEvent::KeyEvent(GdkEventKey* event) | 11 // TODO(jcampan): the same physical key can send different keyvals (ex: a or A). |
| 12 // In order for accelerators to work, we need to normalize that. The right |
| 13 // solution should probably to get the key-code out of the keystate. |
| 14 KeyEvent::KeyEvent(GdkEventKey* event, bool make_upper_case) |
12 : Event(event->type == GDK_KEY_PRESS ? | 15 : Event(event->type == GDK_KEY_PRESS ? |
13 Event::ET_KEY_PRESSED : Event::ET_KEY_RELEASED, | 16 Event::ET_KEY_PRESSED : Event::ET_KEY_RELEASED, |
14 GetFlagsFromGdkState(event->state)), | 17 GetFlagsFromGdkState(event->state)), |
15 // TODO(erg): All these values are iffy. | 18 // TODO(erg): All these values are iffy. |
16 character_(event->keyval), | 19 character_(make_upper_case ? gdk_keyval_to_upper (event->keyval) : |
| 20 event->keyval), |
17 repeat_count_(0), | 21 repeat_count_(0), |
18 message_flags_(0) { | 22 message_flags_(0) { |
19 } | 23 } |
20 | 24 |
21 int Event::GetFlagsFromGdkState(int state) { | 25 int Event::GetFlagsFromGdkState(int state) { |
22 int flags = 0; | 26 int flags = 0; |
23 if (state & GDK_CONTROL_MASK) | 27 if (state & GDK_CONTROL_MASK) |
24 flags |= Event::EF_CONTROL_DOWN; | 28 flags |= Event::EF_CONTROL_DOWN; |
25 if (state & GDK_SHIFT_MASK) | 29 if (state & GDK_SHIFT_MASK) |
26 flags |= Event::EF_SHIFT_DOWN; | 30 flags |= Event::EF_SHIFT_DOWN; |
27 if (state & GDK_MOD1_MASK) | 31 if (state & GDK_MOD1_MASK) |
28 flags |= Event::EF_ALT_DOWN; | 32 flags |= Event::EF_ALT_DOWN; |
29 if (state & GDK_BUTTON1_MASK) | 33 if (state & GDK_BUTTON1_MASK) |
30 flags |= Event::EF_LEFT_BUTTON_DOWN; | 34 flags |= Event::EF_LEFT_BUTTON_DOWN; |
31 if (state & GDK_BUTTON2_MASK) | 35 if (state & GDK_BUTTON2_MASK) |
32 flags |= Event::EF_MIDDLE_BUTTON_DOWN; | 36 flags |= Event::EF_MIDDLE_BUTTON_DOWN; |
33 if (state & GDK_BUTTON3_MASK) | 37 if (state & GDK_BUTTON3_MASK) |
34 flags |= Event::EF_RIGHT_BUTTON_DOWN; | 38 flags |= Event::EF_RIGHT_BUTTON_DOWN; |
35 return flags; | 39 return flags; |
36 } | 40 } |
37 | 41 |
38 } // namespace views | 42 } // namespace views |
OLD | NEW |