]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/cmd/screenlock.c
merge
[plan9front.git] / sys / src / cmd / screenlock.c
index c127c2193da445bb872b6db438eec923bef9b2c3..8e3e48de8c8b5e824fda47c5cf43c724dce28693 100644 (file)
@@ -24,7 +24,7 @@ readline(char *buf, int nbuf)
        int i;
 
        i = 0;
-       while(i < nbuf-1)
+       while(i < nbuf-1){
                if(read(0, &c, 1) != 1 || c == '\04' || c == '\177'){
                        i = 0;
                        break;
@@ -36,6 +36,8 @@ readline(char *buf, int nbuf)
                        i = 0;
                else
                        buf[i++] = c;
+               blank = time(0);
+       }
        buf[i] = '\0';
 }
 
@@ -62,8 +64,6 @@ checkpassword(void)
                        break;
 
                auth_freeAI(ai);
-               blank = time(0);
-
                border(screen, screen->r, 8, display->black, ZP);
                flushimage(display, 1);
        }
@@ -80,7 +80,7 @@ blanker(void *)
                return;
 
        for(;;){
-               if(((ulong)time(0) - (ulong)blank) >= 5){
+               if(blank != 0 && ((ulong)time(0) - (ulong)blank) >= 5){
                        blank = 0;
                        write(fd, "blank", 5);
                }
@@ -91,8 +91,8 @@ blanker(void *)
 void
 grabmouse(void*)
 {
+       int fd, x, y;
        char ibuf[256], obuf[256];
-       int fd;
 
        if((fd = open("/dev/mouse", ORDWR)) < 0)
                sysfatal("can't open /dev/mouse: %r");
@@ -102,9 +102,16 @@ grabmouse(void*)
                screen->r.min.y + Dy(screen->r)/2);
 
        while(read(fd, ibuf, sizeof ibuf) > 0){
-               if(!debug)
-                       fprint(fd, "%s", obuf);
-               blank = time(0);
+               ibuf[12] = 0;
+               ibuf[24] = 0;
+               x = atoi(ibuf+1);
+               y = atoi(ibuf+13);
+               if(x != screen->r.min.x + Dx(screen->r)/2 ||
+                  y != screen->r.min.y + Dy(screen->r)/2){
+                       if(!debug)
+                               fprint(fd, "%s", obuf);
+                       blank = time(0);
+               }
        }
 }
 
@@ -128,8 +135,8 @@ lockscreen(void)
        buf[sizeof buf-1] = 0;
        if(tokenize(buf, flds, Nfld) != Nfld)
                sysfatal("can't tokenize /dev/screen header");
-       snprint(newcmd, sizeof newcmd, "-r %s %s %d %d",
-               flds[1], flds[2], atoi(flds[3]), atoi(flds[4]));
+       snprint(newcmd, sizeof newcmd, "-r %s %s %s %s",
+               flds[1], flds[2], flds[3], flds[4]);
 
        newwindow(newcmd);
        if((fd = open("/dev/consctl", OWRITE)) >= 0)
@@ -146,6 +153,7 @@ lockscreen(void)
 
        if(initdraw(nil, nil, "screenlock") < 0)
                sysfatal("initdraw failed");
+       screen = _screen->image;        /* fullscreen */
 
        if((fd = open(pic, OREAD)) >= 0){
                if((i = readimage(display, fd, 0)) != nil){