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)

Reply via email to