浏览代码

Keep "lock" metadata when changing a Node's type, if applicable

(cherry picked from commit d015e4d6fcc85ba892a7fa2a511f1f5d72880d0d)
Michael Alexsander 5 年之前
父节点
当前提交
3d8cc49ec5
共有 1 个文件被更改,包括 14 次插入1 次删除
  1. 14 1
      editor/scene_tree_dock.cpp

+ 14 - 1
editor/scene_tree_dock.cpp

@@ -2090,8 +2090,21 @@ void SceneTreeDock::replace_node(Node *p_node, Node *p_by_node, bool p_keep_prop
 		for (List<PropertyInfo>::Element *E = pinfo.front(); E; E = E->next()) {
 			if (!(E->get().usage & PROPERTY_USAGE_STORAGE))
 				continue;
-			if (E->get().name == "__meta__")
+
+			if (E->get().name == "__meta__") {
+				if (Object::cast_to<CanvasItem>(newnode)) {
+					Dictionary metadata = n->get(E->get().name);
+					if (metadata.has("_edit_group_") && metadata["_edit_group_"]) {
+						newnode->set_meta("_edit_group_", true);
+					}
+					if (metadata.has("_edit_lock_") && metadata["_edit_lock_"]) {
+						newnode->set_meta("_edit_lock_", true);
+					}
+				}
+
 				continue;
+			}
+
 			if (default_oldnode->get(E->get().name) != n->get(E->get().name)) {
 				newnode->set(E->get().name, n->get(E->get().name));
 			}