TextEdit: Fix inconsistent copy, cut and paste behaviour
(cherry picked from commit 4dfd0c1863
)
This commit is contained in:
parent
812de22194
commit
a701c6ff68
|
@ -2148,35 +2148,7 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!selection.active){
|
cut();
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case KEY_C: {
|
case KEY_C: {
|
||||||
|
@ -2186,16 +2158,8 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!selection.active){
|
copy();
|
||||||
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;
|
|
||||||
}
|
|
||||||
} break;
|
} break;
|
||||||
case KEY_Z: {
|
case KEY_Z: {
|
||||||
|
|
||||||
|
@ -2216,25 +2180,8 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
|
||||||
break;
|
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;
|
} break;
|
||||||
case KEY_SPACE: {
|
case KEY_SPACE: {
|
||||||
#ifdef OSX_ENABLED
|
#ifdef OSX_ENABLED
|
||||||
|
@ -3007,8 +2954,20 @@ void TextEdit::set_auto_indent(bool p_auto_indent) {
|
||||||
|
|
||||||
void TextEdit::cut() {
|
void TextEdit::cut() {
|
||||||
|
|
||||||
if (!selection.active)
|
if (!selection.active) {
|
||||||
return;
|
|
||||||
|
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);
|
String clipboard = _base_get_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column);
|
||||||
OS::get_singleton()->set_clipboard(clipboard);
|
OS::get_singleton()->set_clipboard(clipboard);
|
||||||
|
@ -3020,7 +2979,8 @@ void TextEdit::cut() {
|
||||||
selection.active=false;
|
selection.active=false;
|
||||||
selection.selecting_mode=Selection::MODE_NONE;
|
selection.selecting_mode=Selection::MODE_NONE;
|
||||||
update();
|
update();
|
||||||
|
cut_copy_line = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextEdit::copy() {
|
void TextEdit::copy() {
|
||||||
|
@ -3028,32 +2988,38 @@ void TextEdit::copy() {
|
||||||
if (!selection.active)
|
if (!selection.active)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
print_line("from line: "+itos(selection.from_line));
|
if (!selection.active) {
|
||||||
print_line("from column: "+itos(selection.from_column));
|
String clipboard = _base_get_text(cursor.line,0,cursor.line,text[cursor.line].length());
|
||||||
print_line("to line: "+itos(selection.to_line));
|
OS::get_singleton()->set_clipboard(clipboard);
|
||||||
print_line("to column: "+itos(selection.to_column));
|
cut_copy_line = true;
|
||||||
|
} else {
|
||||||
String clipboard = _base_get_text(selection.from_line,selection.from_column,selection.to_line,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);
|
OS::get_singleton()->set_clipboard(clipboard);
|
||||||
|
cut_copy_line = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextEdit::paste() {
|
void TextEdit::paste() {
|
||||||
|
|
||||||
|
String clipboard = OS::get_singleton()->get_clipboard();
|
||||||
|
|
||||||
if (selection.active) {
|
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_line(selection.from_line);
|
||||||
cursor_set_column(selection.from_column);
|
cursor_set_column(selection.from_column);
|
||||||
|
|
||||||
_remove_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column);
|
} else if (cut_copy_line) {
|
||||||
selection.active=false;
|
|
||||||
selection.selecting_mode=Selection::MODE_NONE;
|
|
||||||
|
|
||||||
|
cursor_set_column(0);
|
||||||
|
String ins="\n";
|
||||||
|
clipboard += ins;
|
||||||
}
|
}
|
||||||
|
|
||||||
String clipboard = OS::get_singleton()->get_clipboard();
|
|
||||||
_insert_text_at_cursor(clipboard);
|
_insert_text_at_cursor(clipboard);
|
||||||
update();
|
update();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextEdit::select_all() {
|
void TextEdit::select_all() {
|
||||||
|
|
Loading…
Reference in New Issue