summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcorvid <corvid@lavabit.com>2012-11-28 01:57:06 +0000
committercorvid <corvid@lavabit.com>2012-11-28 01:57:06 +0000
commitbb58b5e5989f46809159b0e86cb5d76f3bf42055 (patch)
tree8a2b746aab77ee7f8a7e87b9b3b74d48fa93ebc3 /src
parentf8c9c679460315d6e27f993bd996e601fa87f7fc (diff)
don't require an item selected for SELECT size>1 non-multiple
This had been discussed a bit a few years ago. At the time, the html4 spec's idea was that you probably should require one but that implementations varied on the details. These days, firefox doesn't, and html5 mostly tells you not to (and is clear that you can deselect the only selected one). (The world's biggest document, practically a browser written in english at the instruction level, and it still has many cases that aren't considered and spelled out carefully at this point.)
Diffstat (limited to 'src')
-rw-r--r--src/form.cc16
1 files changed, 9 insertions, 7 deletions
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);
}