Introduction
Introduction Statistics Contact Development Disclaimer Help
cleanup and reworking some of the logic - svkbd - simple virtual keyboard
git clone git://git.suckless.org/svkbd
Log
Files
Refs
README
LICENSE
---
commit 444ceabde3307690d6ad3699069260acd12991ce
parent a43bf5c4c159a07f3350eeca8b0119e661359cf6
Author: Maarten van Gompel <[email protected]>
Date: Mon, 15 Mar 2021 11:43:48 +0100
cleanup and reworking some of the logic
Diffstat:
M svkbd.c | 216 +++++++++++++++--------------…
1 file changed, 107 insertions(+), 109 deletions(-)
---
diff --git a/svkbd.c b/svkbd.c
@@ -101,7 +101,6 @@ static Drw *drw;
static Window root, win;
static Clr* scheme[SchemeLast];
static Bool running = True, isdock = False;
-static KeySym pressedmod = 0;
static struct timeval pressbegin;
static int currentlayer = 0;
static int enableoverlays = 1;
@@ -152,24 +151,24 @@ motionnotify(XEvent *e)
if (keys[i].highlighted != True) {
if (ispressing) {
gainedfocus = i;
- keys[i].pressed = True;
} else {
keys[i].highlighted = True;
}
drawkey(&keys[i]);
}
continue;
+ } else if (keys[i].highlighted == True) {
+ keys[i].highlighted = False;
+ drawkey(&keys[i]);
}
+ }
- if (!IsModifierKey(keys[i].keysym) && keys[i].pressed == True)…
+ for (i = 0; i < numkeys; i++) {
+ if (!IsModifierKey(keys[i].keysym) && keys[i].pressed == True …
if (debug) printdbg("Pressed key lost focus: %ld\n", k…
lostfocus = i;
ispressingkeysym = 0;
- unpress(&keys[i], 0);
- drawkey(&keys[i]);
- }
- if (keys[i].highlighted == True) {
- keys[i].highlighted = False;
+ keys[i].pressed = 0;
drawkey(&keys[i]);
}
}
@@ -177,6 +176,7 @@ motionnotify(XEvent *e)
if ((lostfocus != -1) && (gainedfocus != -1) && (lostfocus != gainedfo…
if (debug) printdbg("Clicking new key that gained focus\n");
press(&keys[gainedfocus], 0);
+ keys[gainedfocus].pressed = True;
keys[gainedfocus].highlighted = True;
}
@@ -426,7 +426,7 @@ record_press_begin(KeySym ks)
}
void
-press(Key *k, KeySym mod)
+press(Key *k, KeySym buttonmod)
{
int i;
int overlayidx = -1;
@@ -442,23 +442,20 @@ press(Key *k, KeySym mod)
if (enableoverlays && currentoverlay == -1)
overlayidx = hasoverlay(k->keysym);
if ((pressonrelease) || (enableoverlays && overlayidx != -1)) {
- //if (!pressbegin.tv_sec && !pressbegin.tv_usec) {
- /*record the begin of the press, don't simulat…
- record_press_begin(k->keysym);
- //}
+ /*record the begin of the press, don't simulate the ac…
+ record_press_begin(k->keysym);
} else {
- if (debug) printdbg("Simulating press: %ld (mod %ld)\n…
+ if (debug) printdbg("Simulating press: %ld (mod %ld)\n…
for (i = 0; i < numkeys; i++) {
if (keys[i].pressed && IsModifierKey(keys[i].k…
simulate_keypress(keys[i].keysym);
}
}
- pressedmod = mod;
- if (pressedmod) {
- simulate_keypress(mod);
+ if (buttonmod) {
+ simulate_keypress(buttonmod);
}
simulate_keypress(k->keysym);
- if (printoutput) printkey(k, mod);
+ if (printoutput) printkey(k, buttonmod);
for (i = 0; i < numkeys; i++) {
if (keys[i].pressed && IsModifierKey(keys[i].k…
@@ -549,7 +546,7 @@ get_press_duration(void)
}
void
-unpress(Key *k, KeySym mod)
+unpress(Key *k, KeySym buttonmod)
{
int i;
@@ -573,19 +570,19 @@ unpress(Key *k, KeySym mod)
}
if ((pressbegin.tv_sec || pressbegin.tv_usec) && (enableoverlays || pr…
- if (debug) printdbg("Delayed simulation of pre…
- /* simulate the press event, as we postponed i…
- for (i = 0; i < numkeys; i++) {
- if (keys[i].pressed && IsModifierKey(k…
- simulate_keypress(keys[i].keys…
- }
- }
- if (mod) {
- simulate_keypress(mod);
- }
- simulate_keypress(k->keysym);
- pressbegin.tv_sec = 0;
- pressbegin.tv_usec = 0;
+ if (debug) printdbg("Delayed simulation of press after release…
+ /* simulate the press event, as we postponed it earlier in pre…
+ for (i = 0; i < numkeys; i++) {
+ if (keys[i].pressed && IsModifierKey(keys[i].keysym)) {
+ simulate_keypress(keys[i].keysym);
+ }
+ }
+ if (buttonmod) {
+ simulate_keypress(buttonmod);
+ }
+ simulate_keypress(k->keysym);
+ pressbegin.tv_sec = 0;
+ pressbegin.tv_usec = 0;
}
if (debug) {
@@ -600,18 +597,19 @@ unpress(Key *k, KeySym mod)
for (i = 0; i < numkeys; i++) {
if (keys[i].pressed && !IsModifierKey(keys[i].keysym)) {
simulate_keyrelease(keys[i].keysym);
- if ((printoutput) && (ispressingkeysym == keys[i].keys…
+ if (printoutput) printkey(&keys[i], buttonmod);
keys[i].pressed = 0;
drawkey(&keys[i]);
}
}
- if (i != numkeys) {
- if (mod) {
- simulate_keyrelease(mod);
- }
+ if (buttonmod) {
+ simulate_keyrelease(buttonmod);
+ }
+
+ if ((k == NULL) || (!IsModifierKey(k->keysym))) {
for (i = 0; i < numkeys; i++) {
- if (keys[i].pressed) {
+ if (keys[i].pressed && IsModifierKey(keys[i].keysym)) {
simulate_keyrelease(keys[i].keysym);
keys[i].pressed = 0;
drawkey(&keys[i]);
@@ -697,70 +695,70 @@ run(void)
void
readxresources(void) {
- XrmInitialize();
-
- char* xrm;
- if ((xrm = XResourceManagerString(drw->dpy))) {
- char *type;
- XrmDatabase xdb = XrmGetStringDatabase(xrm);
- XrmValue xval;
-
- if (XrmGetResource(xdb, "svkbd.font", "*", &type, &xval) && !f…
- fonts[0] = strdup(xval.addr);
-
- if (XrmGetResource(xdb, "svkbd.background", "*", &type, &xval)…
- colors[SchemeNorm][ColBg] = strdup(xval.addr);
- if (XrmGetResource(xdb, "svkbd.foreground", "*", &type, &xval)…
- colors[SchemeNorm][ColFg] = strdup(xval.addr);
-
- if (XrmGetResource(xdb, "svkbd.shiftforeground", "*", &type, &…
- colors[SchemeNormShift][ColFg] = strdup(xval.addr);
- if (XrmGetResource(xdb, "svkbd.shiftbackground", "*", &type, &…
- colors[SchemeNormShift][ColBg] = strdup(xval.addr);
-
- if (XrmGetResource(xdb, "svkbd.ABCforeground", "*", &type, &xv…
- colors[SchemeNormABC][ColFg] = strdup(xval.addr);
- if (XrmGetResource(xdb, "svkbd.ABCbackground", "*", &type, &xv…
- colors[SchemeNormABC][ColBg] = strdup(xval.addr);
-
- if (XrmGetResource(xdb, "svkbd.ABCshiftforeground", "*", &type…
- colors[SchemeNormShift][ColFg] = strdup(xval.addr);
- if (XrmGetResource(xdb, "svkbd.ABCshiftbackground", "*", &type…
- colors[SchemeNormShift][ColBg] = strdup(xval.addr);
-
- if (XrmGetResource(xdb, "svkbd.pressbackground", "*", &type, &…
- colors[SchemePress][ColBg] = strdup(xval.addr);
- if (XrmGetResource(xdb, "svkbd.pressforeground", "*", &type, &…
- colors[SchemePress][ColFg] = strdup(xval.addr);
-
- if (XrmGetResource(xdb, "svkbd.pressshiftbackground", "*", &ty…
- colors[SchemePressShift][ColBg] = strdup(xval.addr);
- if (XrmGetResource(xdb, "svkbd.pressshiftforeground", "*", &ty…
- colors[SchemePressShift][ColFg] = strdup(xval.addr);
-
- if (XrmGetResource(xdb, "svkbd.highlightbackground", "*", &typ…
- colors[SchemeHighlight][ColBg] = strdup(xval.addr);
- if (XrmGetResource(xdb, "svkbd.highlightforeground", "*", &typ…
- colors[SchemeHighlight][ColFg] = strdup(xval.addr);
-
- if (XrmGetResource(xdb, "svkbd.highlightshiftbackground", "*",…
- colors[SchemeHighlightShift][ColBg] = strdup(xval.addr…
- if (XrmGetResource(xdb, "svkbd.highlightshiftforeground", "*",…
- colors[SchemeHighlightShift][ColFg] = strdup(xval.addr…
-
- if (XrmGetResource(xdb, "svkbd.overlaybackground", "*", &type,…
- colors[SchemeOverlay][ColBg] = strdup(xval.addr);
- if (XrmGetResource(xdb, "svkbd.overlayforeground", "*", &type,…
- colors[SchemeOverlay][ColFg] = strdup(xval.addr);
-
- if (XrmGetResource(xdb, "svkbd.overlayshiftbackground", "*", &…
- colors[SchemeOverlayShift][ColBg] = strdup(xval.addr);
- if (XrmGetResource(xdb, "svkbd.overlayshiftforeground", "*", &…
- colors[SchemeOverlayShift][ColFg] = strdup(xval.addr);
-
-
- XrmDestroyDatabase(xdb);
- }
+ XrmInitialize();
+
+ char* xrm;
+ if ((xrm = XResourceManagerString(drw->dpy))) {
+ char *type;
+ XrmDatabase xdb = XrmGetStringDatabase(xrm);
+ XrmValue xval;
+
+ if (XrmGetResource(xdb, "svkbd.font", "*", &type, &xval) && !f…
+ fonts[0] = strdup(xval.addr);
+
+ if (XrmGetResource(xdb, "svkbd.background", "*", &type, &xval)…
+ colors[SchemeNorm][ColBg] = strdup(xval.addr);
+ if (XrmGetResource(xdb, "svkbd.foreground", "*", &type, &xval)…
+ colors[SchemeNorm][ColFg] = strdup(xval.addr);
+
+ if (XrmGetResource(xdb, "svkbd.shiftforeground", "*", &type, &…
+ colors[SchemeNormShift][ColFg] = strdup(xval.a…
+ if (XrmGetResource(xdb, "svkbd.shiftbackground", "*", &type, &…
+ colors[SchemeNormShift][ColBg] = strdup(xval.a…
+
+ if (XrmGetResource(xdb, "svkbd.ABCforeground", "*", &type, &xv…
+ colors[SchemeNormABC][ColFg] = strdup(xval.add…
+ if (XrmGetResource(xdb, "svkbd.ABCbackground", "*", &type, &xv…
+ colors[SchemeNormABC][ColBg] = strdup(xval.add…
+
+ if (XrmGetResource(xdb, "svkbd.ABCshiftforeground", "*", &type…
+ colors[SchemeNormShift][ColFg] = strdup(xval.a…
+ if (XrmGetResource(xdb, "svkbd.ABCshiftbackground", "*", &type…
+ colors[SchemeNormShift][ColBg] = strdup(xval.a…
+
+ if (XrmGetResource(xdb, "svkbd.pressbackground", "*", &type, &…
+ colors[SchemePress][ColBg] = strdup(xval.addr);
+ if (XrmGetResource(xdb, "svkbd.pressforeground", "*", &type, &…
+ colors[SchemePress][ColFg] = strdup(xval.addr);
+
+ if (XrmGetResource(xdb, "svkbd.pressshiftbackground", "*", &ty…
+ colors[SchemePressShift][ColBg] = strdup(xval.…
+ if (XrmGetResource(xdb, "svkbd.pressshiftforeground", "*", &ty…
+ colors[SchemePressShift][ColFg] = strdup(xval.…
+
+ if (XrmGetResource(xdb, "svkbd.highlightbackground", "*", &typ…
+ colors[SchemeHighlight][ColBg] = strdup(xval.a…
+ if (XrmGetResource(xdb, "svkbd.highlightforeground", "*", &typ…
+ colors[SchemeHighlight][ColFg] = strdup(xval.a…
+
+ if (XrmGetResource(xdb, "svkbd.highlightshiftbackground", "*",…
+ colors[SchemeHighlightShift][ColBg] = strdup(x…
+ if (XrmGetResource(xdb, "svkbd.highlightshiftforeground", "*",…
+ colors[SchemeHighlightShift][ColFg] = strdup(x…
+
+ if (XrmGetResource(xdb, "svkbd.overlaybackground", "*", &type,…
+ colors[SchemeOverlay][ColBg] = strdup(xval.add…
+ if (XrmGetResource(xdb, "svkbd.overlayforeground", "*", &type,…
+ colors[SchemeOverlay][ColFg] = strdup(xval.add…
+
+ if (XrmGetResource(xdb, "svkbd.overlayshiftbackground", "*", &…
+ colors[SchemeOverlayShift][ColBg] = strdup(xva…
+ if (XrmGetResource(xdb, "svkbd.overlayshiftforeground", "*", &…
+ colors[SchemeOverlayShift][ColFg] = strdup(xva…
+
+
+ XrmDestroyDatabase(xdb);
+ }
}
@@ -798,17 +796,17 @@ setup(void)
readxresources();
- /* Apply defaults to font and colors*/
- if ( !fonts[0] )
- fonts[0] = strdup(defaultfonts[0]);
- for (i = 0; i < SchemeLast; ++i){
+ /* Apply defaults to font and colors*/
+ if ( !fonts[0] )
+ fonts[0] = strdup(defaultfonts[0]);
+ for (i = 0; i < SchemeLast; ++i){
for (j = 0; j < 2; ++j){
if ( !colors[i][j] )
colors[i][j] = strdup(defaultcolors[i][j]);
}
- }
+ }
- if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
+ if (!drw_fontset_create(drw, (const char **) fonts, LENGTH(fonts)))
die("no fonts could be loaded");
free(fonts[0]);
@@ -842,7 +840,7 @@ setup(void)
/* init appearance */
for (j = 0; j < SchemeLast; j++)
- scheme[j] = drw_scm_create(drw, colors[j], 2);
+ scheme[j] = drw_scm_create(drw, (const char **) colors[j], 2);
for (j = 0; j < SchemeLast; ++j) {
free(colors[j][ColFg]);
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.