TextEdit: Fix inconsistent copy, cut and paste behaviour

(cherry picked from commit 4dfd0c1863)
This commit is contained in:
Ignacio Etcheverry 2016-03-15 13:02:38 +01:00 committed by Rémi Verschelde
parent 812de22194
commit a701c6ff68
1 changed files with 54 additions and 88 deletions

View File

@ -2148,35 +2148,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: {
@ -2186,16 +2158,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: {
@ -2216,25 +2180,8 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
break;
}
String clipboard = OS::get_singleton()->get_clipboard();
paste();
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);
update();
} break;
case KEY_SPACE: {
#ifdef OSX_ENABLED
@ -3007,8 +2954,20 @@ void TextEdit::set_auto_indent(bool p_auto_indent) {
void TextEdit::cut() {
if (!selection.active)
return;
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);
@ -3020,7 +2979,8 @@ void TextEdit::cut() {
selection.active=false;
selection.selecting_mode=Selection::MODE_NONE;
update();
cut_copy_line = false;
}
}
void TextEdit::copy() {
@ -3028,32 +2988,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));
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() {