diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-19 03:39:27 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-19 03:39:27 +0000 |
commit | 687e25dfe5c6b8c3c9f93114a7fe6446b01ff2f1 (patch) | |
tree | e502bf911ae8ff5472a0b6c0a29a0fb4f6b2177b /chrome/browser/automation | |
parent | 0002677c9021d3d00266e63f5eb8af51e5d82bc5 (diff) | |
download | chromium_src-687e25dfe5c6b8c3c9f93114a7fe6446b01ff2f1.zip chromium_src-687e25dfe5c6b8c3c9f93114a7fe6446b01ff2f1.tar.gz chromium_src-687e25dfe5c6b8c3c9f93114a7fe6446b01ff2f1.tar.bz2 |
enable RenderViewTest.OnHandleKeyboardEvent on Linux.
Rearrange some existing automation code and write some new code.
BUG=none
TEST=runs
Review URL: http://codereview.chromium.org/2083012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47624 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/automation')
-rw-r--r-- | chrome/browser/automation/ui_controls_linux.cc | 78 |
1 files changed, 10 insertions, 68 deletions
diff --git a/chrome/browser/automation/ui_controls_linux.cc b/chrome/browser/automation/ui_controls_linux.cc index 973c1f4..c9dca78 100644 --- a/chrome/browser/automation/ui_controls_linux.cc +++ b/chrome/browser/automation/ui_controls_linux.cc @@ -8,6 +8,7 @@ #include <gdk/gdkkeysyms.h> #include "gfx/rect.h" +#include "base/event_synthesis_gtk.h" #include "base/keyboard_code_conversion_gtk.h" #include "base/logging.h" #include "base/message_loop.h" @@ -82,34 +83,6 @@ class ClickTask : public Task { Task* followup_; }; -bool SendKeyEvent(GdkWindow* window, bool press, guint gdk_key, guint state) { - GdkEvent* event = gdk_event_new(press ? GDK_KEY_PRESS : GDK_KEY_RELEASE); - - event->key.type = press ? GDK_KEY_PRESS : GDK_KEY_RELEASE; - event->key.window = window; - g_object_ref(event->key.window); - event->key.send_event = false; - event->key.time = gtk_util::XTimeNow(); - - event->key.state = state; - event->key.keyval = gdk_key; - - GdkKeymapKey* keys; - gint n_keys; - if (!gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), - event->key.keyval, &keys, &n_keys)) { - return false; - } - event->key.hardware_keycode = keys[0].keycode; - event->key.group = keys[0].group; - g_free(keys); - - gdk_event_put(event); - // gdk_event_put appends a copy of the event. - gdk_event_free(event); - return true; -} - void FakeAMouseMotionEvent(gint x, gint y) { GdkEvent* event = gdk_event_new(GDK_MOTION_NOTIFY); @@ -171,48 +144,17 @@ bool SendKeyPress(gfx::NativeWindow window, return false; } - bool rv = true; - - if (control) - rv = rv && SendKeyEvent(event_window, true, GDK_Control_L, 0); - - if (shift) { - rv = rv && SendKeyEvent(event_window, true, GDK_Shift_L, - control ? GDK_CONTROL_MASK : 0); - } - - if (alt) { - guint state = (control ? GDK_CONTROL_MASK : 0) | - (shift ? GDK_SHIFT_MASK : 0); - rv = rv && SendKeyEvent(event_window, true, GDK_Alt_L, state); - } - - // TODO(estade): handle other state flags besides control, shift, alt? - // For example caps lock. - guint state = (control ? GDK_CONTROL_MASK : 0) | - (shift ? GDK_SHIFT_MASK : 0) | - (alt ? GDK_MOD1_MASK : 0); - - guint gdk_key = base::GdkKeyCodeForWindowsKeyCode(key, shift); - rv = rv && SendKeyEvent(event_window, true, gdk_key, state); - rv = rv && SendKeyEvent(event_window, false, gdk_key, state); - - if (alt) { - guint state = (control ? GDK_CONTROL_MASK : 0) | - (shift ? GDK_SHIFT_MASK : 0) | GDK_MOD1_MASK; - rv = rv && SendKeyEvent(event_window, false, GDK_Alt_L, state); + std::vector<GdkEvent*> events; + base::SynthesizeKeyPressEvents(event_window, key, control, shift, alt, + &events); + for (std::vector<GdkEvent*>::iterator iter = events.begin(); + iter != events.end(); ++iter) { + gdk_event_put(*iter); + // gdk_event_put appends a copy of the event. + gdk_event_free(*iter); } - if (shift) { - rv = rv && SendKeyEvent(event_window, false, GDK_Shift_L, - (control ? GDK_CONTROL_MASK : 0) | GDK_SHIFT_MASK); - } - - if (control) - rv = rv && SendKeyEvent(event_window, false, GDK_Control_L, - GDK_CONTROL_MASK); - - return rv; + return true; } bool SendKeyPressNotifyWhenDone(gfx::NativeWindow window, |