summaryrefslogtreecommitdiff
path: root/src/Fl_Widget.cxx
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2009-02-08 14:44:15 +0000
committerAlbrecht Schlosser <albrechts.fltk@online.de>2009-02-08 14:44:15 +0000
commit9f1eeaee19576584fab930b6d407d0c5b307dacb (patch)
tree8c3df25fb2177c024cc7fcd50918748d90699409 /src/Fl_Widget.cxx
parentb30b9e170a0961493c1b256d9c53a1e8309f52b1 (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_Widget.cxx')
-rw-r--r--src/Fl_Widget.cxx15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/Fl_Widget.cxx b/src/Fl_Widget.cxx
index 550f1eb1c..740dad6fd 100644
--- a/src/Fl_Widget.cxx
+++ b/src/Fl_Widget.cxx
@@ -293,6 +293,21 @@ Fl_Widget::copy_label(const char *a) {
redraw_label();
}
+/** Calls the widget callback.
+
+ Causes a widget to invoke its callback function with arbitrary arguments.
+ \param[in] o call the callback with \a o as the widget argument
+ \param[in] arg call the callback with \a arg as the user data argument
+ \see callback()
+*/
+void
+Fl_Widget::do_callback(Fl_Widget* o,void* arg) {
+ Fl_Watch wp(o);
+ callback_(o,arg);
+ if (wp.deleted()) return;
+ if (callback_ != default_callback)
+ clear_changed();
+}
//
// End of "$Id$".