---
 svkbd.c | 27 +++++++++++++--------------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/svkbd.c b/svkbd.c
index 6414675..9fca843 100644
--- a/svkbd.c
+++ b/svkbd.c
@@ -47,6 +47,7 @@ typedef struct {
        int x, y, w, h;
        Bool pressed;
        Bool highlighted;
+       Bool isoverlay;
 } Key;
 
 typedef struct {
@@ -64,7 +65,7 @@ static void configurenotify(XEvent *e);
 static void countrows();
 static int countkeys(Key *layer);
 static void drawkeyboard(void);
-static void drawkey(Key *k, int idx);
+static void drawkey(Key *k);
 static void expose(XEvent *e);
 static Key *findkey(int x, int y);
 static void leavenotify(XEvent *e);
@@ -104,7 +105,6 @@ static struct timeval pressbegin;
 static int currentlayer = 0;
 static int enableoverlays = 1;
 static int currentoverlay = -1; /* -1 = no overlay */
-static int overlaykeycount = 0; /* number of keys in the current overlay */
 static int pressonrelease = 1;
 static KeySym overlaykeysym = 0; /* keysym for which the overlay is presented 
*/
 static int releaseprotect = 0; /* set to 1 after overlay is shown, protecting 
against immediate release */
@@ -152,7 +152,7 @@ motionnotify(XEvent *e)
                                } else {
                                        keys[i].highlighted = True;
                                }
-                               drawkey(&keys[i], i);
+                               drawkey(&keys[i]);
                        }
                        continue;
                }
@@ -162,11 +162,11 @@ motionnotify(XEvent *e)
                        lostfocus = i;
                        ispressingkeysym = 0;
                        unpress(&keys[i], 0);
-                       drawkey(&keys[i], i);
+                       drawkey(&keys[i]);
                }
                if (keys[i].highlighted == True) {
                        keys[i].highlighted = False;
-                       drawkey(&keys[i], i);
+                       drawkey(&keys[i]);
                }
        }
 
@@ -297,12 +297,12 @@ drawkeyboard(void)
 
        for (i = 0; i < numkeys; i++) {
                if (keys[i].keysym != 0)
-                       drawkey(&keys[i], i);
+                       drawkey(&keys[i]);
        }
 }
 
 void
-drawkey(Key *k, int idx)
+drawkey(Key *k)
 {
        int x, y, w, h;
        int x2, y2, w2, h2;
@@ -314,7 +314,7 @@ drawkey(Key *k, int idx)
                use_scheme = SchemePress;
        else if (k->highlighted)
                use_scheme = SchemeHighlight;
-       else if (idx < overlaykeycount)
+       else if (k->isoverlay)
                use_scheme = SchemeOverlay;
        else if ((k->keysym == XK_Return) ||
                        ((k->keysym >= XK_a) && (k->keysym <= XK_z)) ||
@@ -461,7 +461,7 @@ press(Key *k, KeySym mod)
                        }
                }
        }
-       drawkey(k, 0);
+       drawkey(k);
 }
 
 int
@@ -595,7 +595,7 @@ unpress(Key *k, KeySym mod)
                if (keys[i].pressed && !IsModifierKey(keys[i].keysym)) {
                        simulate_keyrelease(keys[i].keysym);
                        keys[i].pressed = 0;
-                       drawkey(&keys[i], i);
+                       drawkey(&keys[i]);
                        break;
                }
        }
@@ -609,7 +609,7 @@ unpress(Key *k, KeySym mod)
                        if (keys[i].pressed) {
                                simulate_keyrelease(keys[i].keysym);
                                keys[i].pressed = 0;
-                               drawkey(&keys[i], i);
+                               drawkey(&keys[i]);
                        }
                }
        }
@@ -913,14 +913,13 @@ showoverlay(int idx)
        for (i = 0; i < numkeys; i++) {
                if (keys[i].pressed && !IsModifierKey(keys[i].keysym)) {
                        keys[i].pressed = 0;
-                       drawkey(&keys[i], i);
+                       drawkey(&keys[i]);
                        break;
                }
        }
 
        for (i = idx, j=0; i < OVERLAYS; i++, j++) {
                if (overlay[i].keysym == XK_Cancel) {
-                       overlaykeycount = j;
                        break;
                }
                while (keys[j].keysym == 0)
@@ -931,6 +930,7 @@ showoverlay(int idx)
                keys[j].label2 = overlay[i].label2;
                keys[j].keysym = overlay[i].keysym;
                keys[j].modifier = overlay[i].modifier;
+               keys[j].isoverlay = True;
        }
        currentoverlay = idx;
        overlaykeysym = ispressingkeysym;
@@ -945,7 +945,6 @@ hideoverlay(void)
 {
        if (debug) printdbg("Hiding overlay, overlay was #%d\n", 
currentoverlay);
        currentoverlay = -1;
-       overlaykeycount = 0;
        overlaykeysym = 0;
        currentlayer--;
        cyclelayer();
-- 
2.30.2


Reply via email to