|
|
@@ -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();
|