svkbd

simple virtual keyboard
git clone git://git.suckless.org/svkbd
Log | Files | Refs | README | LICENSE

commit d10af923a31df4cca4206fbf4f839716482fd1ba
parent 3be1e21c9f7174f7cca2b8a099990a745f657a92
Author: Reed Wade <reedwade@misterbanal.net>
Date:   Sat,  6 Mar 2021 15:09:08 +0100

Extended key definition to allow setting explicit symbol for shift modifier.

This allow key definitions as :

{ "?", XK_slash, 1, XK_Shift_L },

Which will press <S-/> wich output `?`

Signed-off-by: Reed Wade <reedwade@misterbanal.net>
Signed-off-by: Maarten van Gompel <proycon@anaproy.nl>

Diffstat:
Msvkbd.c | 28+++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/svkbd.c b/svkbd.c @@ -41,6 +41,7 @@ typedef struct { char *label; KeySym keysym; unsigned int width; + KeySym modifier; int x, y, w, h; Bool pressed; Bool highlighted; @@ -183,14 +184,20 @@ buttonpress(XEvent *e) ispressing = True; - for (i = 0; i < LENGTH(buttonmods); i++) { - if (ev->button == buttonmods[i].button) { - mod = buttonmods[i].mod; - break; + if (!(k = findkey(ev->x, ev->y))) + return; + + if (k->modifier) + mod = k->modifier; + else + for (i = 0; i < LENGTH(buttonmods); i++) { + if (ev->button == buttonmods[i].button) { + mod = buttonmods[i].mod; + break; + } } - } - if ((k = findkey(ev->x, ev->y))) - press(k, mod); + + press(k, mod); } void @@ -212,8 +219,10 @@ buttonrelease(XEvent *e) if (ev->x < 0 || ev->y < 0) { unpress(NULL, mod); - } else { - if ((k = findkey(ev->x, ev->y))) + } else if ((k = findkey(ev->x, ev->y))) { + if (k->modifier) + unpress(k, k->modifier); + else unpress(k, mod); } } @@ -872,6 +881,7 @@ showoverlay(int idx) j++; keys[j].label = overlay[i].label; keys[j].keysym = overlay[i].keysym; + keys[j].modifier = overlay[i].modifier; } currentoverlay = idx; overlaykeysym = ispressingkeysym;