commit 5d21899cd0709d59584964aed6e94c536f08c911
parent df7e4a4517d0078deebaac2348838d8e4658d11f
Author: lumidify <nobody@lumidify.org>
Date:   Sun, 21 Feb 2021 17:23:21 +0100
Exit ltkd when no clients are left
Diffstat:
5 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/README.md b/README.md
@@ -15,3 +15,6 @@ make
 
 If you click the top button, it should exit. That's all it does now.
 Also read the comment in './test.sh'.
+
+New:
+./testbox.sh shows my gopherhole, but most buttons don't actually do anything.
diff --git a/TODO b/TODO
@@ -1,3 +1,5 @@
+Error levels: allow to only print errors and ignore regular events
+
 Possibly implement xrandr support for proper dpi handling
 
 Double-buffering; general improvements to rendering...
diff --git a/ltk.h b/ltk.h
@@ -170,5 +170,6 @@ int ltk_widget_id_free(const char *id);
 ltk_widget *ltk_get_widget(const char *id, ltk_widget_type type, char **errstr);
 void ltk_set_widget(ltk_widget *widget, const char *id);
 void ltk_remove_widget(const char *id);
+void ltk_quit(ltk_window *window);
 
 #endif
diff --git a/ltkd.c b/ltkd.c
@@ -1,3 +1,4 @@
+/* FIXME: backslashes should be parsed properly! */
 /* FIXME Figure out how to properly print window id */
 /* FIXME: PROPERLY CLEANUP ALL THEMES */
 /* FIXME: error checking in tokenizer (is this necessary?) */
@@ -231,6 +232,16 @@ ltk_mainloop(ltk_window *window) {
 						FD_CLR(clifd, &wallfds);
 						sockets[i].fd = -1;
 						close(clifd);
+						int newmaxsocket = -1;
+						for (int j = 0; j <= maxsocket; j++) {
+							if (sockets[j].fd >= 0)
+								newmaxsocket = j;
+						}
+						maxsocket = newmaxsocket;
+						if (maxsocket == -1) {
+							ltk_quit(window);
+							break;
+						}
 					} else {
 						process_commands(window, &sockets[i]);
 					}
diff --git a/testbox.sh b/testbox.sh
@@ -18,6 +18,9 @@ do
 	"exit_btn button_click")
 		echo "quit"
 		;;
+	"btn0 button_click")
+		echo "button bla create \"safhaskfldshk\"\nbox box1 add bla w"
+		;;
 	*)
 		printf "%s\n" "$cmd" >&2
 		;;