OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <cstring> | 5 #include <cstring> |
6 | 6 |
7 #include <X11/extensions/XInput2.h> | 7 #include <X11/extensions/XInput2.h> |
8 #include <X11/Xlib.h> | 8 #include <X11/Xlib.h> |
9 #include <X11/Xutil.h> | 9 #include <X11/Xutil.h> |
10 #include <X11/XKBlib.h> | 10 #include <X11/XKBlib.h> |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
52 | 52 |
53 // We don't bother setting fields that the event code doesn't use, such as | 53 // We don't bother setting fields that the event code doesn't use, such as |
54 // x_root/y_root and window/root/subwindow. | 54 // x_root/y_root and window/root/subwindow. |
55 XKeyEvent* key_event = &(event->xkey); | 55 XKeyEvent* key_event = &(event->xkey); |
56 key_event->display = display; | 56 key_event->display = display; |
57 key_event->type = is_press ? KeyPress : KeyRelease; | 57 key_event->type = is_press ? KeyPress : KeyRelease; |
58 key_event->keycode = keycode; | 58 key_event->keycode = keycode; |
59 key_event->state = state; | 59 key_event->state = state; |
60 } | 60 } |
61 | 61 |
62 // Returns true if the keysym maps to a KeyEvent with the EF_FUNCTION_KEY | |
63 // flag set, or the keysym maps to a zero key code. | |
64 bool HasFunctionKeyFlagSetIfSupported(Display* display, int x_keysym) { | |
65 XEvent event; | |
66 int x_keycode = XKeysymToKeycode(display, x_keysym); | |
67 // Exclude keysyms for which the server has no corresponding keycode. | |
68 if (x_keycode) { | |
69 InitKeyEvent(display, &event, true, x_keycode, 0); | |
70 ui::KeyEvent ui_key_event(&event, false); | |
71 return (ui_key_event.flags() & ui::EF_FUNCTION_KEY); | |
72 } | |
73 return (x_keycode == 0); | |
sadrul
2014/06/02 14:37:07
return true; (if |x_keycode| isn't 0, we would ret
bruthig
2014/06/02 18:23:56
Done.
| |
74 } | |
75 | |
62 } // namespace | 76 } // namespace |
63 | 77 |
64 TEST(EventsXTest, ButtonEvents) { | 78 TEST(EventsXTest, ButtonEvents) { |
65 XEvent event; | 79 XEvent event; |
66 gfx::Point location(5, 10); | 80 gfx::Point location(5, 10); |
67 gfx::Vector2d offset; | 81 gfx::Vector2d offset; |
68 | 82 |
69 InitButtonEvent(&event, true, location, 1, 0); | 83 InitButtonEvent(&event, true, location, 1, 0); |
70 EXPECT_EQ(ui::ET_MOUSE_PRESSED, ui::EventTypeFromNative(&event)); | 84 EXPECT_EQ(ui::ET_MOUSE_PRESSED, ui::EventTypeFromNative(&event)); |
71 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, ui::EventFlagsFromNative(&event)); | 85 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, ui::EventFlagsFromNative(&event)); |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
363 InitKeyEvent(display, &event, true, x_keycode, 0); | 377 InitKeyEvent(display, &event, true, x_keycode, 0); |
364 // int keysym = XLookupKeysym(&event.xkey, 0); | 378 // int keysym = XLookupKeysym(&event.xkey, 0); |
365 // if (keysym) { | 379 // if (keysym) { |
366 ui::KeyEvent ui_key_event(&event, false); | 380 ui::KeyEvent ui_key_event(&event, false); |
367 EXPECT_EQ(keys[k].is_numpad_key ? ui::EF_NUMPAD_KEY : 0, | 381 EXPECT_EQ(keys[k].is_numpad_key ? ui::EF_NUMPAD_KEY : 0, |
368 ui_key_event.flags() & ui::EF_NUMPAD_KEY); | 382 ui_key_event.flags() & ui::EF_NUMPAD_KEY); |
369 } | 383 } |
370 } | 384 } |
371 } | 385 } |
372 | 386 |
387 TEST(EventsXTest, FunctionKeyEvents) { | |
388 Display* display = gfx::GetXDisplay(); | |
389 | |
390 // Min function key code minus 1. | |
391 EXPECT_FALSE(HasFunctionKeyFlagSetIfSupported(display, XK_F1 - 1)); | |
392 // All function keys. | |
393 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F1)); | |
394 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F2)); | |
395 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F3)); | |
396 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F4)); | |
397 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F5)); | |
398 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F6)); | |
399 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F7)); | |
400 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F8)); | |
401 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F9)); | |
402 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F10)); | |
403 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F11)); | |
404 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F12)); | |
405 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F13)); | |
406 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F14)); | |
407 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F15)); | |
408 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F16)); | |
409 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F17)); | |
410 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F18)); | |
411 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F19)); | |
412 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F20)); | |
413 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F21)); | |
414 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F22)); | |
415 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F23)); | |
416 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F24)); | |
417 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F25)); | |
418 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F26)); | |
419 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F27)); | |
420 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F28)); | |
421 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F29)); | |
422 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F30)); | |
423 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F31)); | |
424 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F32)); | |
425 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F33)); | |
426 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F34)); | |
427 EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F35)); | |
428 // Max function key code plus 1. | |
429 EXPECT_FALSE(HasFunctionKeyFlagSetIfSupported(display, XK_F35 + 1)); | |
430 } | |
431 | |
373 } // namespace ui | 432 } // namespace ui |
OLD | NEW |