|
|
|
@ -32,6 +32,7 @@ static void state_erase_key(struct sway_shortcut_state *state,
|
|
|
|
|
state->pressed_keys[state->npressed] = 0;
|
|
|
|
|
state->pressed_keycodes[state->npressed] = 0;
|
|
|
|
|
}
|
|
|
|
|
state->current_key = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -56,6 +57,7 @@ static void state_add_key(struct sway_shortcut_state *state,
|
|
|
|
|
state->pressed_keys[i] = key_id;
|
|
|
|
|
state->pressed_keycodes[i] = keycode;
|
|
|
|
|
state->npressed++;
|
|
|
|
|
state->current_key = key_id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -94,7 +96,6 @@ static void get_active_binding(const struct sway_shortcut_state *state,
|
|
|
|
|
bool binding_release = binding->flags & BINDING_RELEASE;
|
|
|
|
|
|
|
|
|
|
if (modifiers ^ binding->modifiers ||
|
|
|
|
|
state->npressed != (size_t)binding->keys->length ||
|
|
|
|
|
release != binding_release ||
|
|
|
|
|
locked > binding_locked ||
|
|
|
|
|
(strcmp(binding->input, input) != 0 &&
|
|
|
|
@ -102,7 +103,9 @@ static void get_active_binding(const struct sway_shortcut_state *state,
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool match = true;
|
|
|
|
|
bool match = false;
|
|
|
|
|
if (state->npressed == (size_t)binding->keys->length) {
|
|
|
|
|
match = true;
|
|
|
|
|
for (size_t j = 0; j < state->npressed; j++) {
|
|
|
|
|
uint32_t key = *(uint32_t *)binding->keys->items[j];
|
|
|
|
|
if (key != state->pressed_keys[j]) {
|
|
|
|
@ -110,6 +113,13 @@ static void get_active_binding(const struct sway_shortcut_state *state,
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if (binding->keys->length == 1) {
|
|
|
|
|
/*
|
|
|
|
|
* If no multiple-key binding has matched, try looking for
|
|
|
|
|
* single-key bindings that match the newly-pressed key.
|
|
|
|
|
*/
|
|
|
|
|
match = state->current_key == *(uint32_t *)binding->keys->items[0];
|
|
|
|
|
}
|
|
|
|
|
if (!match) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|