aboutsummaryrefslogtreecommitdiff
path: root/sway/handlers.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/handlers.c')
-rw-r--r--sway/handlers.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/sway/handlers.c b/sway/handlers.c
index 938dc3fd..f183c418 100644
--- a/sway/handlers.c
+++ b/sway/handlers.c
@@ -57,24 +57,27 @@ bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifiers
// Lowercase if necessary
sym = tolower(sym);
- if (state == WLC_KEY_STATE_PRESSED) {
- int i;
- for (i = 0; i < mode->bindings->length; ++i) {
- struct sway_binding *binding = mode->bindings->items[i];
-
- if ((modifiers->mods & binding->modifiers) == binding->modifiers) {
- bool match = true;
- int j;
- for (j = 0; j < binding->keys->length; ++j) {
- xkb_keysym_t *k = binding->keys->items[j];
- if (sym != *k) {
- match = false;
- break;
- }
+ int i;
+ for (i = 0; i < mode->bindings->length; ++i) {
+ struct sway_binding *binding = mode->bindings->items[i];
+
+ if ((modifiers->mods & binding->modifiers) == binding->modifiers) {
+ bool match = true;
+ int j;
+ for (j = 0; j < binding->keys->length; ++j) {
+ xkb_keysym_t *k = binding->keys->items[j];
+ if (sym != *k) {
+ match = false;
+ break;
}
+ }
- if (match) {
- cmd_success = handle_command(config, binding->command);
+ if (match) {
+ // TODO: --released
+ if (state == WLC_KEY_STATE_PRESSED) {
+ cmd_success = !handle_command(config, binding->command);
+ } else {
+ cmd_success = true;
}
}
}