diff options
Diffstat (limited to 'editor/scene_tree_dock.cpp')
-rw-r--r-- | editor/scene_tree_dock.cpp | 52 |
1 files changed, 38 insertions, 14 deletions
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index d8f1d92e44..2fd783102c 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -482,6 +482,20 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { ERR_CONTINUE(!dup); + // Preserve ownership relations ready for pasting. + List<Node *> owned; + node->get_owned_by(node->get_owner(), &owned); + + for (Node *F : owned) { + if (!duplimap.has(F) || F == node) { + continue; + } + Node *d = duplimap[F]; + // Only use this as a marker that ownership needs to be assigned when pasting. + // The actual owner doesn't matter. + d->set_owner(dup); + } + node_clipboard.push_back(dup); } @@ -1264,13 +1278,6 @@ void SceneTreeDock::_notification(int p_what) { spatial_editor_plugin->get_spatial_editor()->connect("item_lock_status_changed", callable_mp(scene_tree, &SceneTreeEditor::_update_tree).bind(false)); spatial_editor_plugin->get_spatial_editor()->connect("item_group_status_changed", callable_mp(scene_tree, &SceneTreeEditor::_update_tree).bind(false)); - button_add->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons"))); - button_instance->set_icon(get_theme_icon(SNAME("Instance"), SNAME("EditorIcons"))); - button_create_script->set_icon(get_theme_icon(SNAME("ScriptCreate"), SNAME("EditorIcons"))); - button_detach_script->set_icon(get_theme_icon(SNAME("ScriptRemove"), SNAME("EditorIcons"))); - button_tree_menu->set_icon(get_theme_icon(SNAME("GuiTabMenuHl"), SNAME("EditorIcons"))); - - filter->set_right_icon(get_theme_icon(SNAME("Search"), SNAME("EditorIcons"))); filter->set_clear_button_enabled(true); // create_root_dialog @@ -1352,19 +1359,35 @@ void SceneTreeDock::_notification(int p_what) { case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { scene_tree->set_auto_expand_selected(EDITOR_GET("docks/scene_tree/auto_expand_to_selected"), false); + } break; + + case NOTIFICATION_THEME_CHANGED: { button_add->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons"))); button_instance->set_icon(get_theme_icon(SNAME("Instance"), SNAME("EditorIcons"))); button_create_script->set_icon(get_theme_icon(SNAME("ScriptCreate"), SNAME("EditorIcons"))); button_detach_script->set_icon(get_theme_icon(SNAME("ScriptRemove"), SNAME("EditorIcons"))); button_tree_menu->set_icon(get_theme_icon(SNAME("GuiTabMenuHl"), SNAME("EditorIcons"))); - button_2d->set_icon(get_theme_icon(SNAME("Node2D"), SNAME("EditorIcons"))); - button_3d->set_icon(get_theme_icon(SNAME("Node3D"), SNAME("EditorIcons"))); - button_ui->set_icon(get_theme_icon(SNAME("Control"), SNAME("EditorIcons"))); - button_custom->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons"))); - button_clipboard->set_icon(get_theme_icon(SNAME("ActionPaste"), SNAME("EditorIcons"))); filter->set_right_icon(get_theme_icon(SNAME("Search"), SNAME("EditorIcons"))); - filter->set_clear_button_enabled(true); + + // These buttons are created on READY, because reasons... + if (button_2d) { + button_2d->set_icon(get_theme_icon(SNAME("Node2D"), SNAME("EditorIcons"))); + } + if (button_3d) { + button_3d->set_icon(get_theme_icon(SNAME("Node3D"), SNAME("EditorIcons"))); + } + if (button_ui) { + button_ui->set_icon(get_theme_icon(SNAME("Control"), SNAME("EditorIcons"))); + } + if (button_custom) { + button_custom->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons"))); + } + if (button_clipboard) { + button_clipboard->set_icon(get_theme_icon(SNAME("ActionPaste"), SNAME("EditorIcons"))); + } + + menu_subresources->add_theme_constant_override("icon_max_width", get_theme_constant(SNAME("class_icon_size"), SNAME("Editor"))); } break; case NOTIFICATION_PROCESS: { @@ -3239,7 +3262,8 @@ List<Node *> SceneTreeDock::paste_nodes() { for (KeyValue<const Node *, Node *> &E2 : duplimap) { Node *d = E2.value; - if (d != dup) { + // When copying, all nodes that should have an owner assigned here were given node as an owner. + if (d != dup && E2.key->get_owner() == node) { ur->add_do_method(d, "set_owner", owner); } } |