-fix bug in scene tree dragndrop reparenting, closes #4712, closes #4633, closes #4628

-avoid editor scrollable areas to scroll if touchscreen ui hint is turned on
This commit is contained in:
Juan Linietsky 2016-06-18 15:30:44 -03:00
parent adc13e9027
commit 9b9580f568
1 changed files with 27 additions and 12 deletions

View File

@ -1512,12 +1512,18 @@ static bool _has_visible_children(Node* p_node) {
} }
static Node* _find_last_visible(Node*p_node) { static Node* _find_last_visible(Node*p_node) {
Node*last=NULL; Node*last=NULL;
for(int i=0;i<p_node->get_child_count();i++) {
if (_is_node_visible(p_node->get_child(i))) { bool collapsed = p_node->has_meta("_editor_collapsed") ? (bool)p_node->get_meta("_editor_collapsed") : false;
last=p_node->get_child(i);
if (!collapsed) {
for(int i=0;i<p_node->get_child_count();i++) {
if (_is_node_visible(p_node->get_child(i))) {
last=p_node->get_child(i);
}
} }
} }
@ -1588,18 +1594,27 @@ void SceneTreeDock::_normalize_drop(Node*& to_node, int &to_pos,int p_type) {
Node* lower_sibling=NULL; Node* lower_sibling=NULL;
for(int i=to_node->get_index()+1;i<to_node->get_parent()->get_child_count();i++) {
Node *c =to_node->get_parent()->get_child(i);
if (_is_node_visible(c)) { if (_has_visible_children(to_node) ) {
lower_sibling=c; to_pos=0;
} else {
for(int i=to_node->get_index()+1;i<to_node->get_parent()->get_child_count();i++) {
Node *c =to_node->get_parent()->get_child(i);
if (_is_node_visible(c)) {
lower_sibling=c;
break;
}
} }
}
if (lower_sibling) { if (lower_sibling) {
to_pos=lower_sibling->get_index(); to_pos=lower_sibling->get_index();
} }
to_node=to_node->get_parent(); to_node=to_node->get_parent();
}
#if 0 #if 0
//quite complicated, look for next visible in tree //quite complicated, look for next visible in tree
upper_sibling=_find_last_visible(upper_sibling); upper_sibling=_find_last_visible(upper_sibling);