|
|
@@ -351,15 +351,21 @@ app_add_global_keybind(struct app *app, const char *keybind,
|
|
|
IF_GOTO(words.size != 1, invalid_key);
|
|
|
/* for */ {
|
|
|
struct str_da chars = str_split(words.items[0], '-');
|
|
|
- IF_GOTO(chars.size != 2, invalid_key)
|
|
|
- IF_GOTO(chars.items[0].size != 1, invalid_key)
|
|
|
- IF_GOTO(chars.items[1].size != 1, invalid_key)
|
|
|
-
|
|
|
+ IF_GOTO(chars.size != 2, invalid_key);
|
|
|
+ IF_GOTO(chars.items[0].size != 1, invalid_key);
|
|
|
SDL_Keymod mod = char_to_keymod(chars.items[0].data[0]);
|
|
|
IF_GOTO((int32_t)(mod) == -1, invalid_key);
|
|
|
|
|
|
- SDL_KeyCode key = char_to_keycode(chars.items[1].data[0]);
|
|
|
- IF_GOTO(key == SDLK_UNKNOWN, invalid_key);
|
|
|
+ SDL_KeyCode key;
|
|
|
+ if ( chars.items[1].size == 1 ) {
|
|
|
+ key = char_to_keycode(chars.items[1].data[0]);
|
|
|
+ IF_GOTO(key == SDLK_UNKNOWN, invalid_key);
|
|
|
+ } else if ( chars.items[1].data[0] == '<' ) {
|
|
|
+ key = str_to_keycode(chars.items[1]);
|
|
|
+ IF_GOTO(key == SDLK_UNKNOWN, invalid_key);
|
|
|
+ } else {
|
|
|
+ goto invalid_key;
|
|
|
+ }
|
|
|
DA_DESTROY(chars);
|
|
|
|
|
|
struct app_kbd kbd = {
|