mirror of
https://github.com/fltk/fltk.git
synced 2026-05-29 04:26:27 +08:00
Fix callback forwarding in Fl_Input_Choice.
Widget would always call CHANGED but never RELEASE events, no matter how the when() flags were set.
This commit is contained in:
+10
-5
@@ -244,12 +244,17 @@ void Fl_Input_Choice::inp_cb(Fl_Widget*, void *data) {
|
|||||||
Fl_Widget_Tracker wp(o);
|
Fl_Widget_Tracker wp(o);
|
||||||
if (o->inp_->changed()) {
|
if (o->inp_->changed()) {
|
||||||
o->Fl_Widget::set_changed();
|
o->Fl_Widget::set_changed();
|
||||||
if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
|
|
||||||
o->do_callback(FL_REASON_CHANGED);
|
|
||||||
} else {
|
} else {
|
||||||
o->Fl_Widget::clear_changed();
|
o->Fl_Widget::clear_changed();
|
||||||
if (o->when() & FL_WHEN_NOT_CHANGED)
|
}
|
||||||
o->do_callback(FL_REASON_RESELECTED);
|
if (Fl::callback_reason() == FL_REASON_LOST_FOCUS) {
|
||||||
|
if (o->when() & FL_WHEN_RELEASE)
|
||||||
|
o->do_callback(FL_REASON_LOST_FOCUS);
|
||||||
|
} else {
|
||||||
|
if (o->inp_->changed() && (o->when() & FL_WHEN_CHANGED))
|
||||||
|
o->do_callback(Fl::callback_reason());
|
||||||
|
else if (o->when() & FL_WHEN_NOT_CHANGED)
|
||||||
|
o->do_callback(Fl::callback_reason());
|
||||||
}
|
}
|
||||||
if (wp.deleted()) return;
|
if (wp.deleted()) return;
|
||||||
|
|
||||||
@@ -270,7 +275,7 @@ Fl_Input_Choice::Fl_Input_Choice(int X, int Y, int W, int H, const char *L)
|
|||||||
inp_ = new Fl_Input(inp_x(), inp_y(), inp_w(), inp_h());
|
inp_ = new Fl_Input(inp_x(), inp_y(), inp_w(), inp_h());
|
||||||
inp_->callback(inp_cb, (void*)this);
|
inp_->callback(inp_cb, (void*)this);
|
||||||
inp_->box(FL_FLAT_BOX); // cosmetic
|
inp_->box(FL_FLAT_BOX); // cosmetic
|
||||||
inp_->when(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED);
|
inp_->when(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED|FL_WHEN_RELEASE);
|
||||||
menu_ = new InputMenuButton(menu_x(), menu_y(), menu_w(), menu_h());
|
menu_ = new InputMenuButton(menu_x(), menu_y(), menu_w(), menu_h());
|
||||||
menu_->callback(menu_cb, (void*)this);
|
menu_->callback(menu_cb, (void*)this);
|
||||||
end();
|
end();
|
||||||
|
|||||||
Reference in New Issue
Block a user