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:
M | svkbd.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;