summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-09-11 15:38:31 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-09-11 15:38:31 +0200
commit3669188607df52915bf3173a207c536c729f5cdb (patch)
treea5ad84e3ed2fc5a3b4d9cec71766c8ac36e55d81
parentd08401236c8e13165550724f646f0f458b0f0895 (diff)
parent95248a7d722d9b2fd9ce83f665386c9b4744a692 (diff)
downloadredot-engine-3669188607df52915bf3173a207c536c729f5cdb.tar.gz
Merge pull request #81415 from Rindbee/fix-copy-or-paste-root-nodes
Fix bugs of copying scene root node or pasting node as scene root
-rw-r--r--editor/scene_tree_dock.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp
index 161598b50f..6903f5160d 100644
--- a/editor/scene_tree_dock.cpp
+++ b/editor/scene_tree_dock.cpp
@@ -493,7 +493,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
// Preserve ownership relations ready for pasting.
List<Node *> owned;
- node->get_owned_by(node->get_owner(), &owned);
+ node->get_owned_by(node->get_owner() ? node->get_owner() : node, &owned);
for (Node *F : owned) {
if (!duplimap.has(F) || F == node) {
@@ -3394,7 +3394,11 @@ List<Node *> SceneTreeDock::paste_nodes(bool p_paste_as_sibling) {
}
EditorUndoRedoManager *ur = EditorUndoRedoManager::get_singleton();
- ur->create_action(vformat(p_paste_as_sibling ? TTR("Paste Node(s) as Sibling of %s") : TTR("Paste Node(s) as Child of %s"), paste_parent->get_name()), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene());
+ if (paste_parent) {
+ ur->create_action(vformat(p_paste_as_sibling ? TTR("Paste Node(s) as Sibling of %s") : TTR("Paste Node(s) as Child of %s"), paste_parent->get_name()), UndoRedo::MERGE_DISABLE, edited_scene);
+ } else {
+ ur->create_action(TTR("Paste Node(s) as Root"), UndoRedo::MERGE_DISABLE, edited_scene);
+ }
ur->add_do_method(editor_selection, "clear");
HashMap<Ref<Resource>, Ref<Resource>> resource_remap;