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;
}