revision 271:2ec052d24881
summary |
tree |
shortlog |
changelog |
graph |
changeset |
raw | bz2 | zip | gz changeset | 271:2ec052d24881 |
parent | 270:1e151174ef51 |
child | 272:fb6be85235e8 |
author | nkeynes |
date | Thu Jan 11 06:51:52 2007 +0000 (17 years ago) |
Allow keyspecs to consist of a comma-separated list of keysyms
src/display.c | view | annotate | diff | log |
1.1 --- a/src/display.c Thu Jan 11 06:51:11 2007 +00001.2 +++ b/src/display.c Thu Jan 11 06:51:52 2007 +00001.3 @@ -1,5 +1,5 @@1.4 /**1.5 - * $Id: display.c,v 1.2 2006-06-18 12:01:50 nkeynes Exp $1.6 + * $Id: display.c,v 1.3 2007-01-11 06:51:52 nkeynes Exp $1.7 *1.8 * Generic support for keyboard and other input sources. The active display1.9 * driver is expected to deliver events here, where they're translated and1.10 @@ -65,16 +65,23 @@1.11 gboolean input_register_key( const gchar *keysym, input_key_callback_t callback,1.12 void *data, uint32_t value )1.13 {1.14 + int i;1.15 if( display_driver == NULL || keysym == NULL )1.16 return FALSE; /* No display driver */1.17 - uint16_t keycode = display_driver->resolve_keysym(keysym);1.18 - if( keycode == 0 )1.19 - return FALSE; /* Invalid keysym */1.20 -1.21 - struct keymap_entry *key = input_create_key( keycode );1.22 - key->callback = callback;1.23 - key->data = data;1.24 - key->value = value;1.25 + gchar **strv = g_strsplit(keysym, ",", 16);1.26 + gchar **s = strv;1.27 + while( *s != NULL ) {1.28 + uint16_t keycode = display_driver->resolve_keysym(g_strstrip(*s));1.29 + if( keycode == 0 )1.30 + return FALSE; /* Invalid keysym */1.31 +1.32 + struct keymap_entry *key = input_create_key( keycode );1.33 + key->callback = callback;1.34 + key->data = data;1.35 + key->value = value;1.36 + s++;1.37 + }1.38 + g_strfreev(strv);1.39 return TRUE;1.40 }
.