[gnome-builder] tests: improve key synthesizer for indenter tests
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] tests: improve key synthesizer for indenter tests
- Date: Thu, 23 Apr 2015 00:09:09 +0000 (UTC)
commit d518612a33643bccd99156662bf65552d9bf283c
Author: Christian Hergert <christian hergert me>
Date: Wed Apr 22 17:08:38 2015 -0700
tests: improve key synthesizer for indenter tests
tests/test-ide-indenter.c | 51 ++++++++++++++++++++++++++++++++++++++------
1 files changed, 44 insertions(+), 7 deletions(-)
---
diff --git a/tests/test-ide-indenter.c b/tests/test-ide-indenter.c
index 1def11b..0c6c0fd 100644
--- a/tests/test-ide-indenter.c
+++ b/tests/test-ide-indenter.c
@@ -117,8 +117,13 @@ static GdkEventKey *
synthesize_event (GtkTextView *text_view,
gunichar ch)
{
+ GdkDisplay *display;
+ GdkDeviceManager *device_manager;
+ GdkDevice *client_pointer;
GdkWindow *window;
GdkEvent *ev;
+ GdkKeymapKey *keys = NULL;
+ gint n_keys = 0;
gchar str[8] = { 0 };
window = gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT);
@@ -132,16 +137,48 @@ synthesize_event (GtkTextView *text_view,
ev->key.send_event = TRUE;
ev->key.time = gtk_get_current_event_time ();
ev->key.state = 0;
- if (ch == '\n')
- ev->key.keyval = GDK_KEY_Return;
- else
- ev->key.keyval = gdk_unicode_to_keyval (ch);
- ev->key.length = strlen (str);
- ev->key.string = g_strdup (str);
ev->key.hardware_keycode = 0;
ev->key.group = 0;
ev->key.is_modifier = 0;
+ switch (ch)
+ {
+ case '\n':
+ ev->key.keyval = GDK_KEY_Return;
+ ev->key.string = g_strdup ("\n");
+ ev->key.length = 1;
+ break;
+
+ case '\e':
+ ev->key.keyval = GDK_KEY_Escape;
+ ev->key.string = g_strdup ("");
+ ev->key.length = 0;
+ break;
+
+ default:
+ ev->key.keyval = gdk_unicode_to_keyval (ch);
+ ev->key.length = strlen (str);
+ ev->key.string = g_strdup (str);
+ break;
+ }
+
+ gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (),
+ ev->key.keyval,
+ &keys,
+ &n_keys);
+
+ if (n_keys > 0)
+ {
+ ev->key.hardware_keycode = keys [0].keycode;
+ ev->key.group = keys [0].group;
+ g_free (keys);
+ }
+
+ display = gdk_window_get_display (ev->any.window);
+ device_manager = gdk_display_get_device_manager (display);
+ client_pointer = gdk_device_manager_get_client_pointer (device_manager);
+ gdk_event_set_device (ev, gdk_device_get_associated_device (client_pointer));
+
return &ev->key;
}
@@ -174,7 +211,7 @@ assert_keypress_equal (GtkWidget *widget,
gtk_main_iteration ();
event = synthesize_event (text_view, ch);
- GTK_WIDGET_GET_CLASS (widget)->key_press_event (widget, event);
+ gtk_main_do_event ((GdkEvent *)event);
gdk_event_free ((GdkEvent *)event);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]