Do some filtering on the keybinding, to get the right keycombo for alt+shift+s.

This commit is contained in:
Dave Davenport 2016-02-28 16:42:20 +01:00
parent bd04e90d9e
commit 21bce63e79
2 changed files with 20 additions and 3 deletions

View file

@ -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 ) );

View file

@ -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: <i>%s</i>\n", combo );