diff options
author | Quentin Glidic <sardemff7+git@sardemff7.net> | 2016-04-07 20:28:40 +0200 |
---|---|---|
committer | Quentin Glidic <sardemff7+git@sardemff7.net> | 2016-05-07 11:31:04 +0200 |
commit | 67b0ce036f19fa0caa95461ab213717237b279dd (patch) | |
tree | 58070e5a8cc1c07e0bcffa2c42229105445fa087 /source/x11-helper.c | |
parent | 20791d4a71f2cca4f7388d69ea2afdad03737eab (diff) |
keybindings: Implement on-release bindings
Signed-off-by: Quentin Glidic <sardemff7+git@sardemff7.net>
Diffstat (limited to 'source/x11-helper.c')
-rw-r--r-- | source/x11-helper.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/source/x11-helper.c b/source/x11-helper.c index b6c0b232..8adb6c54 100644 --- a/source/x11-helper.c +++ b/source/x11-helper.c @@ -437,12 +437,28 @@ unsigned int x11_canonalize_mask ( unsigned int mask ) return mask; } +unsigned int x11_get_current_mask ( xkb_stuff *xkb ) +{ + unsigned int mask = 0; + for ( gsize i = 0 ; i < xkb_keymap_num_mods(xkb->keymap) ; ++i ) { + if ( xkb_state_mod_index_is_active ( xkb->state, i, XKB_STATE_MODS_EFFECTIVE ) ) { + mask |= ( 1 << i ); + } + } + return x11_canonalize_mask ( mask ); +} + // convert a Mod+key arg to mod mask and keysym -gboolean x11_parse_key ( char *combo, unsigned int *mod, xkb_keysym_t *key ) +gboolean x11_parse_key ( char *combo, unsigned int *mod, xkb_keysym_t *key, gboolean *release ) { GString *str = g_string_new ( "" ); unsigned int modmask = 0; + if ( g_str_has_prefix(combo, "!") ) { + ++combo; + *release = TRUE; + } + if ( strcasestr ( combo, "shift" ) ) { modmask |= x11_mod_masks[X11MOD_SHIFT]; if ( x11_mod_masks[X11MOD_SHIFT] == 0 ) { |