diff options
-rw-r--r-- | dw/fltkui.cc | 6 | ||||
-rw-r--r-- | src/form.cc | 16 |
2 files changed, 12 insertions, 10 deletions
diff --git a/dw/fltkui.cc b/dw/fltkui.cc index ac3997ab..1ef9b61b 100644 --- a/dw/fltkui.cc +++ b/dw/fltkui.cc @@ -1287,10 +1287,10 @@ void FltkListResource::setItem (int index, bool selected) if (item) { itemsSelected.set (index, selected); - if (mode == SELECTION_MULTIPLE) - item->select(selected); - else if (selected) + if (selected && mode != SELECTION_MULTIPLE) tree->select_only(item); + else + item->select(selected); queueResize (true); } } diff --git a/src/form.cc b/src/form.cc index d5bd71da..26ab8e0d 100644 --- a/src/form.cc +++ b/src/form.cc @@ -752,11 +752,12 @@ void Html_tag_open_select(DilloHtml *html, const char *tag, int tagsize) type = DILLO_HTML_INPUT_SELECT; res = factory->createOptionMenuResource (); } else { + ListResource::SelectionMode mode; + type = DILLO_HTML_INPUT_SEL_LIST; - res = factory->createListResource (multi ? - ListResource::SELECTION_MULTIPLE : - ListResource::SELECTION_EXACTLY_ONE, - rows); + mode = multi ? ListResource::SELECTION_MULTIPLE + : ListResource::SELECTION_AT_MOST_ONE; + res = factory->createListResource (mode, rows); } Embed *embed = new Embed(res); @@ -787,9 +788,10 @@ void Html_tag_close_select(DilloHtml *html) DilloHtmlInput *input = Html_get_current_input(html); DilloHtmlSelect *select = input->select; - // BUG(?): should not do this for MULTI selections - select->ensureSelection (); - + if (input->type == DILLO_HTML_INPUT_SELECT) { + // option menu interface requires that something be selected */ + select->ensureSelection (); + } SelectionResource *res = (SelectionResource*)input->embed->getResource(); select->addOptionsTo (res); } |