From 69ef6f8a9d767351d195043b7120b0d7700eb6fc Mon Sep 17 00:00:00 2001 From: kobewi Date: Sat, 15 Jul 2023 23:01:32 +0200 Subject: [PATCH] Prevent accidental script modifications on error --- editor/plugins/script_editor_plugin.cpp | 2 ++ editor/plugins/script_text_editor.cpp | 14 ++++++++++++++ editor/plugins/script_text_editor.h | 2 ++ 3 files changed, 18 insertions(+) diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 791937dbf6077e..e30d952da3c16f 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -463,6 +463,8 @@ void ScriptEditor::_goto_script_line(Ref p_script, int p_line) { ScriptEditorBase *current = _get_current_editor(); if (ScriptTextEditor *script_text_editor = Object::cast_to(current)) { script_text_editor->goto_line_centered(p_line); + // In case user is holding some key, disable script editor input to prevent accidentally modifying the script. + script_text_editor->block_input_until_released(); } else if (current) { current->goto_line(p_line, true); } diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index 0a1f735f64e616..83d9e18df460e9 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -1522,6 +1522,12 @@ void ScriptTextEditor::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { code_editor->get_text_editor()->set_gutter_width(connection_gutter, code_editor->get_text_editor()->get_line_height()); } break; + case NOTIFICATION_INTERNAL_PROCESS: { + if (!Input::get_singleton()->is_anything_pressed()) { + code_editor->get_text_editor()->set_editable(true); + set_process_internal(false); + } + } } } @@ -2347,3 +2353,11 @@ void ScriptTextEditor::register_editor() { void ScriptTextEditor::validate() { this->code_editor->validate_script(); } + +void ScriptTextEditor::block_input_until_released() { + if (!Input::get_singleton()->is_anything_pressed()) { + return; + } + code_editor->get_text_editor()->set_editable(false); + set_process_internal(true); +} diff --git a/editor/plugins/script_text_editor.h b/editor/plugins/script_text_editor.h index 808a6417e4b93a..94cd8c5a6c490d 100644 --- a/editor/plugins/script_text_editor.h +++ b/editor/plugins/script_text_editor.h @@ -255,6 +255,8 @@ class ScriptTextEditor : public ScriptEditorBase { virtual void validate() override; + void block_input_until_released(); + ScriptTextEditor(); ~ScriptTextEditor(); };