From 4a8d2b676eb22a9bc035197f48d568cade77e18c Mon Sep 17 00:00:00 2001 From: volzhs Date: Fri, 3 Mar 2017 03:51:23 +0900 Subject: [PATCH] Fix wrong TreeItem reference after reconstructing --- scene/gui/tree.cpp | 5 +++-- scene/gui/tree.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 254fc6f2c4..68de74dc4c 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -833,7 +833,6 @@ void Tree::update_cache() { cache.title_button_color = get_color("title_button_color"); v_scroll->set_custom_step(cache.font->get_height()); - cache.click_item=get_selected(); } @@ -1581,6 +1580,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos,int x_ofs,int y_ofs,bool p_ cache.click_id=c.buttons[j].id; cache.click_item=p_item; cache.click_column=col; + cache.click_pos=get_global_mouse_pos()-get_global_pos(); update(); //emit_signal("button_pressed"); return -1; @@ -2352,6 +2352,8 @@ void Tree::_input_event(InputEvent p_event) { if (cache.click_type==Cache::CLICK_BUTTON) { + // make sure in case of wrong reference after reconstructing whole TreeItems + cache.click_item=get_item_at_pos(cache.click_pos); emit_signal("button_pressed",cache.click_item,cache.click_column,cache.click_id); } @@ -2937,7 +2939,6 @@ void Tree::clear() { selected_item=NULL; edited_item=NULL; popup_edited_item=NULL; - selected_item=NULL; update(); }; diff --git a/scene/gui/tree.h b/scene/gui/tree.h index 547e5dab48..5ac6d4e894 100644 --- a/scene/gui/tree.h +++ b/scene/gui/tree.h @@ -405,6 +405,7 @@ friend class TreeItem; TreeItem *click_item; int click_column; int hover_index; + Point2 click_pos; } cache;