diff options
| author | Saracen | 2016-03-13 20:08:12 +0000 |
|---|---|---|
| committer | Rémi Verschelde | 2016-04-02 22:07:40 +0200 |
| commit | d0151daa692c5437d4188d60aec177fd17ffe6ac (patch) | |
| tree | b5f0ef97f351d61751308462da1db3e73b27fbfe | |
| parent | 763b29ed18dbd71ea421f507bdbc4f907e2e9c32 (diff) | |
| download | godot-d0151daa692c5437d4188d60aec177fd17ffe6ac.tar.gz godot-d0151daa692c5437d4188d60aec177fd17ffe6ac.tar.zst godot-d0151daa692c5437d4188d60aec177fd17ffe6ac.zip | |
Undo and redo commands on text editor now affect internal version which fixes inconsistent file saving validation.
(cherry picked from commit b2e471fd7c60a81c29e21367a849c9bc0fb3ac05)
| -rw-r--r-- | scene/gui/text_edit.cpp | 24 | ||||
| -rw-r--r-- | scene/gui/text_edit.h | 1 |
2 files changed, 19 insertions, 6 deletions
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index f675e8dca..660239ccc 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -2494,6 +2494,7 @@ void TextEdit::_insert_text(int p_line, int p_char,const String& p_text,int *r_e //see if it shold just be set as current op if (current_op.type!=op.type) { + op.prev_version = get_version(); _push_current_op(); current_op=op; @@ -2501,6 +2502,7 @@ void TextEdit::_insert_text(int p_line, int p_char,const String& p_text,int *r_e } //see if it can be merged if (current_op.to_line!=p_line || current_op.to_column!=p_char) { + op.prev_version = get_version(); _push_current_op(); current_op=op; return; //set as current op, return @@ -2544,6 +2546,7 @@ void TextEdit::_remove_text(int p_from_line, int p_from_column,int p_to_line,int //see if it shold just be set as current op if (current_op.type!=op.type) { + op.prev_version = get_version(); _push_current_op(); current_op=op; return; //set as current op, return @@ -2564,6 +2567,7 @@ void TextEdit::_remove_text(int p_from_line, int p_from_column,int p_to_line,int //return; //update current op } + op.prev_version = get_version(); _push_current_op(); current_op=op; @@ -3397,11 +3401,15 @@ void TextEdit::undo() { else undo_stack_pos=undo_stack_pos->prev(); - _do_text_op( undo_stack_pos->get(),true); + TextOperation op = undo_stack_pos->get(); + _do_text_op(op, true); + current_op.version=op.prev_version; if(undo_stack_pos->get().chain_backward) { do { undo_stack_pos = undo_stack_pos->prev(); - _do_text_op(undo_stack_pos->get(), true); + op = undo_stack_pos->get(); + _do_text_op(op, true); + current_op.version = op.prev_version; } while(!undo_stack_pos->get().chain_forward); } @@ -3417,15 +3425,19 @@ void TextEdit::redo() { if (undo_stack_pos==NULL) return; //nothing to do. - _do_text_op(undo_stack_pos->get(), false); + TextOperation op = undo_stack_pos->get(); + _do_text_op(op, false); + current_op.version = op.version; if(undo_stack_pos->get().chain_forward) { do { undo_stack_pos=undo_stack_pos->next(); - _do_text_op(undo_stack_pos->get(), false); + op = undo_stack_pos->get(); + _do_text_op(op, false); + current_op.version = op.version; } while(!undo_stack_pos->get().chain_backward); } - cursor_set_line(undo_stack_pos->get().from_line); - cursor_set_column(undo_stack_pos->get().from_column); + cursor_set_line(undo_stack_pos->get().to_line); + cursor_set_column(undo_stack_pos->get().to_column); undo_stack_pos=undo_stack_pos->next(); update(); } diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index 2eff8e89c..207d6eb13 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -156,6 +156,7 @@ class TextEdit : public Control { int from_line,from_column; int to_line, to_column; String text; + uint32_t prev_version; uint32_t version; bool chain_forward; bool chain_backward; |
