summaryrefslogtreecommitdiffstats
path: root/source/x11-helper.c
diff options
context:
space:
mode:
authorQuentin Glidic <sardemff7+git@sardemff7.net>2016-04-07 20:28:40 +0200
committerQuentin Glidic <sardemff7+git@sardemff7.net>2016-05-07 11:31:04 +0200
commit67b0ce036f19fa0caa95461ab213717237b279dd (patch)
tree58070e5a8cc1c07e0bcffa2c42229105445fa087 /source/x11-helper.c
parent20791d4a71f2cca4f7388d69ea2afdad03737eab (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.c18
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 ) {