aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvolzhs2016-11-12 22:43:31 +0900
committerRémi Verschelde2016-11-15 08:37:48 +0100
commit2d6dabc68ed6f49e7055d4be3fa7e06e829b3ae5 (patch)
treeff750c25e32b10acf99413ca301b337a9d2dc482
parent9219ac7e44e4557fd1554f580136765b459b1dc2 (diff)
downloadgodot-2d6dabc68ed6f49e7055d4be3fa7e06e829b3ae5.tar.gz
godot-2d6dabc68ed6f49e7055d4be3fa7e06e829b3ae5.tar.zst
godot-2d6dabc68ed6f49e7055d4be3fa7e06e829b3ae5.zip
Prevent to select children if selection lock or instanced scene
Fix #7086 (cherry picked from commit c3f4d676c0e3e02c33bd3aad4fb5b42c20201e7c)
-rw-r--r--tools/editor/plugins/canvas_item_editor_plugin.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/tools/editor/plugins/canvas_item_editor_plugin.cpp b/tools/editor/plugins/canvas_item_editor_plugin.cpp
index d76dd9831..5f2841f03 100644
--- a/tools/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/tools/editor/plugins/canvas_item_editor_plugin.cpp
@@ -522,17 +522,24 @@ void CanvasItemEditor::_find_canvas_items_at_rect(const Rect2& p_rect,Node* p_no
CanvasItem *c=p_node->cast_to<CanvasItem>();
- for (int i=p_node->get_child_count()-1;i>=0;i--) {
+ bool inherited=p_node!=get_tree()->get_edited_scene_root() && p_node->get_filename()!="";
+ bool editable=false;
+ if (inherited){
+ editable=EditorNode::get_singleton()->get_edited_scene()->is_editable_instance(p_node);
+ }
+ bool lock_children=p_node->has_meta("_edit_group_") && p_node->get_meta("_edit_group_");
+ if (!lock_children && (!inherited || editable)) {
+ for (int i=p_node->get_child_count()-1;i>=0;i--) {
- if (c && !c->is_set_as_toplevel())
- _find_canvas_items_at_rect(p_rect,p_node->get_child(i),p_parent_xform * c->get_transform(),p_canvas_xform,r_items);
- else {
- CanvasLayer *cl = p_node->cast_to<CanvasLayer>();
- _find_canvas_items_at_rect(p_rect,p_node->get_child(i),transform,cl?cl->get_transform():p_canvas_xform,r_items);
+ if (c && !c->is_set_as_toplevel())
+ _find_canvas_items_at_rect(p_rect,p_node->get_child(i),p_parent_xform * c->get_transform(),p_canvas_xform,r_items);
+ else {
+ CanvasLayer *cl = p_node->cast_to<CanvasLayer>();
+ _find_canvas_items_at_rect(p_rect,p_node->get_child(i),transform,cl?cl->get_transform():p_canvas_xform,r_items);
+ }
}
}
-
if (c && c->is_visible() && !c->has_meta("_edit_lock_") && !c->cast_to<CanvasLayer>()) {
Rect2 rect = c->get_item_rect();