@@ -87,6 +87,8 @@ void SceneTreeDock::_inspect_hovered_node() {
87
87
tree_item_inspected = item;
88
88
tree_item_inspected->set_custom_color (0 , get_theme_color (SNAME (" accent_color" ), EditorStringName (Editor)));
89
89
}
90
+ EditorSelectionHistory *editor_history = EditorNode::get_singleton ()->get_editor_selection_history ();
91
+ editor_history->add_object (node_hovered_now->get_instance_id ());
90
92
InspectorDock::get_inspector_singleton ()->edit (node_hovered_now);
91
93
InspectorDock::get_inspector_singleton ()->propagate_notification (NOTIFICATION_DRAG_BEGIN); // Enable inspector drag preview after it updated.
92
94
InspectorDock::get_singleton ()->update (node_hovered_now);
@@ -132,14 +134,6 @@ void SceneTreeDock::input(const Ref<InputEvent> &p_event) {
132
134
_push_item (pending_click_select);
133
135
pending_click_select = nullptr ;
134
136
}
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
- }
143
137
}
144
138
145
139
if (tree_clicked && get_viewport ()->gui_is_dragging ()) {
@@ -1690,13 +1684,30 @@ void SceneTreeDock::_notification(int p_what) {
1690
1684
1691
1685
case NOTIFICATION_DRAG_END: {
1692
1686
_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 ();
1696
1697
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
+ }
1700
1711
}
1701
1712
}
1702
1713
hovered_but_reparenting = false ;
@@ -4574,7 +4585,6 @@ SceneTreeDock::SceneTreeDock(Node *p_scene_root, EditorSelection *p_editor_selec
4574
4585
scene_tree->connect (" files_dropped" , callable_mp (this , &SceneTreeDock::_files_dropped));
4575
4586
scene_tree->connect (" script_dropped" , callable_mp (this , &SceneTreeDock::_script_dropped));
4576
4587
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));
4578
4588
4579
4589
scene_tree->get_scene_tree ()->connect (SceneStringName (gui_input), callable_mp (this , &SceneTreeDock::_scene_tree_gui_input));
4580
4590
scene_tree->get_scene_tree ()->connect (" item_icon_double_clicked" , callable_mp (this , &SceneTreeDock::_focus_node));
0 commit comments