Hi,

after upgrading to gtk-1.3.15 the key bindings were not working anymore. As I 
found out, the new gtk version makes use of some translate functions which 
are not implemented. I've created a simple implementation which lets the keys 
working (at least for a remote control). The patch also works for gtk+-2.0.0.

Additionally, I've added a translation for DIKC_OK and DIKC_CANCEL.

Mike
Index: gdkkeys-directfb.c
===================================================================
RCS file: /cvs/directfb/gdk-directfb/gdkkeys-directfb.c,v
retrieving revision 1.7
diff -c -r1.7 gdkkeys-directfb.c
*** gdkkeys-directfb.c	27 Feb 2002 14:17:45 -0000	1.7
--- gdkkeys-directfb.c	10 Mar 2002 16:49:04 -0000
***************
*** 102,107 ****
--- 102,109 ----
    {  GDK_Alt_L,        DIKC_ALT           },
    {  GDK_Tab,          DIKC_TAB           },
    {  GDK_Return,       DIKC_ENTER         },
+   {  GDK_Return,       DIKC_OK            },
+   {  GDK_Cancel,       DIKC_CANCEL        },
    {  GDK_space,        DIKC_SPACE         },
    {  GDK_BackSpace,    DIKC_BACKSPACE     },
    {  GDK_Insert,       DIKC_INSERT        },
***************
*** 1600,1605 ****
--- 1602,1614 ----
                                      guint        **keyvals,
                                      gint          *n_entries)
  {
+   if (keys)
+     *keys = NULL;
+   if (keyvals)
+     *keyvals = NULL;
+   if (n_entries)
+     *n_entries = 0;
+ 
    return FALSE;
  }
  
***************
*** 1630,1644 ****
                                     GdkKeymapKey **keys,
                                     gint          *n_keys)
  {
    g_return_val_if_fail (keymap == NULL || GDK_IS_KEYMAP (keymap), FALSE);
    g_return_val_if_fail (keys != NULL, FALSE);
    g_return_val_if_fail (n_keys != NULL, FALSE);
    g_return_val_if_fail (keyval != 0, FALSE);
  
!   *keys = NULL;
!   *n_keys = 0;
  
!   return FALSE;
  }
  
  /**
--- 1639,1685 ----
                                     GdkKeymapKey **keys,
                                     gint          *n_keys)
  {
+   GArray *retval;
+ 
    g_return_val_if_fail (keymap == NULL || GDK_IS_KEYMAP (keymap), FALSE);
    g_return_val_if_fail (keys != NULL, FALSE);
    g_return_val_if_fail (n_keys != NULL, FALSE);
    g_return_val_if_fail (keyval != 0, FALSE);
  
!   retval = g_array_new (FALSE, FALSE, sizeof (GdkKeymapKey));
  
!   /*
!    * Search keyval.
!    */
!   {
!       gint i = 0;
!       for (; i < G_N_ELEMENTS (dfb_keys); i++) {
! 	  if (dfb_keys[i].gdk_keycode == keyval) {
! 	      GdkKeymapKey key;
! 
! 	      key.keycode = dfb_keys[i].dfb_keycode;
! 	      key.group = 0;
! 	      key.level = 0;
! 
! 	      g_array_append_val (retval, key);
! 	  }
!       }
!   }
! 
!   if (retval->len > 0)
!     {
!       *keys = (GdkKeymapKey*) retval->data;
!       *n_keys = retval->len;
!     }
!   else
!     {
!       *keys = NULL;
!       *n_keys = 0;
!     }
!       
!   g_array_free (retval, retval->len > 0 ? FALSE : TRUE);
! 
!   return *n_keys > 0;
  }
  
  /**
***************
*** 1677,1682 ****
--- 1718,1732 ----
  {
    g_return_val_if_fail (keymap == NULL || GDK_IS_KEYMAP (keymap), FALSE);
    g_return_val_if_fail (group < 4, FALSE);
+ 
+   if (keyval)
+     *keyval = 0;
+   if (effective_group)
+     *effective_group = 0;
+   if (level)
+     *level = 0;
+   if (consumed_modifiers)
+     *consumed_modifiers = 0;
  
    return FALSE;
  }

Reply via email to