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 true; |
| 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 |