Commit 898648181dd6ed59dececc949b45712b94a7b281

Stefan Sperling 2018-09-02T15:16:13

close all child views when closing a view in tog's view_loop()

diff --git a/tog/tog.c b/tog/tog.c
index a8666e5..b32d0a7 100644
--- a/tog/tog.c
+++ b/tog/tog.c
@@ -465,22 +465,18 @@ view_loop(struct tog_view *view)
 		if (err)
 			break;
 		if (dead_view) {
-			struct tog_view *v;
+			struct tog_view *v, *t;
 			TAILQ_REMOVE(&views, dead_view, entry);
-			TAILQ_FOREACH(v, &views, entry) {
-				if (v->parent == dead_view)
-					v->parent = NULL;
+			TAILQ_FOREACH_SAFE(v, &views, entry, t) {
+				if (v->parent == dead_view) {
+					TAILQ_REMOVE(&views, v, entry);
+					view_close(v);
+				}
 			}
 			if (dead_view->parent)
 				view = dead_view->parent;
 			else
 				view = TAILQ_LAST(&views, tog_view_list_head);
-			if (dead_view->child) {
-				TAILQ_REMOVE(&views, dead_view->child, entry);
-				err = view_close(dead_view->child);
-				if (err)
-					goto done;
-			}
 			err = view_close(dead_view);
 			if (err)
 				goto done;