On Friday 28 June 2002 01:48, Sven Neumann wrote:
> GTK+ itself doesn't support anything but a full-featured keyboard with
> keymap. If you want full keyboard navigation support, a device with
> keymap support is unavoidable. Simpler devices can only generate GDK
> key events.
Ok, then it is a reasonable fix, to convert key_codes into keyboard compatible
key_codes. The attached patch performs this in the case the key_code is -1.
This works for me, i.e. the remote control is usable again.
Mike
Index: gdkevents-directfb.c
===================================================================
RCS file: /cvs/directfb/gdk-directfb/gdkevents-directfb.c,v
retrieving revision 1.35
diff -c -r1.35 gdkevents-directfb.c
*** gdkevents-directfb.c 14 Jun 2002 12:20:34 -0000 1.35
--- gdkevents-directfb.c 29 Jun 2002 18:04:49 -0000
***************
*** 155,160 ****
--- 155,179 ----
GdkWindow *window =
gdk_directfb_window_id_table_lookup (event.window_id);
+ if ((DWET_KEYDOWN == event.type || DWET_KEYUP == event.type)
+ && (-1 == event.key_code))
+ {
+ gdk_directfb_enhance_key_code (&event);
+ }
+
if (window && !GDK_WINDOW_DESTROYED (window))
{
gdk_event_translate (&event, window);
Index: gdkkeys-directfb.c
===================================================================
RCS file: /cvs/directfb/gdk-directfb/gdkkeys-directfb.c,v
retrieving revision 1.20
diff -c -r1.20 gdkkeys-directfb.c
*** gdkkeys-directfb.c 4 Jun 2002 19:38:51 -0000 1.20
--- gdkkeys-directfb.c 29 Jun 2002 18:04:51 -0000
***************
*** 542,545 ****
--- 542,564 ----
gdk_keymap_get_direction (GdkKeymap *keymap)
{
return PANGO_DIRECTION_LTR;
+ }
+
+ void
+ gdk_directfb_enhance_key_code (DFBWindowEvent *event)
+ {
+ guint gdkKey;
+ GdkKeymapKey *keys = NULL;
+ gint keyCnt = 0;
+
+ /* First let it translate to the GDK type */
+ gdkKey = gdk_directfb_translate_key (event->key_id, event->key_symbol);
+
+ /* Now do a lookup for the hardware key code which is used by keyboard. */
+ if (gdk_keymap_get_entries_for_keyval (NULL, gdkKey, &keys, &keyCnt))
+ {
+ /* Simply take the key_code from the first entry. */
+ event->key_code = keys[0].keycode;
+ }
+ g_free (keys);
}
Index: gdkprivate-directfb.h
===================================================================
RCS file: /cvs/directfb/gdk-directfb/gdkprivate-directfb.h,v
retrieving revision 1.24
diff -c -r1.24 gdkprivate-directfb.h
*** gdkprivate-directfb.h 1 Jun 2002 15:53:25 -0000 1.24
--- gdkprivate-directfb.h 29 Jun 2002 18:04:51 -0000
***************
*** 284,289 ****
--- 284,290 ----
gint *y,
GdkModifierType *mask);
+ void gdk_directfb_enhance_key_code (DFBWindowEvent *event);
#define DirectFB (gdk_display->directfb)
#define DisplayLayer (gdk_display->layer)