Commit Diff


commit - 38ce06e0433dbfa9ac9476741db567062839dcef
commit + ae73d513331b62732d07ebc66affe93d059f4040
blob - fbbf95296b77479b91e2d96e5810637ebd1702cb
blob + 75e4fb3b760bc10f77b32abb430480e3fd07e9cb
--- tog/tog.c
+++ tog/tog.c
@@ -507,8 +507,17 @@ view_loop(struct tog_view *view)
 				goto done;
 		}
 		if (new_view) {
+			struct tog_view *v, *t;
 			view->focussed = 0;
-			/* TODO: de-duplicate! */
+			/* Only allow one view per type. */
+			TAILQ_FOREACH_SAFE(v, &views, entry, t) {
+				if (v->type != new_view->type)
+					continue;
+				TAILQ_REMOVE(&views, v, entry);
+				err = view_close(v);
+				if (err)
+					goto done;
+			}
 			TAILQ_INSERT_TAIL(&views, new_view, entry);
 			if (new_view->parent) {
 				err = view_set_child(new_view->parent, new_view);