summaryrefslogtreecommitdiff
path: root/scene/gui/tree.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/gui/tree.cpp')
-rw-r--r--scene/gui/tree.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index 8fad49a0d2..514be00227 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -1158,10 +1158,9 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
r.position.x += icon_width;
r.size.x -= icon_width;
}
- //r.grow(cache.selected->get_margin(MARGIN_LEFT));
+ p_item->set_meta("__focus_rect", Rect2(r.position, r.size));
if (has_focus()) {
cache.selected_focus->draw(ci, r);
- p_item->set_meta("__focus_rect", Rect2(r.position, r.size));
} else {
cache.selected->draw(ci, r);
}
@@ -1602,6 +1601,7 @@ void Tree::_range_click_timeout() {
mb.instance();
;
+ propagate_mouse_activated = false; //done from outside, so signal handler cant clear the tree in the middle of emit(which is a common case)
blocked++;
propagate_mouse_event(pos + cache.offset, 0, 0, false, root, BUTTON_LEFT, mb);
blocked--;
@@ -1615,6 +1615,11 @@ void Tree::_range_click_timeout() {
if (!click_handled)
range_click_timer->stop();
+ if (propagate_mouse_activated) {
+ emit_signal("item_activated");
+ propagate_mouse_activated = false;
+ }
+
} else {
range_click_timer->stop();
}
@@ -1723,7 +1728,8 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, bool
if (p_doubleclick && (!c.editable || c.mode == TreeItem::CELL_MODE_CUSTOM || c.mode == TreeItem::CELL_MODE_ICON /*|| c.mode==TreeItem::CELL_MODE_CHECK*/)) { //it's confusing for check
- emit_signal("item_activated");
+ propagate_mouse_activated = true;
+
incr_search.clear();
return -1;
}
@@ -2591,6 +2597,7 @@ void Tree::_gui_input(Ref<InputEvent> p_event) {
click_handled = false;
pressing_for_editor = false;
+ propagate_mouse_activated = false;
blocked++;
propagate_mouse_event(pos + cache.offset, 0, 0, b->is_doubleclick(), root, b->get_button_index(), b);
@@ -2628,6 +2635,11 @@ void Tree::_gui_input(Ref<InputEvent> p_event) {
}
}
+ if (propagate_mouse_activated) {
+ emit_signal("item_activated");
+ propagate_mouse_activated = false;
+ }
+
} break;
case BUTTON_WHEEL_UP: {
@@ -3945,6 +3957,7 @@ Tree::Tree() {
cache.hover_cell = -1;
allow_reselect = false;
+ propagate_mouse_activated = false;
}
Tree::~Tree() {