]> Pileus Git - ~andy/gtk/commitdiff
[broadway] Emulate hardware keycodes in keyboard events
authorAlexander Larsson <alexl@redhat.com>
Thu, 14 Apr 2011 19:13:28 +0000 (21:13 +0200)
committerAlexander Larsson <alexl@redhat.com>
Thu, 14 Apr 2011 19:36:42 +0000 (21:36 +0200)
We can't really know the client side keymaps, so we use the keysym
as the hardware keycode (essentially claiming to have a keyboard with
one key for all possible keysyms). This is not ideal, but its hard to
do better with no knowledge of the client side keyboard mappings.
(And html keyboard events suck badly...)

gdk/broadway/gdkeventsource.c
gdk/broadway/gdkkeys-broadway.c

index a2864daf0ab3a7854fc56a5e1569792876c79158..e7f8574d587d58af2eb15dde9c2286c47ce1f3ad 100644 (file)
@@ -259,6 +259,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
        event->key.window = g_object_ref (window);
        event->key.time = message->base.time;
        event->key.keyval = message->key.key;
+       event->key.hardware_keycode = message->key.key;
        event->key.length = 0;
        gdk_event_set_device (event, display->core_pointer);
 
index 1d5f41a542951ed6d5cf184212a55f4bc50634f6..48d515846b704391da46741e4f42953802384281 100644 (file)
@@ -119,8 +119,15 @@ gdk_broadway_keymap_get_entries_for_keyval (GdkKeymap     *keymap,
                                            GdkKeymapKey **keys,
                                            gint          *n_keys)
 {
-  *n_keys = 0;
-  return FALSE;
+  if (n_keys)
+    *n_keys = 1;
+  if (keys)
+    {
+      *keys = g_new0 (GdkKeymapKey, 1);
+      (*keys)->keycode = keyval;
+    }
+
+  return TRUE;
 }
 
 static gboolean
@@ -130,15 +137,26 @@ gdk_broadway_keymap_get_entries_for_keycode (GdkKeymap     *keymap,
                                             guint        **keyvals,
                                             gint          *n_entries)
 {
-  *n_entries = 0;
-  return FALSE;
+  if (n_entries)
+    *n_entries = 1;
+  if (keys)
+    {
+      *keys = g_new0 (GdkKeymapKey, 1);
+      (*keys)->keycode = hardware_keycode;
+    }
+  if (keyvals)
+    {
+      *keyvals = g_new0 (guint, 1);
+      (*keyvals)[0] = hardware_keycode;
+    }
+  return TRUE;
 }
 
 static guint
 gdk_broadway_keymap_lookup_key (GdkKeymap          *keymap,
                                const GdkKeymapKey *key)
 {
-  return 0;
+  return key->keycode;
 }
 
 
@@ -152,7 +170,13 @@ gdk_broadway_keymap_translate_keyboard_state (GdkKeymap       *keymap,
                                              gint            *level,
                                              GdkModifierType *consumed_modifiers)
 {
-  return FALSE;
+  if (keyval)
+    *keyval = hardware_keycode;
+  if (effective_group)
+    *effective_group = 0;
+  if (level)
+    *level = 0;
+  return TRUE;
 }
 
 static void
@@ -165,7 +189,7 @@ static gboolean
 gdk_broadway_keymap_map_virtual_modifiers (GdkKeymap       *keymap,
                                           GdkModifierType *state)
 {
-  return FALSE;
+  return TRUE;
 }
 
 static void