diff -urN cui114/cui_srv.c cui115/cui_srv.c --- cui114/cui_srv.c Wed Apr 16 00:00:00 2014 +++ cui115/cui_srv.c Wed Apr 16 22:00:00 2014 @@ -63,9 +63,12 @@ char buf[16]; int cfd = cui_srv_accept(sfd); - termin = cui_termin_new(view, 0, y, view->w, view->h - y, cfd); + termin = cui_termin_new(view, 0, 0, 0, 0, cfd); + cui_hide(termin); + cui_xywh_set(termin, 0, y, view->w, view->h - y); + sprintf(buf, "%d", cnt++); - cui_tab_add(obj, strdup(buf), termin, TRUE); + cui_tab_add(obj, strdup(buf), termin, FALSE); } static int @@ -85,11 +88,13 @@ view_hdr(cui obj, int evt, int val, void *prm) { cui tab = (cui)prm; - cui termin, tab_btn; + cui termin, tab_btn, fc; switch(evt){ case CUI_EVT_DEAD: termin = cui_index_to_child(obj, val); + fc = cui_focus_get(); + if(fc == tab || fc == termin) cui_focus_set(NULL); cui_tab_del(tab, termin); cui_termin_del_free(termin); break; diff -urN cui114/term.c cui115/term.c --- cui114/term.c Wed Apr 16 00:00:00 2014 +++ cui115/term.c Wed Apr 16 22:00:00 2014 @@ -457,8 +457,16 @@ termin_dead(cui obj) { cui_termin p = (cui_termin)obj; - cui_readable_del(obj, p->sock); - cui_handler_call(obj->parent, CUI_EVT_DEAD, cui_index(obj)); + if(p->sock != -1){ + cui_readable_del(obj, p->sock); + close(p->sock); + p->sock = -1; + } + if(p->in_key_mode) cui_quit(); + else{ + cui_hide(obj); + cui_handler_call(obj->parent, CUI_EVT_DEAD, cui_index(obj)); + } } int @@ -481,6 +489,7 @@ cui_main(obj, obj); p->in_key_mode = FALSE; cui_draw(obj); + if(p->sock == -1) termin_dead(obj); } break; case CUI_EVT_RESIZE: