#include <stdio.h>
#include <string.h>
#include <unistd.h>
+#include <time.h>
#include <sys/types.h>
#include <X11/extensions/Xrandr.h>
#include <X11/keysym.h>
char *argv0;
+static time_t locktime;
+
enum {
INIT,
INPUT,
oldc = INIT;
while (running && !XNextEvent(dpy, &ev)) {
+ running = !((time(NULL) - locktime < timetocancel) && (ev.type == MotionNotify));
if (ev.type == KeyPress) {
explicit_bzero(&buf, sizeof(buf));
num = XLookupString(&ev.xkey, buf, sizeof(buf), &ksym, 0);
IsPFKey(ksym) ||
IsPrivateKeypadKey(ksym))
continue;
+ if (ev.xkey.state & ControlMask) {
+ switch (ksym) {
+ case XK_u:
+ ksym = XK_Escape;
+ break;
+ case XK_m:
+ ksym = XK_Return;
+ break;
+ case XK_j:
+ ksym = XK_Return;
+ break;
+ case XK_h:
+ ksym = XK_BackSpace;
+ break;
+ }
+ }
switch (ksym) {
case XK_Return:
passwd[len] = '\0';
break;
case XK_BackSpace:
if (len)
- passwd[len--] = '\0';
+ passwd[--len] = '\0';
break;
default:
if (num && !iscntrl((int)buf[0]) &&
break;
}
}
- } else for (screen = 0; screen < nscreens; screen++)
- XRaiseWindow(dpy, locks[screen]->win);
+ } else {
+ for (screen = 0; screen < nscreens; screen++)
+ XRaiseWindow(dpy, locks[screen]->win);
+ }
}
}
XRRSelectInput(dpy, lock->win, RRScreenChangeNotifyMask);
XSelectInput(dpy, lock->root, SubstructureNotifyMask);
+ locktime = time(NULL);
return lock;
}