[evolution/wip/webkit2] Have one shared function for key press/release event emit
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/wip/webkit2] Have one shared function for key press/release event emit
- Date: Wed, 22 Jun 2016 05:54:47 +0000 (UTC)
commit 6f8f39ea68147fb1f39fff489f43f20cd229fd03
Author: Milan Crha <mcrha redhat com>
Date: Wed Jun 22 07:53:43 2016 +0200
Have one shared function for key press/release event emit
e-util/test-html-editor-units-utils.c | 213 +++++++++++++--------------------
1 files changed, 85 insertions(+), 128 deletions(-)
---
diff --git a/e-util/test-html-editor-units-utils.c b/e-util/test-html-editor-units-utils.c
index a1d8b34..608aff7 100644
--- a/e-util/test-html-editor-units-utils.c
+++ b/e-util/test-html-editor-units-utils.c
@@ -264,14 +264,61 @@ test_utils_wait_milliseconds (guint milliseconds)
return test_utils_async_call_wait (async_data, milliseconds / 1000 + 1);
}
+static void
+test_utils_send_key_event (GtkWidget *widget,
+ GdkEventType type,
+ guint keyval,
+ guint state)
+{
+ GdkKeymap *keymap;
+ GdkKeymapKey *keys = NULL;
+ gint n_keys;
+ GdkEvent *event;
+
+ g_return_if_fail (GTK_IS_WIDGET (widget));
+
+ event = gdk_event_new (type);
+ event->key.is_modifier =
+ keyval == GDK_KEY_Shift_L ||
+ keyval == GDK_KEY_Shift_R ||
+ keyval == GDK_KEY_Control_L ||
+ keyval == GDK_KEY_Control_R ||
+ keyval == GDK_KEY_Alt_L ||
+ keyval == GDK_KEY_Alt_R;
+ event->key.keyval = keyval;
+ event->key.state = state;
+ event->key.window = g_object_ref (gtk_widget_get_window (widget));
+ event->key.send_event = TRUE;
+ event->key.length = 0;
+ event->key.string = NULL;
+ event->key.hardware_keycode = 0;
+ event->key.group = 0;
+ event->key.time = GDK_CURRENT_TIME;
+
+ gdk_event_set_device (event, gdk_seat_get_keyboard (gdk_display_get_default_seat
(gtk_widget_get_display (widget))));
+
+ keymap = gdk_keymap_get_for_display (gtk_widget_get_display (widget));
+ if (gdk_keymap_get_entries_for_keyval (keymap, keyval, &keys, &n_keys)) {
+ if (n_keys > 0) {
+ event->key.hardware_keycode = keys[0].keycode;
+ event->key.group = keys[0].group;
+ }
+
+ g_free (keys);
+ }
+
+ gtk_main_do_event (event);
+
+ test_utils_wait_milliseconds (5);
+
+ gdk_event_free (event);
+}
+
gboolean
test_utils_type_text (TestFixture *fixture,
const gchar *text)
{
GtkWidget *widget;
- GdkKeymap *keymap;
- GdkEvent event;
- gboolean none_failed = TRUE;
g_return_val_if_fail (fixture != NULL, FALSE);
g_return_val_if_fail (E_IS_HTML_EDITOR (fixture->editor), FALSE);
@@ -282,63 +329,22 @@ test_utils_type_text (TestFixture *fixture,
g_return_val_if_fail (text != NULL, FALSE);
g_return_val_if_fail (g_utf8_validate (text, -1, NULL), FALSE);
- event.key.window = gtk_widget_get_window (widget);
- event.key.send_event = TRUE;
- event.key.length = 0;
- event.key.string = NULL;
- event.key.is_modifier = FALSE;
-
- keymap = gdk_keymap_get_for_display (gtk_widget_get_display (widget));
-
- while (*text && none_failed) {
- GdkKeymapKey *keys = NULL;
- gint n_keys;
+ while (*text) {
+ guint keyval;
gunichar unichar;
unichar = g_utf8_get_char (text);
text = g_utf8_next_char (text);
- event.key.keyval = gdk_unicode_to_keyval (unichar);
-
- if (gdk_keymap_get_entries_for_keyval (keymap, event.key.keyval, &keys, &n_keys) && n_keys >
0) {
- GdkEvent *nevent;
-
- nevent = gdk_event_new (GDK_KEY_PRESS);
- nevent->key.keyval = event.key.keyval;
- nevent->key.state = event.key.state;
- nevent->key.window = g_object_ref (event.key.window);
- nevent->key.send_event = event.key.send_event;
- nevent->key.length = event.key.length;
- nevent->key.string = event.key.string;
- nevent->key.is_modifier = event.key.is_modifier;
- gdk_event_set_device (nevent, gdk_seat_get_keyboard (gdk_display_get_default_seat
(gtk_widget_get_display (widget))));
- nevent->key.hardware_keycode = keys[0].keycode;
- nevent->key.group = keys[0].group;
+ keyval = gdk_unicode_to_keyval (unichar);
- nevent->key.type = GDK_KEY_PRESS;
- nevent->key.time = GDK_CURRENT_TIME;
- gtk_main_do_event (nevent);
-
- test_utils_wait_milliseconds (5);
-
- nevent->key.type = GDK_KEY_RELEASE;
- nevent->key.time = GDK_CURRENT_TIME;
- gtk_main_do_event (nevent);
-
- test_utils_wait_milliseconds (5);
-
- gdk_event_free (nevent);
- } else {
- none_failed = FALSE;
- g_warning ("%s: Nothing found for unichar '%x'", G_STRFUNC, unichar);
- }
-
- g_free (keys);
+ test_utils_send_key_event (widget, GDK_KEY_PRESS, keyval, 0);
+ test_utils_send_key_event (widget, GDK_KEY_RELEASE, keyval, 0);
}
test_utils_wait_milliseconds (5);
- return none_failed;
+ return TRUE;
}
gboolean
@@ -389,9 +395,8 @@ test_utils_process_sequence (TestFixture *fixture,
const gchar *sequence)
{
GtkWidget *widget;
- GdkKeymap *keymap;
- GdkEvent event;
const gchar *seq;
+ guint keyval, state;
gboolean success = TRUE;
g_return_val_if_fail (fixture != NULL, FALSE);
@@ -401,26 +406,17 @@ test_utils_process_sequence (TestFixture *fixture,
widget = GTK_WIDGET (e_html_editor_get_content_editor (fixture->editor));
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
- keymap = gdk_keymap_get_for_display (gtk_widget_get_display (widget));
-
- event.key.window = gtk_widget_get_window (widget);
- event.key.send_event = FALSE;
- event.key.state = 0;
- event.key.length = 0;
- event.key.string = NULL;
+ state = 0;
for (seq = sequence; *seq && success; seq++) {
gboolean call_press = TRUE, call_release = TRUE;
- guint32 change_state = event.key.state;
-
- event.key.is_modifier = FALSE;
+ guint change_state = state;
switch (*seq) {
case 'S': /* Shift key press */
- event.key.keyval = GDK_KEY_Shift_L;
- event.key.is_modifier = TRUE;
+ keyval = GDK_KEY_Shift_L;
- if ((event.key.state & GDK_SHIFT_MASK) != 0) {
+ if ((state & GDK_SHIFT_MASK) != 0) {
success = FALSE;
g_warning ("%s: Shift is already pressed", G_STRFUNC);
} else {
@@ -429,10 +425,9 @@ test_utils_process_sequence (TestFixture *fixture,
call_release = FALSE;
break;
case 's': /* Shift key release */
- event.key.keyval = GDK_KEY_Shift_L;
- event.key.is_modifier = TRUE;
+ keyval = GDK_KEY_Shift_L;
- if ((event.key.state & GDK_SHIFT_MASK) == 0) {
+ if ((state & GDK_SHIFT_MASK) == 0) {
success = FALSE;
g_warning ("%s: Shift is already released", G_STRFUNC);
} else {
@@ -441,10 +436,9 @@ test_utils_process_sequence (TestFixture *fixture,
call_press = FALSE;
break;
case 'C': /* Ctrl key press */
- event.key.keyval = GDK_KEY_Control_L;
- event.key.is_modifier = TRUE;
+ keyval = GDK_KEY_Control_L;
- if ((event.key.state & GDK_CONTROL_MASK) != 0) {
+ if ((state & GDK_CONTROL_MASK) != 0) {
success = FALSE;
g_warning ("%s: Control is already pressed", G_STRFUNC);
} else {
@@ -453,10 +447,9 @@ test_utils_process_sequence (TestFixture *fixture,
call_release = FALSE;
break;
case 'c': /* Ctrl key release */
- event.key.keyval = GDK_KEY_Control_L;
- event.key.is_modifier = TRUE;
+ keyval = GDK_KEY_Control_L;
- if ((event.key.state & GDK_CONTROL_MASK) == 0) {
+ if ((state & GDK_CONTROL_MASK) == 0) {
success = FALSE;
g_warning ("%s: Control is already released", G_STRFUNC);
} else {
@@ -465,40 +458,40 @@ test_utils_process_sequence (TestFixture *fixture,
call_press = FALSE;
break;
case 'h': /* Home key press + release */
- event.key.keyval = GDK_KEY_Home;
+ keyval = GDK_KEY_Home;
break;
case 'e': /* End key press + release */
- event.key.keyval = GDK_KEY_End;
+ keyval = GDK_KEY_End;
break;
case 'P': /* Page-Up key press + release */
- event.key.keyval = GDK_KEY_Page_Up;
+ keyval = GDK_KEY_Page_Up;
break;
case 'p': /* Page-Down key press + release */
- event.key.keyval = GDK_KEY_Page_Down;
+ keyval = GDK_KEY_Page_Down;
break;
case 'l': /* Arrow-Left key press + release */
- event.key.keyval = GDK_KEY_Left;
+ keyval = GDK_KEY_Left;
break;
case 'r': /* Arrow-Right key press + release */
- event.key.keyval = GDK_KEY_Right;
+ keyval = GDK_KEY_Right;
break;
case 'u': /* Arrow-Up key press + release */
- event.key.keyval = GDK_KEY_Up;
+ keyval = GDK_KEY_Up;
break;
case 'd': /* Arrow-Down key press + release */
- event.key.keyval = GDK_KEY_Down;
+ keyval = GDK_KEY_Down;
break;
case 'D': /* Delete key press + release */
- event.key.keyval = GDK_KEY_Delete;
+ keyval = GDK_KEY_Delete;
break;
case 'b': /* Backspace key press + release */
- event.key.keyval = GDK_KEY_BackSpace;
+ keyval = GDK_KEY_BackSpace;
break;
case 't': /* Tab key press + release */
- event.key.keyval = GDK_KEY_Tab;
+ keyval = GDK_KEY_Tab;
break;
case 'n': /* Return key press + release */
- event.key.keyval = GDK_KEY_Return;
+ keyval = GDK_KEY_Return;
break;
default:
success = FALSE;
@@ -506,51 +499,15 @@ test_utils_process_sequence (TestFixture *fixture,
break;
}
- if (success && (call_press || call_release)) {
- GdkKeymapKey *keys = NULL;
- gint n_keys;
-
- if (gdk_keymap_get_entries_for_keyval (keymap, event.key.keyval, &keys, &n_keys) &&
n_keys > 0) {
- GdkEvent *nevent;
-
- nevent = gdk_event_new (GDK_KEY_PRESS);
- nevent->key.keyval = event.key.keyval;
- nevent->key.state = event.key.state;
- nevent->key.window = g_object_ref (event.key.window);
- nevent->key.send_event = event.key.send_event;
- nevent->key.length = event.key.length;
- nevent->key.string = event.key.string;
- nevent->key.is_modifier = event.key.is_modifier;
- gdk_event_set_device (nevent, gdk_seat_get_keyboard
(gdk_display_get_default_seat (gtk_widget_get_display (widget))));
- nevent->key.hardware_keycode = keys[0].keycode;
- nevent->key.group = keys[0].group;
-
- if (call_press) {
- nevent->key.type = GDK_KEY_PRESS;
- nevent->key.time = GDK_CURRENT_TIME;
- gtk_main_do_event (nevent);
-
- test_utils_wait_milliseconds (5);
- }
-
- if (call_release) {
- nevent->key.type = GDK_KEY_RELEASE;
- nevent->key.time = GDK_CURRENT_TIME;
- gtk_main_do_event (nevent);
-
- test_utils_wait_milliseconds (5);
- }
-
- gdk_event_free (nevent);
- } else {
- success = FALSE;
- g_warning ("%s: Failed to get keymap entries for sequence command '%c'",
G_STRFUNC, *seq);
- }
+ if (success) {
+ if (call_press)
+ test_utils_send_key_event (widget, GDK_KEY_PRESS, keyval, state);
- g_free (keys);
+ if (call_release)
+ test_utils_send_key_event (widget, GDK_KEY_RELEASE, keyval, state);
}
- event.key.state = change_state;
+ state = change_state;
}
test_utils_wait_milliseconds (5);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]