diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2008-02-20 17:59:13 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2008-02-20 17:59:13 +0000 |
| commit | dc0ab1d06c3db76e8c1fd311b95abee40808864b (patch) | |
| tree | c8a6d4485b7bfce9fe0aedd5ad2eea6b8098d90b /FL | |
| parent | 97c408f1d26106b50f8958e29bda160572012bba (diff) | |
STR 1719: fixed inconsistencies with FL_WHEN_NOT_CHANGED
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@6031 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'FL')
| -rw-r--r-- | FL/Fl_Input_Choice.H | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/FL/Fl_Input_Choice.H b/FL/Fl_Input_Choice.H index cf7f8e54c..3c2c22f96 100644 --- a/FL/Fl_Input_Choice.H +++ b/FL/Fl_Input_Choice.H @@ -38,6 +38,7 @@ #include <FL/Fl_Input.H> #include <FL/Fl_Menu_Button.H> #include <FL/fl_draw.H> +#include <string.h> class Fl_Input_Choice : public Fl_Group { // Private class to handle slightly 'special' behavior of menu button @@ -60,19 +61,41 @@ class Fl_Input_Choice : public Fl_Group { static void menu_cb(Fl_Widget*, void *data) { Fl_Input_Choice *o=(Fl_Input_Choice *)data; const Fl_Menu_Item *item = o->menubutton()->mvalue(); - if ( item && item->flags & (FL_SUBMENU|FL_SUBMENU_POINTER) ) return; // ignore submenus - o->inp_->value(o->menu_->text()); - o->inp_->set_changed(); - o->do_callback(); + if (item && item->flags & (FL_SUBMENU|FL_SUBMENU_POINTER)) return; // ignore submenus + if (!strcmp(o->inp_->value(), o->menu_->text())) + { + o->Fl_Widget::clear_changed(); + if (o->when() & FL_WHEN_NOT_CHANGED) + o->do_callback(); + } + else + { + o->inp_->value(o->menu_->text()); + o->inp_->set_changed(); + o->Fl_Widget::set_changed(); + if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE)) + o->do_callback(); + } + + if (o->callback() != default_callback) + { + o->Fl_Widget::clear_changed(); + o->inp_->clear_changed(); + } } static void inp_cb(Fl_Widget*, void *data) { Fl_Input_Choice *o=(Fl_Input_Choice *)data; - if (o->inp_->changed()) + if (o->inp_->changed()) { o->Fl_Widget::set_changed(); - else + if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE)) + o->do_callback(); + } else { o->Fl_Widget::clear_changed(); - o->do_callback(); + if (o->when() & FL_WHEN_NOT_CHANGED) + o->do_callback(); + } + if (o->callback() != default_callback) o->Fl_Widget::clear_changed(); } @@ -96,6 +119,7 @@ public: inp_w(), inp_h()); inp_->callback(inp_cb, (void*)this); inp_->box(FL_FLAT_BOX); // cosmetic + inp_->when(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED); menu_ = new InputMenuButton(menu_x(), menu_y(), menu_w(), menu_h()); menu_->callback(menu_cb, (void*)this); |
