diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2008-02-07 00:50:37 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2008-02-07 00:50:37 +0000 |
commit | 2c2ac87e37c2098421b83f9e684e29c7e01b24f4 (patch) | |
tree | 76acd14375d2f5b329440932bb4594550fd10a0d | |
parent | 5c1f3bd8c899ec79a504d74023143bb4594cfd6c (diff) | |
download | netsurf-2c2ac87e37c2098421b83f9e684e29c7e01b24f4.tar.gz netsurf-2c2ac87e37c2098421b83f9e684e29c7e01b24f4.tar.bz2 |
Prevent tabbing into textfields whose styling is display: none;
svn path=/trunk/netsurf/; revision=3849
-rw-r--r-- | desktop/textinput.c | 14 | ||||
-rw-r--r-- | render/box_construct.c | 10 |
2 files changed, 20 insertions, 4 deletions
diff --git a/desktop/textinput.c b/desktop/textinput.c index 4c54924c9..34006dbaf 100644 --- a/desktop/textinput.c +++ b/desktop/textinput.c @@ -925,11 +925,14 @@ bool browser_window_input_callback(struct browser_window *bw, case 9: { /* Tab */ struct form_control *next_input; + /* Find next text entry field that is actually + * displayed (i.e. has an associated box) */ for (next_input = input->gadget->next; next_input && - next_input->type != GADGET_TEXTBOX && + ((next_input->type != GADGET_TEXTBOX && next_input->type != GADGET_TEXTAREA && - next_input->type != GADGET_PASSWORD; + next_input->type != GADGET_PASSWORD) || + !next_input->box); next_input = next_input->next) ; if (!next_input) @@ -950,11 +953,14 @@ bool browser_window_input_callback(struct browser_window *bw, case 11: { /* Shift + Tab */ struct form_control *prev_input; + /* Find previous text entry field that is actually + * displayed (i.e. has an associated box) */ for (prev_input = input->gadget->prev; prev_input && - prev_input->type != GADGET_TEXTBOX && + ((prev_input->type != GADGET_TEXTBOX && prev_input->type != GADGET_TEXTAREA && - prev_input->type != GADGET_PASSWORD; + prev_input->type != GADGET_PASSWORD) || + !prev_input->box); prev_input = prev_input->prev) ; if (!prev_input) diff --git a/render/box_construct.c b/render/box_construct.c index 9519f8ff8..391999aa7 100644 --- a/render/box_construct.c +++ b/render/box_construct.c @@ -355,7 +355,17 @@ bool box_construct_element(xmlNode *n, struct content *content, target = box->target; } if (style->display == CSS_DISPLAY_NONE) { + /* Free style and invalidate box's style pointer */ talloc_free(style); + box->style = NULL; + + /* If this box has an associated gadget, invalidate the + * gadget's box pointer and our pointer to the gadget. */ + if (box->gadget) { + box->gadget->box = NULL; + box->gadget = NULL; + } + /* We can't do this, as it will destroy any gadget * associated with the box, thus making any form usage * access freed memory. The box is in the talloc context, |