Fix crash when dropping scene as a sibling of the root node
This commit is contained in:
parent
c328693e83
commit
2a97d79a64
2 changed files with 14 additions and 15 deletions
|
@ -1574,14 +1574,12 @@ void SceneTreeDock::_normalize_drop(Node*& to_node, int &to_pos, int p_type) {
|
||||||
|
|
||||||
to_pos=-1;
|
to_pos=-1;
|
||||||
|
|
||||||
if (p_type==1 && to_node==EditorNode::get_singleton()->get_edited_scene()) {
|
if (p_type==-1) {
|
||||||
//if at lower sibling of root node
|
|
||||||
to_pos=0; //just insert at begining of root node
|
|
||||||
} else if (p_type==-1) {
|
|
||||||
//drop at above selected node
|
//drop at above selected node
|
||||||
if (to_node==EditorNode::get_singleton()->get_edited_scene()) {
|
if (to_node==EditorNode::get_singleton()->get_edited_scene()) {
|
||||||
to_node=NULL;
|
to_node=NULL;
|
||||||
ERR_FAIL_COND(to_node==EditorNode::get_singleton()->get_edited_scene());
|
ERR_EXPLAIN("Cannot perform drop above the root node!");
|
||||||
|
ERR_FAIL();
|
||||||
}
|
}
|
||||||
Node* upper_sibling=NULL;
|
Node* upper_sibling=NULL;
|
||||||
|
|
||||||
|
@ -1617,8 +1615,9 @@ void SceneTreeDock::_normalize_drop(Node*& to_node, int &to_pos, int p_type) {
|
||||||
} else if (p_type==1) {
|
} else if (p_type==1) {
|
||||||
//drop at below selected node
|
//drop at below selected node
|
||||||
if (to_node==EditorNode::get_singleton()->get_edited_scene()) {
|
if (to_node==EditorNode::get_singleton()->get_edited_scene()) {
|
||||||
to_node=NULL;
|
//if at lower sibling of root node
|
||||||
ERR_FAIL_COND(to_node==EditorNode::get_singleton()->get_edited_scene());
|
to_pos=0; //just insert at begining of root node
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -983,6 +983,14 @@ bool SceneTreeEditor::can_drop_data_fw(const Point2& p_point,const Variant& p_da
|
||||||
if (!d.has("type"))
|
if (!d.has("type"))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
TreeItem *item = tree->get_item_at_pos(p_point);
|
||||||
|
if (!item)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
int section = tree->get_drop_section_at_pos(p_point);
|
||||||
|
if (section<-1 || (section==-1 && !item->get_parent()))
|
||||||
|
return false;
|
||||||
|
|
||||||
if (String(d["type"])=="files") {
|
if (String(d["type"])=="files") {
|
||||||
|
|
||||||
Vector<String> files = d["files"];
|
Vector<String> files = d["files"];
|
||||||
|
@ -1005,15 +1013,7 @@ bool SceneTreeEditor::can_drop_data_fw(const Point2& p_point,const Variant& p_da
|
||||||
|
|
||||||
|
|
||||||
if (String(d["type"])=="nodes") {
|
if (String(d["type"])=="nodes") {
|
||||||
TreeItem *item = tree->get_item_at_pos(p_point);
|
|
||||||
if (!item)
|
|
||||||
return false;
|
|
||||||
int section = tree->get_drop_section_at_pos(p_point);
|
|
||||||
if (section<-1 || (section==-1 && !item->get_parent()))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in a new issue