From 21bce63e79656dc4cf9dbcb6c4706dd947e0b4ca Mon Sep 17 00:00:00 2001 From: Dave Davenport Date: Sun, 28 Feb 2016 16:42:20 +0100 Subject: [PATCH] Do some filtering on the keybinding, to get the right keycombo for alt+shift+s. --- source/keyb.c | 3 ++- source/x11-helper.c | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/source/keyb.c b/source/keyb.c index db4fc515..2a320aa9 100644 --- a/source/keyb.c +++ b/source/keyb.c @@ -111,7 +111,8 @@ void parse_keys_abe ( void ) abe[iter].num_bindings = 0; // Iter over bindings. - for ( char *entry = strtok_r ( keystr, ",", &sp ); entry != NULL; entry = strtok_r ( NULL, ",", &sp ) ) { + for ( char *entry = strtok_r ( keystr, ",", &sp ); entry != NULL; entry = strtok_r ( NULL, ",", &sp ) ) + { abe[iter].kb = g_realloc ( abe[iter].kb, ( abe[iter].num_bindings + 1 ) * sizeof ( KeyBinding ) ); KeyBinding *kb = &( abe[iter].kb[abe[iter].num_bindings] ); x11_parse_key ( entry, &( kb->modmask ), &( kb->keysym ) ); diff --git a/source/x11-helper.c b/source/x11-helper.c index 9d67a454..fd9941a1 100644 --- a/source/x11-helper.c +++ b/source/x11-helper.c @@ -437,8 +437,24 @@ void x11_parse_key ( char *combo, unsigned int *mod, xkb_keysym_t *key ) while ( i > 0 && !strchr ( "-+", combo[i - 1] ) ) { i--; } - - xkb_keysym_t sym = xkb_keysym_from_name ( combo + i, XKB_KEYSYM_NO_FLAGS ); + xkb_keysym_t sym = XKB_KEY_NoSymbol; + if ( ( modmask&x11_mod_masks[X11MOD_SHIFT] ) != 0 ){ + gchar * str = g_utf8_next_char ( combo + i ); + // If it is a single char, we make a capital out of it. + if ( str != NULL && *str == '\0'){ + int l = 0; + char buff[8]; + gunichar v = g_utf8_get_char ( combo + i ); + gunichar u = g_unichar_toupper ( v ); + if ( ( l = g_unichar_to_utf8 ( u, buff ) ) ) { + buff[l] = '\0'; + sym = xkb_keysym_from_name ( buff, XKB_KEYSYM_NO_FLAGS ); + } + } + } + if ( sym == XKB_KEY_NoSymbol ) { + sym = xkb_keysym_from_name ( combo + i, XKB_KEYSYM_NO_FLAGS ); + } if ( sym == XKB_KEY_NoSymbol || ( !modmask && ( strchr ( combo, '-' ) || strchr ( combo, '+' ) ) ) ) { g_string_append_printf ( str, "Sorry, rofi cannot understand the key combination: %s\n", combo );