[gnome-builder] tests: improve key synthesizer for indenter tests



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]