From afbefa6fc18a9a6dccfe5d322be3dc20d40eeae6 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Mon, 30 Jun 2025 02:03:26 +0200 Subject: [PATCH] Replace spaces and use lowercase automatically for project manager tags This makes the workflow of adding tags smoother by automatically using valid tag names, rather than showing error messages. This also strips edges when the field is submitted to avoid leading/trailing underscores. --- editor/project_manager/project_manager.cpp | 24 +++++++++------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/editor/project_manager/project_manager.cpp b/editor/project_manager/project_manager.cpp index 7c8a17ce992..fd7014b09f3 100644 --- a/editor/project_manager/project_manager.cpp +++ b/editor/project_manager/project_manager.cpp @@ -1073,11 +1073,6 @@ void ProjectManager::_set_new_tag_name(const String p_name) { return; } - if (p_name.contains_char(' ')) { - tag_error->set_text(TTRC("Tag name can't contain spaces.")); - return; - } - if (p_name[0] == '_' || p_name[p_name.length() - 1] == '_') { tag_error->set_text(TTRC("Tag name can't begin or end with underscore.")); return; @@ -1085,9 +1080,10 @@ void ProjectManager::_set_new_tag_name(const String p_name) { bool was_underscore = false; for (const char32_t &c : p_name.span()) { - if (c == '_') { + // Treat spaces as underscores, as we convert spaces to underscores automatically in the tag input field. + if (c == '_' || c == ' ') { if (was_underscore) { - tag_error->set_text(TTRC("Tag name can't contain consecutive underscores.")); + tag_error->set_text(TTRC("Tag name can't contain consecutive underscores or spaces.")); return; } was_underscore = true; @@ -1103,11 +1099,6 @@ void ProjectManager::_set_new_tag_name(const String p_name) { } } - if (p_name.to_lower() != p_name) { - tag_error->set_text(TTRC("Tag name must be lowercase.")); - return; - } - tag_error->set_text(""); create_tag_dialog->get_ok_button()->set_disabled(false); } @@ -1117,8 +1108,12 @@ void ProjectManager::_create_new_tag() { return; } create_tag_dialog->hide(); // When using text_submitted, need to hide manually. - add_new_tag(new_tag_name->get_text()); - _add_project_tag(new_tag_name->get_text()); + + // Enforce a valid tag name (no spaces, lowercase only) automatically. + // The project manager displays underscores as spaces, and capitalization is performed automatically. + const String new_tag = new_tag_name->get_text().strip_edges().to_lower().replace_char(' ', '_'); + add_new_tag(new_tag); + _add_project_tag(new_tag); } void ProjectManager::add_new_tag(const String &p_tag) { @@ -1880,6 +1875,7 @@ ProjectManager::ProjectManager() { new_tag_name = memnew(LineEdit); tag_vb->add_child(new_tag_name); new_tag_name->set_accessibility_name(TTRC("New Tag Name")); + new_tag_name->set_placeholder(TTRC("example_tag (will display as Example Tag)")); new_tag_name->connect(SceneStringName(text_changed), callable_mp(this, &ProjectManager::_set_new_tag_name)); new_tag_name->connect(SceneStringName(text_submitted), callable_mp(this, &ProjectManager::_create_new_tag).unbind(1)); create_tag_dialog->connect("about_to_popup", callable_mp(new_tag_name, &LineEdit::clear));