# HG changeset patch # User nkeynes # Date 1168498312 0 # Node ID 2ec052d24881fb9bfd2337dbf73c2d98a7a17f7d # Parent 1e151174ef51cb9dbaf7a1485f7103e231c9da5a Allow keyspecs to consist of a comma-separated list of keysyms --- a/src/display.c Thu Jan 11 06:51:11 2007 +0000 +++ b/src/display.c Thu Jan 11 06:51:52 2007 +0000 @@ -1,5 +1,5 @@ /** - * $Id: display.c,v 1.2 2006-06-18 12:01:50 nkeynes Exp $ + * $Id: display.c,v 1.3 2007-01-11 06:51:52 nkeynes Exp $ * * Generic support for keyboard and other input sources. The active display * driver is expected to deliver events here, where they're translated and @@ -65,16 +65,23 @@ gboolean input_register_key( const gchar *keysym, input_key_callback_t callback, void *data, uint32_t value ) { + int i; if( display_driver == NULL || keysym == NULL ) return FALSE; /* No display driver */ - uint16_t keycode = display_driver->resolve_keysym(keysym); - if( keycode == 0 ) - return FALSE; /* Invalid keysym */ - - struct keymap_entry *key = input_create_key( keycode ); - key->callback = callback; - key->data = data; - key->value = value; + gchar **strv = g_strsplit(keysym, ",", 16); + gchar **s = strv; + while( *s != NULL ) { + uint16_t keycode = display_driver->resolve_keysym(g_strstrip(*s)); + if( keycode == 0 ) + return FALSE; /* Invalid keysym */ + + struct keymap_entry *key = input_create_key( keycode ); + key->callback = callback; + key->data = data; + key->value = value; + s++; + } + g_strfreev(strv); return TRUE; }