diff options
author | Ignacio Etcheverry <ignalfonsore@gmail.com> | 2016-03-15 13:02:38 +0100 |
---|---|---|
committer | Ignacio Etcheverry <ignalfonsore@gmail.com> | 2016-03-15 13:02:38 +0100 |
commit | 4dfd0c1863fca80ddc35b6bcacf339077a0c4f54 (patch) | |
tree | a91ea6598b0de75d8e3a321605f5fe8d415c2899 /scene | |
parent | c9a401e54172d87ed8c541b563b471d0ff36a33b (diff) |
TextEdit: Fix inconsistent copy, cut and paste behaviour
Diffstat (limited to 'scene')
-rw-r--r-- | scene/gui/text_edit.cpp | 126 |
1 files changed, 46 insertions, 80 deletions
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index e268375c8a..74f68b1313 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -2169,35 +2169,7 @@ void TextEdit::_input_event(const InputEvent& p_input_event) { break; } - if (!selection.active){ - - String clipboard = text[cursor.line]; - OS::get_singleton()->set_clipboard(clipboard); - cursor_set_line(cursor.line); - cursor_set_column(0); - _remove_text(cursor.line,0,cursor.line,text[cursor.line].length()); - - backspace_at_cursor(); - update(); - cursor_set_line(cursor.line+1); - cut_copy_line = true; - - } - else - { - - String clipboard = _base_get_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column); - OS::get_singleton()->set_clipboard(clipboard); - - cursor_set_line(selection.from_line); - cursor_set_column(selection.from_column); - - _remove_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column); - selection.active=false; - selection.selecting_mode=Selection::MODE_NONE; - update(); - cut_copy_line = false; - } + cut(); } break; case KEY_C: { @@ -2207,16 +2179,8 @@ void TextEdit::_input_event(const InputEvent& p_input_event) { break; } - if (!selection.active){ - String clipboard = _base_get_text(cursor.line,0,cursor.line,text[cursor.line].length()); - OS::get_singleton()->set_clipboard(clipboard); - cut_copy_line = true; - } - else{ - String clipboard = _base_get_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column); - OS::get_singleton()->set_clipboard(clipboard); - cut_copy_line = false; - } + copy(); + } break; case KEY_Z: { @@ -2237,25 +2201,8 @@ void TextEdit::_input_event(const InputEvent& p_input_event) { break; } - String clipboard = OS::get_singleton()->get_clipboard(); - - if (selection.active) { - selection.active=false; - _remove_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column); - cursor_set_line(selection.from_line); - cursor_set_column(selection.from_column); - - } - else if (cut_copy_line) - { - cursor_set_column(0); - String ins="\n"; - clipboard += ins; - } - - _insert_text_at_cursor(clipboard); + paste(); - update(); } break; case KEY_SPACE: { #ifdef OSX_ENABLED @@ -3028,20 +2975,33 @@ void TextEdit::set_auto_indent(bool p_auto_indent) { void TextEdit::cut() { - if (!selection.active) - return; + if (!selection.active) { - String clipboard = _base_get_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column); - OS::get_singleton()->set_clipboard(clipboard); + String clipboard = text[cursor.line]; + OS::get_singleton()->set_clipboard(clipboard); + cursor_set_line(cursor.line); + cursor_set_column(0); + _remove_text(cursor.line,0,cursor.line,text[cursor.line].length()); - cursor_set_line(selection.from_line); - cursor_set_column(selection.from_column); + backspace_at_cursor(); + update(); + cursor_set_line(cursor.line+1); + cut_copy_line = true; - _remove_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column); - selection.active=false; - selection.selecting_mode=Selection::MODE_NONE; - update(); + } else { + + String clipboard = _base_get_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column); + OS::get_singleton()->set_clipboard(clipboard); + + cursor_set_line(selection.from_line); + cursor_set_column(selection.from_column); + _remove_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column); + selection.active=false; + selection.selecting_mode=Selection::MODE_NONE; + update(); + cut_copy_line = false; + } } void TextEdit::copy() { @@ -3049,32 +3009,38 @@ void TextEdit::copy() { if (!selection.active) return; - print_line("from line: "+itos(selection.from_line)); - print_line("from column: "+itos(selection.from_column)); - print_line("to line: "+itos(selection.to_line)); - print_line("to column: "+itos(selection.to_column)); - - String clipboard = _base_get_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column); - OS::get_singleton()->set_clipboard(clipboard); - + if (!selection.active) { + String clipboard = _base_get_text(cursor.line,0,cursor.line,text[cursor.line].length()); + OS::get_singleton()->set_clipboard(clipboard); + cut_copy_line = true; + } else { + String clipboard = _base_get_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column); + OS::get_singleton()->set_clipboard(clipboard); + cut_copy_line = false; + } } + void TextEdit::paste() { + String clipboard = OS::get_singleton()->get_clipboard(); + if (selection.active) { + selection.active=false; + selection.selecting_mode=Selection::MODE_NONE; + _remove_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column); cursor_set_line(selection.from_line); cursor_set_column(selection.from_column); - _remove_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column); - selection.active=false; - selection.selecting_mode=Selection::MODE_NONE; + } else if (cut_copy_line) { + cursor_set_column(0); + String ins="\n"; + clipboard += ins; } - String clipboard = OS::get_singleton()->get_clipboard(); _insert_text_at_cursor(clipboard); update(); - } void TextEdit::select_all() { |