--- a/dialog-1.3-20181107.orig/treeview.c 2018-06-20 03:57:01.000000000 +0000 +++ b/dialog-1.3-20181107/treeview.c 2018-11-24 13:13:41.920241412 +0000 @@ -391,22 +391,20 @@ if (key == DLGK_TOGGLE) { int current = scrollamt + choice; int next = items[current].state + 1; - + int current_state = items[current].state; + if (next >= num_states) next = 0; - if (flag == FLAG_CHECK) { /* checklist? */ - items[current].state = next; - } else { - for (i = 0; i < item_no; i++) { - if (i != current) { - items[i].state = 0; - } - } - if (items[current].state) { - items[current].state = next ? next : 1; - } else { - items[current].state = 1; + if (flag != FLAG_CHECK) { /* checklist? */ + for (i = current + 1; i <= item_no; i++) { + if (depths[i] > depths[current]) { + items[i].state = current_state == 1 ? 0 : 1; + items[current].state = next; + } else { + items[current].state = next; + break; + } } } print_list(&all, choice, scrollamt, max_choice);