diff options
| author | Manolo Gouy <mgouy@biomp2.univ-lyon1.fr> | 2018-12-07 16:59:11 +0100 |
|---|---|---|
| committer | Manolo Gouy <mgouy@biomp2.univ-lyon1.fr> | 2018-12-07 16:59:11 +0100 |
| commit | 6e49ce0a2816cd332db9ca16d0c0c0d9156fb251 (patch) | |
| tree | d3c41c74f8c1f3fe06fc0140f896ac6bdf1a7161 | |
| parent | ed87d98c24ff4b9faeddf6025600850578cd8589 (diff) | |
| parent | d87ac9b59783dec5628e7ae242b390cf5097b77a (diff) | |
Merge remote-tracking branch 'origin/master'
| -rw-r--r-- | src/Fl_Menu.cxx | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/Fl_Menu.cxx b/src/Fl_Menu.cxx index 1d7f47672..b3e1f5c65 100644 --- a/src/Fl_Menu.cxx +++ b/src/Fl_Menu.cxx @@ -867,6 +867,10 @@ const Fl_Menu_Item* Fl_Menu_Item::pulldown( int menubar) const { Fl_Group::current(0); // fix possible user error... + // track the Fl_Menu_ widget to make sure we notice if it gets + // deleted while the menu is open (STR #3503) + Fl_Widget_Tracker wp((Fl_Widget *)pbutton); + button = pbutton; if (pbutton && pbutton->window()) { for (Fl_Window* w = pbutton->window(); w; w = w->window()) { @@ -903,7 +907,8 @@ const Fl_Menu_Item* Fl_Menu_Item::pulldown( initial_item = pp.current_item; if (initial_item) goto STARTUP; - // the main loop, runs until p.state goes to DONE_STATE: + // the main loop: runs until p.state goes to DONE_STATE or the menu + // widget is deleted (e.g. from a timer callback, see STR #3503): for (;;) { // make sure all the menus are shown: @@ -920,6 +925,8 @@ const Fl_Menu_Item* Fl_Menu_Item::pulldown( { const Fl_Menu_Item* oldi = pp.current_item; Fl::wait(); + if (wp.deleted()) // menu widget has been deleted (STR #3503) + break; if (pp.state == DONE_STATE) break; // done. if (pp.current_item == oldi) continue; } |
