diff options
author | corvid <corvid@lavabit.com> | 2009-02-13 18:16:50 -0300 |
---|---|---|
committer | corvid <corvid@lavabit.com> | 2009-02-13 18:16:50 -0300 |
commit | 51232143c0880751f4416b3c03752ac23d36bf4d (patch) | |
tree | f7efa91a74f6715f7c3249f95de107a9a7a845da /dw/fltkui.cc | |
parent | 2c47df554960abab6c17bc354b39b4537c4228e0 (diff) |
Get callbacks for multiple selections right (fixes 4d76ce512830).
Diffstat (limited to 'dw/fltkui.cc')
-rw-r--r-- | dw/fltkui.cc | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/dw/fltkui.cc b/dw/fltkui.cc index 8c7ebcf3..8ca35468 100644 --- a/dw/fltkui.cc +++ b/dw/fltkui.cc @@ -1259,8 +1259,21 @@ void FltkListResource::widgetCallback (::fltk::Widget *widget, void *data) if (fltkItem) index = (long) (fltkItem->user_data ()); if (index > -1) { - bool selected = fltkItem->selected (); - ((FltkListResource *) data)->itemsSelected.set (index, selected); + /* A MultiBrowser will trigger a callback for each item that is + * selected and each item that is deselected, but a "plain" + * Browser will only trigger the callback for the newly selected item + * (for which selected() is false, incidentally). + */ + FltkListResource *res = (FltkListResource *) data; + if (res->mode == SELECTION_MULTIPLE) { + bool selected = fltkItem->selected (); + res->itemsSelected.set (index, selected); + } else { + int size = res->itemsSelected.size(); + for (int i = 0; i < size; i++) + res->itemsSelected.set (i, false); + res->itemsSelected.set (index, true); + } } } |