rework setting window color - slock - simple X display locker utility
 (HTM) git clone git://git.suckless.org/slock
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 754195f8d75586e23d1cc69cad00710802e0cb5d
 (DIR) parent 10d4e479c5f6d91bf86e15be3a12c6b09c9808be
 (HTM) Author: Markus Teich <markus.teich@stusta.mhn.de>
       Date:   Fri,  8 May 2015 17:10:15 +0200
       
       rework setting window color
       
       Diffstat:
         M slock.c                             |      17 +++++++----------
       
       1 file changed, 7 insertions(+), 10 deletions(-)
       ---
 (DIR) diff --git a/slock.c b/slock.c
       @@ -119,11 +119,12 @@ readpw(Display *dpy, const char *pws)
        {
                char buf[32], passwd[256];
                int num, screen;
       -        unsigned int len, llen;
       +        unsigned int len, color;
                KeySym ksym;
                XEvent ev;
       +        static int oldc = INIT;
        
       -        len = llen = 0;
       +        len = 0;
                running = True;
        
                /* As "slock" stands for "Simple X display locker", the DPMS settings
       @@ -174,18 +175,14 @@ readpw(Display *dpy, const char *pws)
                                        }
                                        break;
                                }
       -                        if (llen == 0 && len != 0) {
       +                        color = len ? INPUT : (failure || failonclear ? FAILED : INIT);
       +                        if (oldc != color) {
                                        for (screen = 0; screen < nscreens; screen++) {
       -                                        XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[INPUT]);
       -                                        XClearWindow(dpy, locks[screen]->win);
       -                                }
       -                        } else if (llen != 0 && len == 0) {
       -                                for (screen = 0; screen < nscreens; screen++) {
       -                                        XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[failure || failonclear ? FAILED : INIT]);
       +                                        XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[color]);
                                                XClearWindow(dpy, locks[screen]->win);
                                        }
       +                                oldc = color;
                                }
       -                        llen = len;
                        } else if (rr && ev.type == rrevbase + RRScreenChangeNotify) {
                                XRRScreenChangeNotifyEvent *rre = (XRRScreenChangeNotifyEvent*)&ev;
                                for (screen = 0; screen < nscreens; screen++) {