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 |