Bladeren bron

Queue hover update when creating TreeItem

kobewi 3 maanden geleden
bovenliggende
commit
ac2179c546
2 gewijzigde bestanden met toevoegingen van 13 en 3 verwijderingen
  1. 11 3
      scene/gui/tree.cpp
  2. 2 0
      scene/gui/tree.h

+ 11 - 3
scene/gui/tree.cpp

@@ -4126,6 +4126,8 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) {
 }
 
 void Tree::_determine_hovered_item() {
+	hovered_update_queued = false;
+
 	Ref<StyleBox> 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;
 }

+ 2 - 0
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;