Skip to content

Commit

Permalink
Merge pull request godotengine#81673 from KoBeWi/only_child
Browse files Browse the repository at this point in the history
Don't paste nodes as sibling of scene root
  • Loading branch information
YuriSizov committed Sep 15, 2023
2 parents 51a196e + 4778b53 commit fa31a9f
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions editor/scene_tree_dock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2977,7 +2977,10 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) {
menu->add_icon_shortcut(get_editor_theme_icon(SNAME("ActionCopy")), ED_GET_SHORTCUT("scene_tree/copy_node"), TOOL_COPY);
if (selection.size() == 1 && !node_clipboard.is_empty()) {
menu->add_icon_shortcut(get_editor_theme_icon(SNAME("ActionPaste")), ED_GET_SHORTCUT("scene_tree/paste_node"), TOOL_PASTE);
menu->add_icon_shortcut(get_editor_theme_icon(SNAME("ActionPaste")), ED_GET_SHORTCUT("scene_tree/paste_node_as_sibling"), TOOL_PASTE);
menu->add_icon_shortcut(get_editor_theme_icon(SNAME("ActionPaste")), ED_GET_SHORTCUT("scene_tree/paste_node_as_sibling"), TOOL_PASTE_AS_SIBLING);
if (selection.front()->get() == edited_scene) {
menu->set_item_disabled(-1, true);
}
}
menu->add_separator();
}
Expand Down Expand Up @@ -3376,12 +3379,19 @@ List<Node *> SceneTreeDock::paste_nodes(bool p_paste_as_sibling) {
}

Node *paste_parent = edited_scene;
Node *paste_sibling = nullptr;

List<Node *> selection = editor_selection->get_selected_node_list();
if (selection.size() > 0) {
paste_parent = selection.back()->get();
}

if (p_paste_as_sibling) {
if (paste_parent == edited_scene) {
return pasted_nodes; // Don't paste as sibling of scene root.
}

paste_sibling = paste_parent;
paste_parent = paste_parent->get_parent();
}

Expand All @@ -3395,7 +3405,7 @@ List<Node *> SceneTreeDock::paste_nodes(bool p_paste_as_sibling) {

EditorUndoRedoManager *ur = EditorUndoRedoManager::get_singleton();
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);
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_sibling ? paste_sibling->get_name() : paste_parent->get_name()), UndoRedo::MERGE_DISABLE, edited_scene);
} else {
ur->create_action(TTR("Paste Node(s) as Root"), UndoRedo::MERGE_DISABLE, edited_scene);
}
Expand Down

0 comments on commit fa31a9f

Please sign in to comment.