Browse Source

Disallow Callable, Signal and RID in export arrays

kobewi 3 years ago
parent
commit
e7da3ce96e
2 changed files with 15 additions and 5 deletions
  1. 10 0
      editor/editor_properties_array_dict.cpp
  2. 5 5
      editor/project_settings_editor.cpp

+ 10 - 0
editor/editor_properties_array_dict.cpp

@@ -478,6 +478,11 @@ void EditorPropertyArray::_notification(int p_what) {
 		case NOTIFICATION_ENTER_TREE: {
 			change_type->clear();
 			for (int i = 0; i < Variant::VARIANT_MAX; i++) {
+				if (i == Variant::CALLABLE || i == Variant::SIGNAL || i == Variant::RID) {
+					// These types can't be constructed or serialized properly, so skip them.
+					continue;
+				}
+
 				String type = Variant::get_type_name(Variant::Type(i));
 				change_type->add_icon_item(get_theme_icon(type, SNAME("EditorIcons")), type, i);
 			}
@@ -1127,6 +1132,11 @@ void EditorPropertyDictionary::_notification(int p_what) {
 		case NOTIFICATION_ENTER_TREE: {
 			change_type->clear();
 			for (int i = 0; i < Variant::VARIANT_MAX; i++) {
+				if (i == Variant::CALLABLE || i == Variant::SIGNAL || i == Variant::RID) {
+					// These types can't be constructed or serialized properly, so skip them.
+					continue;
+				}
+
 				String type = Variant::get_type_name(Variant::Type(i));
 				change_type->add_icon_item(get_theme_icon(type, SNAME("EditorIcons")), type, i);
 			}

+ 5 - 5
editor/project_settings_editor.cpp

@@ -515,12 +515,12 @@ void ProjectSettingsEditor::_update_theme() {
 
 	type_box->clear();
 	for (int i = 0; i < Variant::VARIANT_MAX; i++) {
-		// There's no point in adding Nil types, and Object types
-		// can't be serialized correctly in the project settings.
-		if (i != Variant::NIL && i != Variant::OBJECT) {
-			String type = Variant::get_type_name(Variant::Type(i));
-			type_box->add_icon_item(get_theme_icon(type, SNAME("EditorIcons")), type, i);
+		if (i == Variant::NIL || i == Variant::OBJECT || i == Variant::CALLABLE || i == Variant::SIGNAL || i == Variant::RID) {
+			// These types can't be serialized properly, so skip them.
+			continue;
 		}
+		String type = Variant::get_type_name(Variant::Type(i));
+		type_box->add_icon_item(get_theme_icon(type, SNAME("EditorIcons")), type, i);
 	}
 }