URI: 
       slock-capscolor.diff - sites - public wiki contents of suckless.org
  HTML git clone git://git.suckless.org/sites
   DIR Log
   DIR Files
   DIR Refs
       ---
       slock-capscolor.diff (3237B)
       ---
            1 diff --git a/config.def.h b/config.def.h
            2 index 89e5977..27d533f 100644
            3 --- a/config.def.h
            4 +++ b/config.def.h
            5 @@ -1,2 +1,3 @@
            6  #define COLOR1 "black"
            7  #define COLOR2 "#005577"
            8 +#define COLORC "red"
            9 diff --git a/slock.c b/slock.c
           10 index 407a540..77bfc1f 100644
           11 --- a/slock.c
           12 +++ b/slock.c
           13 @@ -16,6 +16,7 @@
           14  #include <X11/keysym.h>
           15  #include <X11/Xlib.h>
           16  #include <X11/Xutil.h>
           17 +#include <X11/XKBlib.h>
           18  
           19  #if HAVE_BSD_AUTH
           20  #include <login_cap.h>
           21 @@ -28,7 +29,7 @@ typedef struct {
           22          int screen;
           23          Window root, win;
           24          Pixmap pmap;
           25 -        unsigned long colors[2];
           26 +        unsigned long colors[3];
           27  } Lock;
           28  
           29  static Lock **locks;
           30 @@ -106,14 +107,18 @@ readpw(Display *dpy, const char *pws)
           31  #endif
           32  {
           33          char buf[32], passwd[256];
           34 -        int num, screen;
           35 -        unsigned int len, llen;
           36 +        int num, screen, caps, lcaps;
           37 +        unsigned int len, llen, indicators;
           38          KeySym ksym;
           39          XEvent ev;
           40  
           41          len = llen = 0;
           42 +    caps = lcaps = 0;
           43          running = True;
           44  
           45 +    if(!XkbGetIndicatorState(dpy, XkbUseCoreKbd, &indicators))
           46 +        caps = indicators & 1;
           47 +
           48          /* As "slock" stands for "Simple X display locker", the DPMS settings
           49           * had been removed and you can set it with "xset" or some other
           50           * utility. This way the user can easily set a customized DPMS
           51 @@ -153,6 +158,9 @@ readpw(Display *dpy, const char *pws)
           52                                  if (len)
           53                                          --len;
           54                                  break;
           55 +            case XK_Caps_Lock:
           56 +                caps = !caps;
           57 +                break;
           58                          default:
           59                                  if (num && !iscntrl((int) buf[0]) && (len + num < sizeof passwd)) {
           60                                          memcpy(passwd + len, buf, num);
           61 @@ -160,9 +168,9 @@ readpw(Display *dpy, const char *pws)
           62                                  }
           63                                  break;
           64                          }
           65 -                        if (llen == 0 && len != 0) {
           66 +                        if ((llen == 0 && len != 0) || caps != lcaps) {
           67                                  for (screen = 0; screen < nscreens; screen++) {
           68 -                                        XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[1]);
           69 +                                        XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[caps ? 2 : 1]);
           70                                          XClearWindow(dpy, locks[screen]->win);
           71                                  }
           72                          } else if (llen != 0 && len == 0) {
           73 @@ -172,6 +180,7 @@ readpw(Display *dpy, const char *pws)
           74                                  }
           75                          }
           76                          llen = len;
           77 +            lcaps = caps;
           78                  }
           79                  else for (screen = 0; screen < nscreens; screen++)
           80                          XRaiseWindow(dpy, locks[screen]->win);
           81 @@ -185,7 +194,7 @@ unlockscreen(Display *dpy, Lock *lock)
           82                  return;
           83  
           84          XUngrabPointer(dpy, CurrentTime);
           85 -        XFreeColors(dpy, DefaultColormap(dpy, lock->screen), lock->colors, 2, 0);
           86 +        XFreeColors(dpy, DefaultColormap(dpy, lock->screen), lock->colors, 3, 0);
           87          XFreePixmap(dpy, lock->pmap);
           88          XDestroyWindow(dpy, lock->win);
           89  
           90 @@ -219,6 +228,8 @@ lockscreen(Display *dpy, int screen)
           91          lock->win = XCreateWindow(dpy, lock->root, 0, 0, DisplayWidth(dpy, lock->screen), DisplayHeight(dpy, lock->screen),
           92                                    0, DefaultDepth(dpy, lock->screen), CopyFromParent,
           93                                    DefaultVisual(dpy, lock->screen), CWOverrideRedirect | CWBackPixel, &wa);
           94 +        XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), COLORC, &color, &dummy);
           95 +        lock->colors[2] = color.pixel;
           96          XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), COLOR2, &color, &dummy);
           97          lock->colors[1] = color.pixel;
           98          XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), COLOR1, &color, &dummy);