OLD | NEW |
---|---|
1 // Copyright (c) 2011 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/gdkx.h> | 8 #include <gdk/gdkx.h> |
8 #if defined(HAVE_XINPUT2) | 9 #if defined(HAVE_XINPUT2) |
9 #include <X11/extensions/XInput2.h> | 10 #include <X11/extensions/XInput2.h> |
10 #endif | 11 #endif |
12 #include <X11/Xlib.h> | |
11 | 13 |
14 #include "base/utf_string_conversions.h" | |
12 #include "ui/base/keycodes/keyboard_code_conversion_x.h" | 15 #include "ui/base/keycodes/keyboard_code_conversion_x.h" |
13 #include "views/widget/root_view.h" | 16 #include "views/widget/root_view.h" |
14 #include "views/widget/widget_gtk.h" | 17 #include "views/widget/widget_gtk.h" |
15 | 18 |
16 namespace views { | 19 namespace views { |
17 | 20 |
18 namespace { | 21 namespace { |
19 | 22 |
20 // Scroll amount for each wheelscroll event. 53 is also the value used for GTK+. | 23 // Scroll amount for each wheelscroll event. 53 is also the value used for GTK+. |
21 static int kWheelScrollAmount = 53; | 24 static int kWheelScrollAmount = 53; |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
206 return GetButtonMaskForX2Event(xievent) | | 209 return GetButtonMaskForX2Event(xievent) | |
207 GetEventFlagsFromXState(xievent->mods.effective); | 210 GetEventFlagsFromXState(xievent->mods.effective); |
208 } | 211 } |
209 } | 212 } |
210 #endif | 213 #endif |
211 } | 214 } |
212 | 215 |
213 return 0; | 216 return 0; |
214 } | 217 } |
215 | 218 |
219 uint16 GetCharacterFromXKeyEvent(XKeyEvent* key) { | |
220 char buf[7]; | |
Yusuke Sato
2011/03/18 12:07:41
I guess it should be either [6]; or [7] = {};
James Su
2011/03/18 15:54:09
Done.
| |
221 int bytes_written = XLookupString(key, buf, 6, NULL, NULL); | |
222 DCHECK(bytes_written <= 6); | |
223 | |
224 string16 result; | |
225 return (bytes_written > 0 && UTF8ToUTF16(buf, bytes_written, &result) && | |
226 result.length() == 1) ? result[0] : 0; | |
227 } | |
228 | |
216 } // namespace | 229 } // namespace |
217 | 230 |
218 //////////////////////////////////////////////////////////////////////////////// | 231 //////////////////////////////////////////////////////////////////////////////// |
219 // Event, private: | 232 // Event, private: |
220 | 233 |
221 void Event::InitWithNativeEvent2(NativeEvent2 native_event_2, | 234 void Event::InitWithNativeEvent2(NativeEvent2 native_event_2, |
222 FromNativeEvent2) { | 235 FromNativeEvent2) { |
223 native_event_ = NULL; | 236 native_event_ = NULL; |
224 // TODO(beng): remove once we rid views of Gtk/Gdk. | 237 // TODO(beng): remove once we rid views of Gtk/Gdk. |
225 native_event_2_ = native_event_2; | 238 native_event_2_ = native_event_2; |
(...skipping 15 matching lines...) Expand all Loading... | |
241 // KeyEvent, public: | 254 // KeyEvent, public: |
242 | 255 |
243 KeyEvent::KeyEvent(NativeEvent2 native_event_2, FromNativeEvent2 from_native) | 256 KeyEvent::KeyEvent(NativeEvent2 native_event_2, FromNativeEvent2 from_native) |
244 : Event(native_event_2, | 257 : Event(native_event_2, |
245 EventTypeFromNative(native_event_2), | 258 EventTypeFromNative(native_event_2), |
246 GetEventFlagsFromXState(native_event_2->xkey.state), | 259 GetEventFlagsFromXState(native_event_2->xkey.state), |
247 from_native), | 260 from_native), |
248 key_code_(ui::KeyboardCodeFromXKeyEvent(native_event_2)) { | 261 key_code_(ui::KeyboardCodeFromXKeyEvent(native_event_2)) { |
249 } | 262 } |
250 | 263 |
264 uint16 KeyEvent::GetCharacter() const { | |
265 if (!native_event_2()) | |
Yusuke Sato
2011/03/18 12:07:41
when native_event_2() can be NULL?
| |
266 return GetCharacterFromKeyCode(key_code_, flags()); | |
267 | |
268 DCHECK(native_event_2()->type == KeyPress || | |
269 native_event_2()->type == KeyRelease); | |
270 | |
271 uint16 ch = GetCharacterFromXKeyEvent(&native_event_2()->xkey); | |
272 return ch ? ch : GetCharacterFromKeyCode(key_code_, flags()); | |
273 } | |
274 | |
275 uint16 KeyEvent::GetUnmodifiedCharacter() const { | |
276 static const unsigned int kIgnoredModifiers = ControlMask | LockMask | | |
277 Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask; | |
278 | |
279 if (!native_event_2()) | |
Yusuke Sato
2011/03/18 12:07:41
ditto.
| |
280 return GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN); | |
281 | |
282 DCHECK(native_event_2()->type == KeyPress || | |
283 native_event_2()->type == KeyRelease); | |
284 | |
285 XKeyEvent key = native_event_2()->xkey; | |
286 | |
287 // We can't use things like (key.state & ShiftMask), as it may mask out bits | |
288 // used by X11 internally. | |
289 key.state &= ~kIgnoredModifiers; | |
290 uint16 ch = GetCharacterFromXKeyEvent(&key); | |
291 return ch ? ch : | |
292 GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN); | |
293 } | |
294 | |
251 //////////////////////////////////////////////////////////////////////////////// | 295 //////////////////////////////////////////////////////////////////////////////// |
252 // MouseEvent, public: | 296 // MouseEvent, public: |
253 | 297 |
254 MouseEvent::MouseEvent(NativeEvent2 native_event_2, | 298 MouseEvent::MouseEvent(NativeEvent2 native_event_2, |
255 FromNativeEvent2 from_native) | 299 FromNativeEvent2 from_native) |
256 : LocatedEvent(native_event_2, from_native) { | 300 : LocatedEvent(native_event_2, from_native) { |
257 } | 301 } |
258 | 302 |
259 //////////////////////////////////////////////////////////////////////////////// | 303 //////////////////////////////////////////////////////////////////////////////// |
260 // MouseWheelEvent, public: | 304 // MouseWheelEvent, public: |
(...skipping 11 matching lines...) Expand all Loading... | |
272 TouchEvent::TouchEvent(NativeEvent2 native_event_2, | 316 TouchEvent::TouchEvent(NativeEvent2 native_event_2, |
273 FromNativeEvent2 from_native) | 317 FromNativeEvent2 from_native) |
274 : LocatedEvent(GetTouchEventType(native_event_2), | 318 : LocatedEvent(GetTouchEventType(native_event_2), |
275 GetEventLocation(native_event_2), | 319 GetEventLocation(native_event_2), |
276 GetLocatedEventFlags(native_event_2, true)), | 320 GetLocatedEventFlags(native_event_2, true)), |
277 touch_id_(GetTouchIDFromXEvent(native_event_2)) { | 321 touch_id_(GetTouchIDFromXEvent(native_event_2)) { |
278 } | 322 } |
279 #endif | 323 #endif |
280 | 324 |
281 } // namespace views | 325 } // namespace views |
OLD | NEW |