summaryrefslogtreecommitdiff
path: root/dw/fltkui.cc
diff options
context:
space:
mode:
authorcorvid <corvid@lavabit.com>2009-02-13 18:16:50 -0300
committercorvid <corvid@lavabit.com>2009-02-13 18:16:50 -0300
commit51232143c0880751f4416b3c03752ac23d36bf4d (patch)
treef7efa91a74f6715f7c3249f95de107a9a7a845da /dw/fltkui.cc
parent2c47df554960abab6c17bc354b39b4537c4228e0 (diff)
Get callbacks for multiple selections right (fixes 4d76ce512830).
Diffstat (limited to 'dw/fltkui.cc')
-rw-r--r--dw/fltkui.cc17
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);
+ }
}
}