diff -r 431dde3c5fbe -r 84a541c6e093 ui/gtk/text.c --- a/ui/gtk/text.c Tue Mar 25 20:25:09 2014 +0100 +++ b/ui/gtk/text.c Wed Mar 26 15:53:43 2014 +0100 @@ -130,7 +130,6 @@ return; } - printf("insert\n"); if(mgr->cur) { UcxList *elm = mgr->cur->next; while(elm) { @@ -185,7 +184,6 @@ return; } - printf("delete\n"); if(mgr->cur) { UcxList *elm = mgr->cur->next; while(elm) { @@ -280,5 +278,39 @@ } void ui_text_redo(UiText *value) { + UiUndoMgr *mgr = value->undomgr; + UcxList *elm = NULL; + if(mgr->cur) { + if(mgr->cur->next) { + elm = mgr->cur->next; + } + } else if(mgr->begin) { + elm = mgr->begin; + } + + if(elm) { + UiTextBufOp *op = elm->data; + mgr->event = 0; + switch(op->type) { + case UI_TEXTBUF_INSERT: { + GtkTextIter begin; + GtkTextIter end; + gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start); + gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end); + gtk_text_buffer_insert(value->obj, &begin, op->text, op->len); + break; + } + case UI_TEXTBUF_DELETE: { + GtkTextIter begin; + GtkTextIter end; + gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start); + gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end); + gtk_text_buffer_delete(value->obj, &begin, &end); + break; + } + } + mgr->event = 1; + mgr->cur = elm; + } }