Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1577)

Unified Diff: chrome/browser/automation/ui_controls_linux.cc

Issue 2083012: enable RenderViewTest.OnHandleKeyboardEvent on Linux. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/automation/ui_controls_linux.cc
diff --git a/chrome/browser/automation/ui_controls_linux.cc b/chrome/browser/automation/ui_controls_linux.cc
index 973c1f4651a9d90fbf57747014353c53f47346a5..c9dca787a52e31a91fbaec43c0d5a7ea475e1711 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,

Powered by Google App Engine
This is Rietveld 408576698