diff options
| author | Albrecht Schlosser <albrechts.fltk@online.de> | 2009-02-08 14:44:15 +0000 |
|---|---|---|
| committer | Albrecht Schlosser <albrechts.fltk@online.de> | 2009-02-08 14:44:15 +0000 |
| commit | 9f1eeaee19576584fab930b6d407d0c5b307dacb (patch) | |
| tree | 8c3df25fb2177c024cc7fcd50918748d90699409 /src/Fl_Menu_Button.cxx | |
| parent | b30b9e170a0961493c1b256d9c53a1e8309f52b1 (diff) | |
Added the helper class Fl_Watch to simplify safe handling of widget deletion
in callbacks. This is used e.g. in Fl_Widget::do_callback() to prevent
accessing widgets after deletion in the callback.
Documentation adjusted, Fl_Menu_Button.cxx changed to use Fl_Watch instead
of Fl::watch_widget_pointer.
Fl::watch_widget_pointer() and Fl::release_widget_pointer() have been
modified to use an array without "holes" (NULL pointers) for storing the
widget pointers for faster access: Fl::release_widget_pointer() now shifts
pointers to close gaps of freed pointers.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6651 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_Menu_Button.cxx')
| -rw-r--r-- | src/Fl_Menu_Button.cxx | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/src/Fl_Menu_Button.cxx b/src/Fl_Menu_Button.cxx index 988a6e727..9389ca49f 100644 --- a/src/Fl_Menu_Button.cxx +++ b/src/Fl_Menu_Button.cxx @@ -58,8 +58,7 @@ const Fl_Menu_Item* Fl_Menu_Button::popup() { const Fl_Menu_Item* m; pressed_menu_button_ = this; redraw(); - Fl_Widget *mb = this; - Fl::watch_widget_pointer(mb); + Fl_Watch mb(this); if (!box() || type()) { m = menu()->popup(Fl::event_x(), Fl::event_y(), label(), mvalue(), this); } else { @@ -67,8 +66,7 @@ const Fl_Menu_Item* Fl_Menu_Button::popup() { } picked(m); pressed_menu_button_ = 0; - if (mb) mb->redraw(); - Fl::release_widget_pointer(mb); + if (mb.exists()) redraw(); return m; } |
