list widget selection
[oftp] / src / tui.c
index 99bdf2a..1cdad05 100644 (file)
--- a/src/tui.c
+++ b/src/tui.c
@@ -6,6 +6,7 @@
 #include "tuipriv.h"
 #include "tgfx.h"
 #include "darray.h"
+#include "util.h"
 
 
 int tui_init(void)
@@ -54,7 +55,7 @@ void tui_remove_widget(struct tui_widget *par, struct tui_widget *w)
        struct tui_widget *iter, dummy;
 
        if(w->par != par) {
-               fprintf(stderr, "failed to remove widget %p from %p\n", w, par);
+               fprintf(stderr, "failed to remove widget %p from %p\n", (void*)w, (void*)par);
                return;
        }
 
@@ -78,6 +79,11 @@ struct tui_widget *tui_parent(struct tui_widget *w)
        return w->par;
 }
 
+int tui_isdirty(struct tui_widget *w)
+{
+       return w->dirty;
+}
+
 void tui_draw(struct tui_widget *w)
 {
        struct tui_widget *iter;
@@ -85,12 +91,15 @@ void tui_draw(struct tui_widget *w)
        if(w->cbfunc[TUI_DRAW]) {
                w->cbfunc[TUI_DRAW](w, 0);
        }
+       w->dirty = 0;
 
        iter = w->child;
        while(iter) {
                tui_draw(iter);
                iter = iter->next;
        }
+
+       tg_redraw();
 }
 
 void tui_set_callback(struct tui_widget *w, int type, tui_callback func, void *cls)
@@ -99,6 +108,18 @@ void tui_set_callback(struct tui_widget *w, int type, tui_callback func, void *c
        w->cbcls[type] = cls;
 }
 
+int tui_set_title(struct tui_widget *w, const char *s)
+{
+       free(w->title);
+       w->title = strdup_nf(s);
+       return 0;
+}
+
+const char *tui_get_title(struct tui_widget *w)
+{
+       return w->title;
+}
+
 struct tui_widget *tui_window(const char *title, int x, int y, int width, int height)
 {
        struct tui_widget *w;