From e8f3dad8985b45b16c09beac7fb6aa769ddaba8e Mon Sep 17 00:00:00 2001 From: jmb462 Date: Sun, 16 Jan 2022 19:08:40 +0100 Subject: [PATCH] Prevent renaming to an unkown extension from FileSystem dock. (cherry picked from commit c24433f5007af7b29080e6ea4708c1efe435dcad) --- editor/editor_file_system.cpp | 4 ++++ editor/editor_file_system.h | 1 + editor/filesystem_dock.cpp | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index 491c4a231ea..e6cc7efad70 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -1498,6 +1498,10 @@ void EditorFileSystem::update_file(const String &p_file) { _queue_update_script_classes(); } +Set EditorFileSystem::get_valid_extensions() const { + return valid_extensions; +} + Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector &p_files) { String importer_name; diff --git a/editor/editor_file_system.h b/editor/editor_file_system.h index 5a8e0056d1f..660a1afee31 100644 --- a/editor/editor_file_system.h +++ b/editor/editor_file_system.h @@ -262,6 +262,7 @@ public: void scan_changes(); void get_changed_sources(List *r_changed); void update_file(const String &p_file); + Set get_valid_extensions() const; EditorFileSystemDirectory *get_filesystem_path(const String &p_path); String get_file_type(const String &p_file) const; diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index 41ddbab4d2a..75de7df5908 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -1436,12 +1436,18 @@ void FileSystemDock::_folder_removed(String p_folder) { void FileSystemDock::_rename_operation_confirm() { String new_name = rename_dialog_text->get_text().strip_edges(); + String old_name = tree->get_selected()->get_text(0); if (new_name.length() == 0) { EditorNode::get_singleton()->show_warning(TTR("No name provided.")); return; } else if (new_name.find("/") != -1 || new_name.find("\\") != -1 || new_name.find(":") != -1) { EditorNode::get_singleton()->show_warning(TTR("Name contains invalid characters.")); return; + } else if (to_rename.is_file && old_name.get_extension() != new_name.get_extension()) { + if (!EditorFileSystem::get_singleton()->get_valid_extensions().find(new_name.get_extension())) { + EditorNode::get_singleton()->show_warning(TTR("This file extension is not recognized by the editor.\nIf you want to rename it anyway, use your operating system's file manager.\nAfter renaming to an unknown extension, the file won't be shown in the editor anymore.")); + return; + } } String old_path = to_rename.path.ends_with("/") ? to_rename.path.substr(0, to_rename.path.length() - 1) : to_rename.path;