diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 56bef633045..699ead96e17 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -4126,6 +4126,8 @@ void Tree::gui_input(const Ref &p_event) { } void Tree::_determine_hovered_item() { + hovered_update_queued = false; + Ref bg = theme_cache.panel_style; bool rtl = is_layout_rtl(); @@ -4213,6 +4215,14 @@ void Tree::_determine_hovered_item() { } } +void Tree::_queue_update_hovered_item() { + if (hovered_update_queued) { + return; + } + hovered_update_queued = true; + callable_mp(this, &Tree::_determine_hovered_item).call_deferred(); +} + bool Tree::edit_selected(bool p_force_edit) { TreeItem *s = get_selected(); ERR_FAIL_NULL_V_MSG(s, false, "No item selected."); @@ -5046,9 +5056,7 @@ TreeItem *Tree::create_item(TreeItem *p_parent, int p_index) { ti = create_item(root, p_index); } } - - _determine_hovered_item(); - + _queue_update_hovered_item(); queue_accessibility_update(); return ti; } diff --git a/scene/gui/tree.h b/scene/gui/tree.h index 979b7ac2da3..24c79bdaaa6 100644 --- a/scene/gui/tree.h +++ b/scene/gui/tree.h @@ -733,7 +733,9 @@ private: bool enable_auto_tooltip = true; + bool hovered_update_queued = false; void _determine_hovered_item(); + void _queue_update_hovered_item(); int _count_selected_items(TreeItem *p_from) const; bool _is_branch_selected(TreeItem *p_from) const;