Skip to content

Commit 5848d72

Browse files
committed
Prevent selecting the hovered node if the mouse is not inside the inspector at the end of the drag
1 parent 5675c76 commit 5848d72

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

editor/scene_tree_dock.cpp

+25-15
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ void SceneTreeDock::_inspect_hovered_node() {
8787
tree_item_inspected = item;
8888
tree_item_inspected->set_custom_color(0, get_theme_color(SNAME("accent_color"), EditorStringName(Editor)));
8989
}
90+
EditorSelectionHistory *editor_history = EditorNode::get_singleton()->get_editor_selection_history();
91+
editor_history->add_object(node_hovered_now->get_instance_id());
9092
InspectorDock::get_inspector_singleton()->edit(node_hovered_now);
9193
InspectorDock::get_inspector_singleton()->propagate_notification(NOTIFICATION_DRAG_BEGIN); // Enable inspector drag preview after it updated.
9294
InspectorDock::get_singleton()->update(node_hovered_now);
@@ -132,14 +134,6 @@ void SceneTreeDock::input(const Ref<InputEvent> &p_event) {
132134
_push_item(pending_click_select);
133135
pending_click_select = nullptr;
134136
}
135-
136-
if (mb->is_released()) {
137-
if (tree_item_inspected) {
138-
tree_item_inspected->clear_custom_color(0);
139-
tree_item_inspected = nullptr;
140-
}
141-
_reset_hovering_timer();
142-
}
143137
}
144138

145139
if (tree_clicked && get_viewport()->gui_is_dragging()) {
@@ -1690,13 +1684,30 @@ void SceneTreeDock::_notification(int p_what) {
16901684

16911685
case NOTIFICATION_DRAG_END: {
16921686
_reset_hovering_timer();
1693-
if (select_node_hovered_at_end_of_drag && !hovered_but_reparenting) {
1694-
Node *node_inspected = Object::cast_to<Node>(InspectorDock::get_inspector_singleton()->get_edited_object());
1695-
if (node_inspected) {
1687+
if (tree_item_inspected) {
1688+
tree_item_inspected->clear_custom_color(0);
1689+
tree_item_inspected = nullptr;
1690+
} else {
1691+
return;
1692+
}
1693+
if (!hovered_but_reparenting) {
1694+
InspectorDock *inspector_dock = InspectorDock::get_singleton();
1695+
if (!inspector_dock->get_rect().has_point(inspector_dock->get_local_mouse_position())) {
1696+
List<Node *> full_selection = editor_selection->get_full_selected_node_list();
16961697
editor_selection->clear();
1697-
editor_selection->add_node(node_inspected);
1698-
scene_tree->set_selected(node_inspected);
1699-
select_node_hovered_at_end_of_drag = false;
1698+
for (Node *E : full_selection) {
1699+
editor_selection->add_node(E);
1700+
}
1701+
return;
1702+
}
1703+
if (select_node_hovered_at_end_of_drag) {
1704+
Node *node_inspected = Object::cast_to<Node>(InspectorDock::get_inspector_singleton()->get_edited_object());
1705+
if (node_inspected) {
1706+
editor_selection->clear();
1707+
editor_selection->add_node(node_inspected);
1708+
scene_tree->set_selected(node_inspected);
1709+
select_node_hovered_at_end_of_drag = false;
1710+
}
17001711
}
17011712
}
17021713
hovered_but_reparenting = false;
@@ -4574,7 +4585,6 @@ SceneTreeDock::SceneTreeDock(Node *p_scene_root, EditorSelection *p_editor_selec
45744585
scene_tree->connect("files_dropped", callable_mp(this, &SceneTreeDock::_files_dropped));
45754586
scene_tree->connect("script_dropped", callable_mp(this, &SceneTreeDock::_script_dropped));
45764587
scene_tree->connect("nodes_dragged", callable_mp(this, &SceneTreeDock::_nodes_drag_begin));
4577-
scene_tree->connect(SceneStringName(mouse_exited), callable_mp(this, &SceneTreeDock::_reset_hovering_timer));
45784588

45794589
scene_tree->get_scene_tree()->connect(SceneStringName(gui_input), callable_mp(this, &SceneTreeDock::_scene_tree_gui_input));
45804590
scene_tree->get_scene_tree()->connect("item_icon_double_clicked", callable_mp(this, &SceneTreeDock::_focus_node));

0 commit comments

Comments
 (0)