Commit 0c335fa2 authored by mazda@chromium.org's avatar mazda@chromium.org

Move CreateFakeXEvent to x11_util.{h,cc}.

I'd like to use this function from shell_accelerator_controller_unittest.


BUG=none
TEST=Ran browser_tests.


Review URL: http://codereview.chromium.org/8834014

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113642 0039d316-1c4b-4281-b951-d872f2087c98
parent 7556ea2d
...@@ -30,10 +30,8 @@ ...@@ -30,10 +30,8 @@
#if defined(USE_AURA) && defined(USE_X11) #if defined(USE_AURA) && defined(USE_X11)
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <X11/keysym.h>
#include "ui/base/events.h" #include "ui/base/events.h"
#include "ui/base/keycodes/keyboard_code_conversion.h" #include "ui/base/keycodes/keyboard_code_conversion.h"
#include "ui/base/keycodes/keyboard_code_conversion_x.h"
#include "ui/base/x/x11_util.h" #include "ui/base/x/x11_util.h"
#endif #endif
...@@ -50,65 +48,6 @@ const int32 kOpenerId = 7; ...@@ -50,65 +48,6 @@ const int32 kOpenerId = 7;
const int32 kRouteId = 5; const int32 kRouteId = 5;
#if defined(USE_AURA) && defined(USE_X11) #if defined(USE_AURA) && defined(USE_X11)
// Converts ui::EventType to XKeyEvent state.
unsigned int XKeyEventState(int flags) {
return
((flags & ui::EF_SHIFT_DOWN) ? ShiftMask : 0) |
((flags & ui::EF_CONTROL_DOWN) ? ControlMask : 0) |
((flags & ui::EF_CAPS_LOCK_DOWN) ? LockMask : 0);
}
// Converts ui::EventType to XKeyEvent type.
int XKeyEventType(ui::EventType type) {
switch (type) {
case ui::ET_KEY_PRESSED:
return KeyPress;
case ui::ET_KEY_RELEASED:
return KeyRelease;
default:
return 0;
}
}
// Converts ui::KeyboardCode to XKeyEvent keycode.
unsigned int XKeyEventKeyCode(ui::KeyboardCode key_code,
int flags,
Display* display) {
const int keysym = ui::XKeysymForWindowsKeyCode(key_code,
flags & ui::EF_SHIFT_DOWN);
// The test assumes the keycode for XK_less is equal to the one of XK_comma,
// but XKeysymToKeycode returns 94 for XK_less while it returns 59 for
// XK_comma. Here we convert the value for XK_less to the value for XK_comma.
return (keysym == XK_less) ? 59 : XKeysymToKeycode(display, keysym);
}
// Creates a fake XEvent for testing.
XEvent* CreateFakeXEvent(ui::EventType type,
ui::KeyboardCode key_code,
int flags) {
Display* display = ui::GetXDisplay();
XKeyEvent key_event;
key_event.type = XKeyEventType(type);
key_event.serial = 0;
key_event.send_event = 0;
key_event.display = display;
key_event.time = 0;
key_event.window = 0;
key_event.root = 0;
key_event.subwindow = 0;
key_event.x = 0;
key_event.y = 0;
key_event.x_root = 0;
key_event.y_root = 0;
key_event.state = XKeyEventState(flags);
key_event.keycode = XKeyEventKeyCode(key_code, flags, display);
key_event.same_screen = 1;
XEvent* event = new XEvent;
event->type = key_event.type;
event->xkey = key_event;
return event;
}
// Converts MockKeyboard::Modifiers to ui::EventFlags. // Converts MockKeyboard::Modifiers to ui::EventFlags.
int ConvertMockKeyboardModifier(MockKeyboard::Modifiers modifiers) { int ConvertMockKeyboardModifier(MockKeyboard::Modifiers modifiers) {
static struct ModifierMap { static struct ModifierMap {
...@@ -306,27 +245,30 @@ int RenderViewTest::SendKeyEvent(MockKeyboard::Layout layout, ...@@ -306,27 +245,30 @@ int RenderViewTest::SendKeyEvent(MockKeyboard::Layout layout,
CHECK(output); CHECK(output);
const int flags = ConvertMockKeyboardModifier(modifiers); const int flags = ConvertMockKeyboardModifier(modifiers);
scoped_ptr<XEvent> xevent1(CreateFakeXEvent( XEvent xevent1;
ui::ET_KEY_PRESSED, InitXKeyEventForTesting(ui::ET_KEY_PRESSED,
static_cast<ui::KeyboardCode>(key_code), static_cast<ui::KeyboardCode>(key_code),
flags)); flags,
aura::KeyEvent event1(xevent1.get(), false); &xevent1);
aura::KeyEvent event1(&xevent1, false);
NativeWebKeyboardEvent keydown_event(&event1); NativeWebKeyboardEvent keydown_event(&event1);
SendNativeKeyEvent(keydown_event); SendNativeKeyEvent(keydown_event);
scoped_ptr<XEvent> xevent2(CreateFakeXEvent( XEvent xevent2;
ui::ET_KEY_PRESSED, InitXKeyEventForTesting(ui::ET_KEY_PRESSED,
static_cast<ui::KeyboardCode>(key_code), static_cast<ui::KeyboardCode>(key_code),
flags)); flags,
aura::KeyEvent event2(xevent2.get(), true); &xevent2);
aura::KeyEvent event2(&xevent2, true);
NativeWebKeyboardEvent char_event(&event2); NativeWebKeyboardEvent char_event(&event2);
SendNativeKeyEvent(char_event); SendNativeKeyEvent(char_event);
scoped_ptr<XEvent> xevent3(CreateFakeXEvent( XEvent xevent3;
ui::ET_KEY_RELEASED, InitXKeyEventForTesting(ui::ET_KEY_RELEASED,
static_cast<ui::KeyboardCode>(key_code), static_cast<ui::KeyboardCode>(key_code),
flags)); flags,
aura::KeyEvent event3(xevent3.get(), false); &xevent3);
aura::KeyEvent event3(&xevent3, false);
NativeWebKeyboardEvent keyup_event(&event3); NativeWebKeyboardEvent keyup_event(&event3);
SendNativeKeyEvent(keyup_event); SendNativeKeyEvent(keyup_event);
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "base/string_util.h" #include "base/string_util.h"
#include "base/stringprintf.h" #include "base/stringprintf.h"
#include "base/threading/thread.h" #include "base/threading/thread.h"
#include "ui/base/keycodes/keyboard_code_conversion_x.h"
#include "ui/base/x/x11_util_internal.h" #include "ui/base/x/x11_util_internal.h"
#include "ui/gfx/rect.h" #include "ui/gfx/rect.h"
#include "ui/gfx/size.h" #include "ui/gfx/size.h"
...@@ -103,6 +104,38 @@ bool GetProperty(XID window, const std::string& property_name, long max_length, ...@@ -103,6 +104,38 @@ bool GetProperty(XID window, const std::string& property_name, long max_length,
property); property);
} }
// Converts ui::EventType to XKeyEvent state.
unsigned int XKeyEventState(int flags) {
return
((flags & ui::EF_SHIFT_DOWN) ? ShiftMask : 0) |
((flags & ui::EF_CONTROL_DOWN) ? ControlMask : 0) |
((flags & ui::EF_CAPS_LOCK_DOWN) ? LockMask : 0);
}
// Converts EventType to XKeyEvent type.
int XKeyEventType(ui::EventType type) {
switch (type) {
case ui::ET_KEY_PRESSED:
return KeyPress;
case ui::ET_KEY_RELEASED:
return KeyRelease;
default:
return 0;
}
}
// Converts KeyboardCode to XKeyEvent keycode.
unsigned int XKeyEventKeyCode(ui::KeyboardCode key_code,
int flags,
Display* display) {
const int keysym = XKeysymForWindowsKeyCode(key_code,
flags & ui::EF_SHIFT_DOWN);
// Tests assume the keycode for XK_less is equal to the one of XK_comma,
// but XKeysymToKeycode returns 94 for XK_less while it returns 59 for
// XK_comma. Here we convert the value for XK_less to the value for XK_comma.
return (keysym == XK_less) ? 59 : XKeysymToKeycode(display, keysym);
}
// A process wide singleton that manages the usage of X cursors. // A process wide singleton that manages the usage of X cursors.
class XCursorCache { class XCursorCache {
public: public:
...@@ -872,6 +905,33 @@ void UpdateButtonMap() { ...@@ -872,6 +905,33 @@ void UpdateButtonMap() {
XButtonMap::GetInstance()->UpdateMapping(); XButtonMap::GetInstance()->UpdateMapping();
} }
void InitXKeyEventForTesting(EventType type,
KeyboardCode key_code,
int flags,
XEvent* event) {
CHECK(event);
Display* display = GetXDisplay();
XKeyEvent key_event;
key_event.type = XKeyEventType(type);
CHECK_NE(0, key_event.type);
key_event.serial = 0;
key_event.send_event = 0;
key_event.display = display;
key_event.time = 0;
key_event.window = 0;
key_event.root = 0;
key_event.subwindow = 0;
key_event.x = 0;
key_event.y = 0;
key_event.x_root = 0;
key_event.y_root = 0;
key_event.state = XKeyEventState(flags);
key_event.keycode = XKeyEventKeyCode(key_code, flags, display);
key_event.same_screen = 1;
event->type = key_event.type;
event->xkey = key_event;
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// These functions are declared in x11_util_internal.h because they require // These functions are declared in x11_util_internal.h because they require
// XLib.h to be included, and it conflicts with many other headers. // XLib.h to be included, and it conflicts with many other headers.
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <vector> #include <vector>
#include "base/basictypes.h" #include "base/basictypes.h"
#include "ui/base/events.h"
#include "ui/base/ui_export.h" #include "ui/base/ui_export.h"
typedef unsigned long Atom; typedef unsigned long Atom;
...@@ -235,6 +236,12 @@ int GetMappedButton(int button); ...@@ -235,6 +236,12 @@ int GetMappedButton(int button);
// received. // received.
UI_EXPORT void UpdateButtonMap(); UI_EXPORT void UpdateButtonMap();
// Initializes a XEvent that holds XKeyEvent for testing.
UI_EXPORT void InitXKeyEventForTesting(EventType type,
KeyboardCode key_code,
int flags,
XEvent* event);
} // namespace ui } // namespace ui
#endif // UI_BASE_X_X11_UTIL_H_ #endif // UI_BASE_X_X11_UTIL_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment