From 533cfa27dadb05c30f641d274bde91c7d5f3b457 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 4 Jan 2014 16:30:09 +0000 Subject: Ensure textual input boxes re-update the DOM with new values --- render/box_textarea.c | 4 +++- render/form.c | 37 +++++++++++++++++++++++++++++++++++++ render/form.h | 3 +++ 3 files changed, 43 insertions(+), 1 deletion(-) (limited to 'render') 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 -- cgit v1.2.3