Browse Source

Merge pull request #103397 from KoBeWi/good_luck_finding_where_'is_path_valid'_is_now_assigned

Improve path validation in ScriptCreateDialog
Rémi Verschelde 4 months ago
parent
commit
cae8c3e0fa
2 changed files with 11 additions and 7 deletions
  1. 10 6
      editor/script_create_dialog.cpp
  2. 1 1
      editor/script_create_dialog.h

+ 10 - 6
editor/script_create_dialog.cpp

@@ -216,7 +216,7 @@ bool ScriptCreateDialog::_validate_parent(const String &p_string) {
 
 	if (can_inherit_from_file && p_string.is_quoted()) {
 		String p = p_string.substr(1, p_string.length() - 2);
-		if (_validate_path(p, true) == "") {
+		if (_validate_path(p, true).is_empty()) {
 			return true;
 		}
 	}
@@ -224,8 +224,11 @@ bool ScriptCreateDialog::_validate_parent(const String &p_string) {
 	return EditorNode::get_editor_data().is_type_recognized(p_string);
 }
 
-String ScriptCreateDialog::_validate_path(const String &p_path, bool p_file_must_exist) {
+String ScriptCreateDialog::_validate_path(const String &p_path, bool p_file_must_exist, bool *r_path_valid) {
 	String p = p_path.strip_edges();
+	if (r_path_valid) {
+		*r_path_valid = false;
+	}
 
 	if (p.is_empty()) {
 		return TTR("Path is empty.");
@@ -263,6 +266,10 @@ String ScriptCreateDialog::_validate_path(const String &p_path, bool p_file_must
 		}
 	}
 
+	if (r_path_valid) {
+		*r_path_valid = true;
+	}
+
 	// Check file extension.
 	String extension = p.get_extension();
 	List<String> extensions;
@@ -491,10 +498,9 @@ void ScriptCreateDialog::_path_changed(const String &p_path) {
 		return;
 	}
 
-	is_path_valid = false;
 	is_new_script_created = true;
 
-	path_error = _validate_path(p_path, false);
+	path_error = _validate_path(p_path, false, &is_path_valid);
 	if (!path_error.is_empty()) {
 		validation_panel->update();
 		return;
@@ -506,8 +512,6 @@ void ScriptCreateDialog::_path_changed(const String &p_path) {
 	if (da->file_exists(p)) {
 		is_new_script_created = false;
 	}
-
-	is_path_valid = true;
 	validation_panel->update();
 }
 

+ 1 - 1
editor/script_create_dialog.h

@@ -98,7 +98,7 @@ class ScriptCreateDialog : public ConfirmationDialog {
 	void _built_in_pressed();
 	void _use_template_pressed();
 	bool _validate_parent(const String &p_string);
-	String _validate_path(const String &p_path, bool p_file_must_exist);
+	String _validate_path(const String &p_path, bool p_file_must_exist, bool *r_path_valid = nullptr);
 	void _parent_name_changed(const String &p_parent);
 	void _template_changed(int p_template = 0);
 	void _browse_path(bool browse_parent, bool p_save);