diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index ad84846a6df..82fb0865d25 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -88,6 +88,8 @@ void SceneTreeDock::_inspect_hovered_node() { tree_item_inspected = item; tree_item_inspected->set_custom_color(0, get_theme_color(SNAME("accent_color"), EditorStringName(Editor))); } + EditorSelectionHistory *editor_history = EditorNode::get_singleton()->get_editor_selection_history(); + editor_history->add_object(node_hovered_now->get_instance_id()); InspectorDock::get_inspector_singleton()->edit(node_hovered_now); InspectorDock::get_inspector_singleton()->propagate_notification(NOTIFICATION_DRAG_BEGIN); // Enable inspector drag preview after it updated. InspectorDock::get_singleton()->update(node_hovered_now); @@ -133,14 +135,6 @@ void SceneTreeDock::input(const Ref &p_event) { _push_item(pending_click_select); pending_click_select = nullptr; } - - if (mb->is_released()) { - if (tree_item_inspected) { - tree_item_inspected->clear_custom_color(0); - tree_item_inspected = nullptr; - } - _reset_hovering_timer(); - } } if (tree_clicked && get_viewport()->gui_is_dragging()) { @@ -1718,13 +1712,30 @@ void SceneTreeDock::_notification(int p_what) { case NOTIFICATION_DRAG_END: { _reset_hovering_timer(); - if (select_node_hovered_at_end_of_drag && !hovered_but_reparenting) { - Node *node_inspected = Object::cast_to(InspectorDock::get_inspector_singleton()->get_edited_object()); - if (node_inspected) { + if (tree_item_inspected) { + tree_item_inspected->clear_custom_color(0); + tree_item_inspected = nullptr; + } else { + return; + } + if (!hovered_but_reparenting) { + InspectorDock *inspector_dock = InspectorDock::get_singleton(); + if (!inspector_dock->get_rect().has_point(inspector_dock->get_local_mouse_position())) { + List full_selection = editor_selection->get_full_selected_node_list(); editor_selection->clear(); - editor_selection->add_node(node_inspected); - scene_tree->set_selected(node_inspected); - select_node_hovered_at_end_of_drag = false; + for (Node *E : full_selection) { + editor_selection->add_node(E); + } + return; + } + if (select_node_hovered_at_end_of_drag) { + Node *node_inspected = Object::cast_to(InspectorDock::get_inspector_singleton()->get_edited_object()); + if (node_inspected) { + editor_selection->clear(); + editor_selection->add_node(node_inspected); + scene_tree->set_selected(node_inspected); + select_node_hovered_at_end_of_drag = false; + } } } hovered_but_reparenting = false; @@ -4644,7 +4655,6 @@ SceneTreeDock::SceneTreeDock(Node *p_scene_root, EditorSelection *p_editor_selec scene_tree->connect("files_dropped", callable_mp(this, &SceneTreeDock::_files_dropped)); scene_tree->connect("script_dropped", callable_mp(this, &SceneTreeDock::_script_dropped)); scene_tree->connect("nodes_dragged", callable_mp(this, &SceneTreeDock::_nodes_drag_begin)); - scene_tree->connect(SceneStringName(mouse_exited), callable_mp(this, &SceneTreeDock::_reset_hovering_timer)); scene_tree->get_scene_tree()->connect(SceneStringName(gui_input), callable_mp(this, &SceneTreeDock::_scene_tree_gui_input)); scene_tree->get_scene_tree()->connect("item_icon_double_clicked", callable_mp(this, &SceneTreeDock::_focus_node));