diff options
author | Hein-Pieter van Braam <hp@tmm.cx> | 2018-08-13 21:55:26 +0200 |
---|---|---|
committer | Hein-Pieter van Braam <hp@tmm.cx> | 2018-08-13 21:55:26 +0200 |
commit | 868efb8184dae7904aebf6366c5de246f052dead (patch) | |
tree | 32c04885e7c8ce9f3f62b822d5a0e80dd37d5228 /scene | |
parent | eef9c1f5b57cab09f50d0580034b1cf52f4d96eb (diff) |
Emit pressed events after processing items
When processing items we may actually delete the item we're processing
in the callback for the signal. To avoid this, call the signal after
we're done processing the items.
This fixes #19842
Diffstat (limited to 'scene')
-rw-r--r-- | scene/gui/popup_menu.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp index ab762e19ee..cdc6b868ec 100644 --- a/scene/gui/popup_menu.cpp +++ b/scene/gui/popup_menu.cpp @@ -1049,10 +1049,8 @@ void PopupMenu::activate_item(int p_item) { ERR_FAIL_INDEX(p_item, items.size()); ERR_FAIL_COND(items[p_item].separator); int id = items[p_item].ID >= 0 ? items[p_item].ID : p_item; - emit_signal("id_pressed", id); - emit_signal("index_pressed", p_item); - //hide all parent PopupMenue's + //hide all parent PopupMenus Node *next = get_parent(); PopupMenu *pop = Object::cast_to<PopupMenu>(next); while (pop) { @@ -1086,6 +1084,9 @@ void PopupMenu::activate_item(int p_item) { return; hide(); + + emit_signal("id_pressed", id); + emit_signal("index_pressed", p_item); } void PopupMenu::remove_item(int p_idx) { |