does not fix the bug reported in #4326 and #4818,

but at least make sure it throws and error and does not crash
This commit is contained in:
Juan Linietsky 2016-06-14 08:48:34 -03:00
parent 99e5bb56d1
commit 333de40180
1 changed files with 12 additions and 4 deletions

View File

@ -3825,12 +3825,16 @@ void TextEdit::undo() {
_do_text_op(op, true); _do_text_op(op, true);
current_op.version=op.prev_version; current_op.version=op.prev_version;
if(undo_stack_pos->get().chain_backward) { if(undo_stack_pos->get().chain_backward) {
do { while(true) {
ERR_BREAK(!undo_stack_pos->prev());
undo_stack_pos = undo_stack_pos->prev(); undo_stack_pos = undo_stack_pos->prev();
op = undo_stack_pos->get(); op = undo_stack_pos->get();
_do_text_op(op, true); _do_text_op(op, true);
current_op.version = op.prev_version; current_op.version = op.prev_version;
} while(!undo_stack_pos->get().chain_forward); if (undo_stack_pos->get().chain_forward) {
break;
}
}
} }
cursor_set_line(undo_stack_pos->get().from_line); cursor_set_line(undo_stack_pos->get().from_line);
@ -3849,12 +3853,16 @@ void TextEdit::redo() {
_do_text_op(op, false); _do_text_op(op, false);
current_op.version = op.version; current_op.version = op.version;
if(undo_stack_pos->get().chain_forward) { if(undo_stack_pos->get().chain_forward) {
do {
while(true) {
ERR_BREAK(!undo_stack_pos->next());
undo_stack_pos=undo_stack_pos->next(); undo_stack_pos=undo_stack_pos->next();
op = undo_stack_pos->get(); op = undo_stack_pos->get();
_do_text_op(op, false); _do_text_op(op, false);
current_op.version = op.version; current_op.version = op.version;
} while(!undo_stack_pos->get().chain_backward); if (undo_stack_pos->get().chain_backward)
break;
}
} }
cursor_set_line(undo_stack_pos->get().to_line); cursor_set_line(undo_stack_pos->get().to_line);
cursor_set_column(undo_stack_pos->get().to_column); cursor_set_column(undo_stack_pos->get().to_column);