commit 8427dcdb18de419d9d158dfa8eeedefe5baafc61
parent b0116ddb464d93adf3eeb2cd64f8ac9920cfc443
Author: lumidify <nobody@lumidify.org>
Date:   Tue,  2 Jun 2020 18:56:19 +0200
Read from stdin instead of FIFO
Diffstat:
3 files changed, 15 insertions(+), 22 deletions(-)
diff --git a/ltk.c b/ltk.c
@@ -206,30 +206,26 @@ proc_cmds(ltk_window *window, char *buf) {
 	}
 }
 
-/* copied from suckless st */
-#define TIMEDIFF(t1, t2)        ((t1.tv_sec-t2.tv_sec)*1000 + \
-                                (t1.tv_nsec-t2.tv_nsec)/1E6)
-
 /* FIXME: destroy remaining widgets in hash on exit */
 int
 ltk_mainloop(ltk_window *window) {
 	XEvent event;
-	int fd_in;
         struct stat st;
         struct timespec tick;
+	struct timeval tv;
+	fd_set rfds;
+	int fd_in = fileno(stdin);
+	char buf[200]; /* FIXME: what would be sensible? */
+	int retval;
 	tick.tv_sec = 0;
 	tick.tv_nsec = 10000;
-	char buf[200]; /* FIXME: what would be sensible? */
-
-        if (lstat("ltk_in", &st) != -1) {
-		/* FIXME... */
-		unlink("ltk_in");
-	}
+	tv.tv_sec = 0;
+	tv.tv_usec = 0;
 
-	if (mkfifo("ltk_in", S_IRWXU)) return -1;
-	fd_in = open("ltk_in", O_RDONLY | O_NONBLOCK, 0);
-	if (fd_in == -1) return -1;
 	while (running) {
+		FD_ZERO(&rfds);
+		FD_SET(fd_in, &rfds);
+		retval = select(fd_in + 1, &rfds, NULL, NULL, &tv);
 		while (XPending(window->dpy)) {
 			XNextEvent(window->dpy, &event);
 			ltk_handle_event(window, event);
@@ -250,14 +246,13 @@ ltk_mainloop(ltk_window *window) {
 				free(last);
 			} while (cur);
 			window->first_event = window->last_event = NULL;
-		} else if (!read_line(fd_in, buf, sizeof(buf))) {
+		} else if (retval != -1 && retval != 0 && !read_line(fd_in, buf, sizeof(buf))) {
 			proc_cmds(window, buf);
 		}
 		/* yes, this should be improved */
 		nanosleep(&tick, NULL);
 
 	}
-	unlink("ltk_in");
 }
 
 void
diff --git a/test.gui b/test.gui
@@ -0,0 +1,4 @@
+create button btn1
+grid btn1 0 0
+create button btn2
+grid btn2 1 1
diff --git a/test.sh b/test.sh
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-echo "create button btn1" > ltk_in
-echo "grid btn1 0 0" > ltk_in
-echo "create button btn2" > ltk_in
-echo "grid btn2 1 1" > ltk_in