diff --git a/CHANGELOG.md b/CHANGELOG.md index dc90b279..d1d9629e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -78,6 +78,8 @@ **must** now be written as either `Control+C` or `Control+Shift+c`, the latter being the preferred variant. (https://codeberg.org/dnkl/foot/issues/376) +* Consumed modifiers are no longer sent to the client application + (https://codeberg.org/dnkl/foot/issues/376). * The minimum version requirement for the libxkbcommon dependency is now 1.0.0. diff --git a/input.c b/input.c index 98abac9c..110bd378 100644 --- a/input.c +++ b/input.c @@ -1026,10 +1026,10 @@ key_press_release(struct seat *seat, struct terminal *term, uint32_t serial, */ enum modifier keymap_mods = MOD_NONE; - keymap_mods |= seat->kbd.shift ? MOD_SHIFT : MOD_NONE; - keymap_mods |= seat->kbd.alt ? MOD_ALT : MOD_NONE; - keymap_mods |= seat->kbd.ctrl ? MOD_CTRL : MOD_NONE; - keymap_mods |= seat->kbd.meta ? MOD_META : MOD_NONE; + keymap_mods |= mods & ~consumed & shift ? MOD_SHIFT : MOD_NONE; + keymap_mods |= mods & ~consumed & alt ? MOD_ALT : MOD_NONE; + keymap_mods |= mods & ~consumed & ctrl ? MOD_CTRL : MOD_NONE; + keymap_mods |= mods & ~consumed & meta ? MOD_META : MOD_NONE; const struct key_data *keymap; if (sym == XKB_KEY_Escape && keymap_mods == MOD_NONE && term->modify_escape_key) { @@ -1113,7 +1113,7 @@ key_press_release(struct seat *seat, struct terminal *term, uint32_t serial, } else { - if (mods & alt) { + if (mods & ~consumed & alt) { /* * When the alt modifier is pressed, we do one out of three things: *