diff --git a/editor/inspector/editor_inspector.cpp b/editor/inspector/editor_inspector.cpp index 34f578efbe..183fd601d7 100644 --- a/editor/inspector/editor_inspector.cpp +++ b/editor/inspector/editor_inspector.cpp @@ -33,9 +33,12 @@ #include "core/input/input.h" #include "core/os/keyboard.h" +#include "core/variant/typed_dictionary.h" #include "editor/debugger/editor_debugger_inspector.h" +#include "editor/debugger/editor_debugger_node.h" #include "editor/doc/doc_tools.h" #include "editor/docks/inspector_dock.h" +#include "editor/editor_interface.h" #include "editor/editor_main_screen.h" #include "editor/editor_node.h" #include "editor/editor_string_names.h" @@ -1437,6 +1440,12 @@ void EditorProperty::menu_option(int p_option) { return; } } + + Dictionary dict = InspectorDock::get_inspector_singleton()->get_property_clipboard(); + if (dict.has("@pastebin_category_name") || dict.has("@pastebin_section_name")) { + return; + } + emit_changed(property, EditorInspector::get_property_clipboard()); } break; case MENU_COPY_PROPERTY_PATH: { @@ -1853,8 +1862,131 @@ Size2 EditorInspectorCategory::get_minimum_size() const { return ms; } +void EditorInspectorCategory::_collect_properties(const Object *p_object, LocalVector &r_properties) const { + List property_list; + p_object->get_property_list(&property_list, true); + + String current_category; + for (const PropertyInfo &prop_info : property_list) { + if (prop_info.usage & PROPERTY_USAGE_GROUP) { + continue; + } + if (prop_info.usage & PROPERTY_USAGE_CATEGORY) { + current_category = prop_info.name; + continue; + } + if (!(prop_info.usage & PROPERTY_USAGE_EDITOR)) { + continue; + } + if (!current_category.ends_with(info.name)) { + continue; + } + + r_properties.push_back(prop_info.name); + } +} + void EditorInspectorCategory::_handle_menu_option(int p_option) { switch (p_option) { + case MENU_COPY_VALUE: { + const Object *object = EditorInterface::get_singleton()->get_inspector()->get_edited_object(); + String category_name = info.name; + if (!EditorNode::get_editor_data().is_type_recognized(info.name) && ResourceLoader::exists(info.hint_string, "Script")) { + Ref