code: plan9front

Download patch

ref: 187806ad2021994c4e841d4dbddc569d51023bb0
parent: acc504c319a4b4188479cfa602e40cb6851c0528
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sun Jul 18 15:54:58 EDT 2021

screenlock: don't poll to top window (thanks Stuart Morrow)

> String becomes stringbg so we have guaranteed max contrast in case the
> user changes the picture. (If you don't change the picture, it's
> white-on-black-on-black (sic) and you would never notice the change.)

--- a/sys/src/cmd/screenlock.c
+++ b/sys/src/cmd/screenlock.c
@@ -119,14 +119,19 @@
 void
 top(void*)
 {
-	int fd;
+	int fd, n;
+	char buf[128];
 
-	if((fd = open("/dev/wctl", OWRITE)) < 0)
+	if((fd = open("/dev/wctl", ORDWR)) < 0)
 		return;
 
 	for(;;){
-		write(fd, "current", 7);
-		sleep(500);
+		n = read(fd, buf, sizeof buf-1);
+		if(n > 48){
+			buf[n] = '\0';
+			if(strstr(buf+48, "notcurrent"))
+				write(fd, "current", 7);
+		}
 	}
 }
 
@@ -186,7 +191,7 @@
 		tm = localtime(time(&blank));
 		s = smprint("user %s at %d:%02.2d", getuser(), tm->hour, tm->min);
 		p = subpt(p, Pt(stringwidth(font, "m") * strlen(s) / 2, 0));
-		string(screen, p, screen->display->white, ZP, font, s);
+		stringbg(screen, p, display->white, ZP, font, s, display->black, ZP);
 	}
 	flushimage(display, 1);