summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scene/gui/text_edit.cpp25
1 files changed, 21 insertions, 4 deletions
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index d6575481c2..4be8dd850c 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -1596,7 +1596,22 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
if(auto_brace_completion_enabled && _is_pair_symbol(chr[0])) {
_consume_pair_symbol(chr[0]);
} else {
+
+ // remove the old character if in insert mode
+ if (insert_mode) {
+ _begin_compex_operation();
+
+ // make sure we don't try and remove empty space
+ if (cursor.column < get_line(cursor.line).length()) {
+ _remove_text(cursor.line, cursor.column, cursor.line, cursor.column + 1);
+ }
+ }
+
_insert_text_at_cursor(chr);
+
+ if (insert_mode) {
+ _end_compex_operation();
+ }
}
}
@@ -1625,8 +1640,10 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
k.mod.shift=false;
}
- // stuff to do when selection is active..
+ // save here for insert mode, just in case it is cleared in the following section
+ bool had_selection = selection.active;
+ // stuff to do when selection is active..
if (selection.active) {
if (readonly)
@@ -2376,8 +2393,8 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
if (readonly)
break;
- // remove the old character if in insert mode
- if (insert_mode) {
+ // remove the old character if in insert mode and no selection
+ if (insert_mode && !had_selection) {
_begin_compex_operation();
// make sure we don't try and remove empty space
@@ -2397,7 +2414,7 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
_insert_text_at_cursor(chr);
}
- if (insert_mode) {
+ if (insert_mode && !had_selection) {
_end_compex_operation();
}
accept_event();