Chromium Code Reviews| 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 bool HasFunctionKeyFlagSet(Display* display, int x_keysym) { | |
| 63 XEvent event; | |
| 64 int x_keycode = XKeysymToKeycode(display, x_keysym); | |
| 65 // Exclude keysyms for which the server has no corresponding keycode. | |
| 66 if (x_keycode) { | |
| 67 InitKeyEvent(display, &event, true, x_keycode, 0); | |
| 68 ui::KeyEvent ui_key_event(&event, false); | |
| 69 return static_cast<bool>(ui_key_event.flags() & ui::EF_FUNCTION_KEY); | |
|
sadrul
2014/05/30 21:23:21
Can you just do 'return (flags & ui::EF_FUNCTION_K
bruthig
2014/06/02 14:22:01
Done.
| |
| 70 } | |
| 71 return false; | |
|
sadrul
2014/05/30 21:23:21
Call the function HasFunctionKeyFlagSetIfSupported
bruthig
2014/06/02 14:22:01
Done.
| |
| 72 } | |
| 73 | |
| 62 } // namespace | 74 } // namespace |
| 63 | 75 |
| 64 TEST(EventsXTest, ButtonEvents) { | 76 TEST(EventsXTest, ButtonEvents) { |
| 65 XEvent event; | 77 XEvent event; |
| 66 gfx::Point location(5, 10); | 78 gfx::Point location(5, 10); |
| 67 gfx::Vector2d offset; | 79 gfx::Vector2d offset; |
| 68 | 80 |
| 69 InitButtonEvent(&event, true, location, 1, 0); | 81 InitButtonEvent(&event, true, location, 1, 0); |
| 70 EXPECT_EQ(ui::ET_MOUSE_PRESSED, ui::EventTypeFromNative(&event)); | 82 EXPECT_EQ(ui::ET_MOUSE_PRESSED, ui::EventTypeFromNative(&event)); |
| 71 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, ui::EventFlagsFromNative(&event)); | 83 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); | 375 InitKeyEvent(display, &event, true, x_keycode, 0); |
| 364 // int keysym = XLookupKeysym(&event.xkey, 0); | 376 // int keysym = XLookupKeysym(&event.xkey, 0); |
| 365 // if (keysym) { | 377 // if (keysym) { |
| 366 ui::KeyEvent ui_key_event(&event, false); | 378 ui::KeyEvent ui_key_event(&event, false); |
| 367 EXPECT_EQ(keys[k].is_numpad_key ? ui::EF_NUMPAD_KEY : 0, | 379 EXPECT_EQ(keys[k].is_numpad_key ? ui::EF_NUMPAD_KEY : 0, |
| 368 ui_key_event.flags() & ui::EF_NUMPAD_KEY); | 380 ui_key_event.flags() & ui::EF_NUMPAD_KEY); |
| 369 } | 381 } |
| 370 } | 382 } |
| 371 } | 383 } |
| 372 | 384 |
| 385 TEST(EventsXTest, FunctionKeyEvents) { | |
| 386 Display* display = gfx::GetXDisplay(); | |
| 387 | |
| 388 // Min function key code minus 1. | |
| 389 EXPECT_FALSE(HasFunctionKeyFlagSet(display, XK_F1 - 1)); | |
| 390 // All function keys. | |
| 391 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F1)); | |
| 392 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F2)); | |
| 393 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F3)); | |
| 394 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F4)); | |
| 395 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F5)); | |
| 396 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F6)); | |
| 397 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F7)); | |
| 398 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F8)); | |
| 399 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F9)); | |
| 400 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F10)); | |
| 401 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F11)); | |
| 402 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F12)); | |
| 403 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F13)); | |
|
bruthig
2014/05/30 19:10:03
The EXPECT_TRUE for XK_F13 to XK_F35 now fails bec
oshima
2014/05/30 21:13:06
Humm, maybe we can just skip or return true for su
sadrul
2014/05/30 21:23:21
I agree. I left a suggestion above for this.
bruthig
2014/06/02 14:22:01
Done.
| |
| 404 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F14)); | |
| 405 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F15)); | |
| 406 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F16)); | |
| 407 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F17)); | |
| 408 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F18)); | |
| 409 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F19)); | |
| 410 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F20)); | |
| 411 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F21)); | |
| 412 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F22)); | |
| 413 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F23)); | |
| 414 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F24)); | |
| 415 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F25)); | |
| 416 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F26)); | |
| 417 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F27)); | |
| 418 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F28)); | |
| 419 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F29)); | |
| 420 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F30)); | |
| 421 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F31)); | |
| 422 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F32)); | |
| 423 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F33)); | |
| 424 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F34)); | |
| 425 EXPECT_TRUE(HasFunctionKeyFlagSet(display, XK_F35)); | |
| 426 // Max function key code plus 1. | |
| 427 EXPECT_FALSE(HasFunctionKeyFlagSet(display, XK_F35 + 1)); | |
| 428 } | |
| 429 | |
| 373 } // namespace ui | 430 } // namespace ui |
| OLD | NEW |