summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2014-01-04 16:30:09 +0000
committerDaniel Silverstone <dsilvers@digital-scurf.org>2014-01-04 18:02:50 +0000
commit533cfa27dadb05c30f641d274bde91c7d5f3b457 (patch)
tree19330c0b9b5eb15341180a5dc7f63d9eea2bc391 /render
parent068b07494bc5491705da6b5056bd442efc3b797f (diff)
downloadnetsurf-533cfa27dadb05c30f641d274bde91c7d5f3b457.tar.gz
netsurf-533cfa27dadb05c30f641d274bde91c7d5f3b457.tar.bz2
Ensure textual input boxes re-update the DOM with new values
Diffstat (limited to 'render')
-rw-r--r--render/box_textarea.c4
-rw-r--r--render/form.c37
-rw-r--r--render/form.h3
3 files changed, 43 insertions, 1 deletions
diff --git a/render/box_textarea.c b/render/box_textarea.c
index 3c312a85f..099dcc8e0 100644
--- a/render/box_textarea.c
+++ b/render/box_textarea.c
@@ -206,7 +206,9 @@ static void box_textarea_callback(void *data, struct textarea_msg *msg)
break;
case TEXTAREA_MSG_TEXT_MODIFIED:
- /* TODO */
+ form_gadget_update_value(d->html, gadget,
+ strndup(msg->data.modified.text,
+ msg->data.modified.len));
break;
}
}
diff --git a/render/form.c b/render/form.c
index ebe9b6f28..254d2cffb 100644
--- a/render/form.c
+++ b/render/form.c
@@ -1539,3 +1539,40 @@ void form_submit(nsurl *page_url, struct browser_window *target,
fetch_multipart_data_destroy(success);
free(data);
}
+
+void form_gadget_update_value(struct html_content *html,
+ struct form_control *control, char *value)
+{
+ switch (control->type) {
+ case GADGET_HIDDEN:
+ case GADGET_TEXTBOX:
+ case GADGET_TEXTAREA:
+ case GADGET_PASSWORD:
+ case GADGET_FILE:
+ if (control->value != NULL) {
+ free(control->value);
+ }
+ control->value = value;
+ if (control->node != NULL) {
+ dom_exception err;
+ dom_string *str;
+ err = dom_string_create((uint8_t *)value,
+ strlen(value), &str);
+ if (err == DOM_NO_ERR) {
+ if (control->type == GADGET_TEXTAREA)
+ err = dom_html_text_area_element_set_value(
+ (dom_html_text_area_element *)(control->node),
+ str);
+ else
+ err = dom_html_input_element_set_value(
+ (dom_html_input_element *)(control->node),
+ str);
+ dom_string_unref(str);
+ }
+ }
+ break;
+ default:
+ /* Do nothing */
+ break;
+ }
+}
diff --git a/render/form.h b/render/form.h
index 9088ca293..c03ea8e99 100644
--- a/render/form.h
+++ b/render/form.h
@@ -183,4 +183,7 @@ void form_submit(nsurl *page_url, struct browser_window *target,
struct form *form, struct form_control *submit_button);
void form_radio_set(struct html_content *html, struct form_control *radio);
+void form_gadget_update_value(struct html_content *html,
+ struct form_control *control, char *value);
+
#endif