Skip to content

Commit

Permalink
Fixed text edit undo and redo operation interaction
Browse files Browse the repository at this point in the history
  • Loading branch information
Paulb23 authored and akien-mga committed Apr 6, 2016
1 parent f303e34 commit 646e089
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 16 deletions.
24 changes: 12 additions & 12 deletions scene/gui/text_edit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1132,7 +1132,7 @@ void TextEdit::_consume_pair_symbol(CharType ch) {

int new_column,new_line;

_begin_complex_operation();
begin_complex_operation();
_insert_text(get_selection_from_line(), get_selection_from_column(),
ch_single,
&new_line, &new_column);
Expand All @@ -1145,7 +1145,7 @@ void TextEdit::_consume_pair_symbol(CharType ch) {
get_selection_to_column() + to_col_offset,
ch_single_pair,
&new_line,&new_column);
_end_complex_operation();
end_complex_operation();

cursor_set_line(get_selection_to_line());
cursor_set_column(get_selection_to_column() + to_col_offset);
Expand Down Expand Up @@ -1599,7 +1599,7 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {

// remove the old character if in insert mode
if (insert_mode) {
_begin_complex_operation();
begin_complex_operation();

// make sure we don't try and remove empty space
if (cursor.column < get_line(cursor.line).length()) {
Expand All @@ -1610,7 +1610,7 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
_insert_text_at_cursor(chr);

if (insert_mode) {
_end_complex_operation();
end_complex_operation();
}
}
}
Expand Down Expand Up @@ -1686,10 +1686,10 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {

cursor_set_line(selection.from_line);
cursor_set_column(selection.from_column);
_begin_complex_operation();
begin_complex_operation();
_remove_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column);
_insert_text_at_cursor(txt);
_end_complex_operation();
end_complex_operation();
selection.active=true;
selection.from_column=sel_column;
selection.from_line=sel_line;
Expand Down Expand Up @@ -1747,7 +1747,7 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
}
if (clear) {

_begin_complex_operation();
begin_complex_operation();
selection.active=false;
update();
_remove_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column);
Expand Down Expand Up @@ -2396,7 +2396,7 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {

// remove the old character if in insert mode and no selection
if (insert_mode && !had_selection) {
_begin_complex_operation();
begin_complex_operation();

// make sure we don't try and remove empty space
if (cursor.column < get_line(cursor.line).length()) {
Expand All @@ -2416,11 +2416,11 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
}

if (insert_mode && !had_selection) {
_end_complex_operation();
end_complex_operation();
}

if (selection.active != had_selection) {
_end_complex_operation();
end_complex_operation();
}
accept_event();
} else {
Expand Down Expand Up @@ -3613,12 +3613,12 @@ void TextEdit::clear_undo_history() {

}

void TextEdit::_begin_complex_operation() {
void TextEdit::begin_complex_operation() {
_push_current_op();
next_operation_is_complex=true;
}

void TextEdit::_end_complex_operation() {
void TextEdit::end_complex_operation() {

_push_current_op();
ERR_FAIL_COND(undo_stack.size() == 0);
Expand Down
5 changes: 3 additions & 2 deletions scene/gui/text_edit.h
Original file line number Diff line number Diff line change
Expand Up @@ -265,8 +265,6 @@ class TextEdit : public Control {
void _cursor_changed_emit();
void _text_changed_emit();

void _begin_complex_operation();
void _end_complex_operation();
void _push_current_op();

/* super internal api, undo/redo builds on it */
Expand Down Expand Up @@ -318,6 +316,9 @@ class TextEdit : public Control {
//void delete_char();
//void delete_line();

void begin_complex_operation();
void end_complex_operation();

void set_text(String p_text);
void insert_text_at_cursor(const String& p_text);
void insert_at(const String& p_text, int at);
Expand Down
12 changes: 10 additions & 2 deletions tools/editor/plugins/script_editor_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1071,6 +1071,7 @@ void ScriptEditor::_menu_option(int p_option) {
if (scr.is_null())
return;

tx->begin_complex_operation();
if (tx->is_selection_active())
{
int from_line = tx->get_selection_from_line();
Expand Down Expand Up @@ -1102,6 +1103,7 @@ void ScriptEditor::_menu_option(int p_option) {

swap_lines(tx, line_id, next_id);
}
tx->end_complex_operation();
tx->update();

} break;
Expand All @@ -1112,6 +1114,7 @@ void ScriptEditor::_menu_option(int p_option) {
if (scr.is_null())
return;

tx->begin_complex_operation();
if (tx->is_selection_active())
{
int from_line = tx->get_selection_from_line();
Expand Down Expand Up @@ -1143,6 +1146,7 @@ void ScriptEditor::_menu_option(int p_option) {

swap_lines(tx, line_id, next_id);
}
tx->end_complex_operation();
tx->update();

} break;
Expand All @@ -1153,7 +1157,7 @@ void ScriptEditor::_menu_option(int p_option) {
if (scr.is_null())
return;


tx->begin_complex_operation();
if (tx->is_selection_active())
{
int begin = tx->get_selection_from_line();
Expand Down Expand Up @@ -1192,6 +1196,7 @@ void ScriptEditor::_menu_option(int p_option) {
tx->set_line(begin, line_text);
}
}
tx->end_complex_operation();
tx->update();
//tx->deselect();

Expand All @@ -1203,6 +1208,7 @@ void ScriptEditor::_menu_option(int p_option) {
if (scr.is_null())
return;

tx->begin_complex_operation();
if (tx->is_selection_active())
{
int begin = tx->get_selection_from_line();
Expand All @@ -1221,6 +1227,7 @@ void ScriptEditor::_menu_option(int p_option) {
line_text = '\t' + line_text;
tx->set_line(begin, line_text);
}
tx->end_complex_operation();
tx->update();
//tx->deselect();

Expand Down Expand Up @@ -1252,7 +1259,7 @@ void ScriptEditor::_menu_option(int p_option) {
return;



tx->begin_complex_operation();
if (tx->is_selection_active())
{
int begin = tx->get_selection_from_line();
Expand Down Expand Up @@ -1284,6 +1291,7 @@ void ScriptEditor::_menu_option(int p_option) {
line_text = "#" + line_text;
tx->set_line(begin, line_text);
}
tx->end_complex_operation();
tx->update();
//tx->deselect();

Expand Down

0 comments on commit 646e089

Please sign in to comment.