summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2014-02-08 17:11:55 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2014-02-08 17:11:55 +0000
commit8deb9ec25c6146803e3d74c1b2e00425159fd17e (patch)
tree8e61b09ee84f0124fab95f411e0c5f89fb8125f4 /render
parentec7a02e550b1c83abecc0f9103ea86e1cfb989ea (diff)
downloadnetsurf-8deb9ec25c6146803e3d74c1b2e00425159fd17e.tar.gz
netsurf-8deb9ec25c6146803e3d74c1b2e00425159fd17e.tar.bz2
Native select menu interface shouldn't force front end to dig inside bw struct.
Diffstat (limited to 'render')
-rw-r--r--render/box_textarea.c2
-rw-r--r--render/form.c34
-rw-r--r--render/form.h10
-rw-r--r--render/html.c5
-rw-r--r--render/html_interaction.c2
5 files changed, 32 insertions, 21 deletions
diff --git a/render/box_textarea.c b/render/box_textarea.c
index 099dcc8e0..298406acd 100644
--- a/render/box_textarea.c
+++ b/render/box_textarea.c
@@ -206,7 +206,7 @@ static void box_textarea_callback(void *data, struct textarea_msg *msg)
break;
case TEXTAREA_MSG_TEXT_MODIFIED:
- form_gadget_update_value(d->html, gadget,
+ form_gadget_update_value(gadget,
strndup(msg->data.modified.text,
msg->data.modified.len));
break;
diff --git a/render/form.c b/render/form.c
index 905401a63..50629c2ac 100644
--- a/render/form.c
+++ b/render/form.c
@@ -103,6 +103,7 @@ static void form_select_menu_scroll_callback(void *client_data,
* \param method method and enctype
* \param charset acceptable encodings for form submission, or NULL
* \param doc_charset encoding of containing document, or NULL
+ * \param html HTML content containing form
* \return a new structure, or NULL on memory exhaustion
*/
struct form *form_new(void *node, const char *action, const char *target,
@@ -153,6 +154,18 @@ struct form *form_new(void *node, const char *action, const char *target,
return form;
}
+
+/**
+ * Set form's html content, so it can ask to redraw.
+ *
+ * \param form form to set html content for
+ * \param html html content for form
+ */
+void form_set_html_content(struct form *f, struct html_content *html)
+{
+ f->html = html;
+}
+
/**
* Free a form, and any controls it owns.
*
@@ -1381,14 +1394,12 @@ static void form__select_process_selection(html_content *html,
}
-void form_select_process_selection(hlcache_handle *h,
- struct form_control *control, int item)
+void form_select_process_selection(struct form_control *control, int item)
{
- assert(h != NULL);
+ assert(control != NULL);
+ assert(control->form != NULL);
- form__select_process_selection(
- (html_content *)hlcache_handle_get_content(h),
- control, item);
+ form__select_process_selection(control->form->html, control, item);
}
/**
@@ -1616,12 +1627,10 @@ void form_select_menu_callback(void *client_data,
* \param radio form control of type GADGET_RADIO
*/
-void form_radio_set(html_content *html,
- struct form_control *radio)
+void form_radio_set(struct form_control *radio)
{
struct form_control *control;
- assert(html);
assert(radio);
if (!radio->form)
return;
@@ -1641,13 +1650,13 @@ void form_radio_set(html_content *html,
if (control->selected) {
control->selected = false;
dom_html_input_element_set_checked(control->node, false);
- html__redraw_a_box(html, control->box);
+ html__redraw_a_box(radio->form->html, control->box);
}
}
radio->selected = true;
dom_html_input_element_set_checked(radio->node, true);
- html__redraw_a_box(html, radio->box);
+ html__redraw_a_box(radio->form->html, radio->box);
}
@@ -1748,8 +1757,7 @@ void form_submit(nsurl *page_url, struct browser_window *target,
free(data);
}
-void form_gadget_update_value(struct html_content *html,
- struct form_control *control, char *value)
+void form_gadget_update_value(struct form_control *control, char *value)
{
switch (control->type) {
case GADGET_HIDDEN:
diff --git a/render/form.h b/render/form.h
index 84377a55b..21829b9c5 100644
--- a/render/form.h
+++ b/render/form.h
@@ -46,6 +46,7 @@ typedef enum {
/** HTML form. */
struct form {
+ struct html_content *html; /**< HTML content containing form */
void *node; /**< Corresponding DOM node */
char *action; /**< Absolute URL to submit to. */
@@ -156,6 +157,7 @@ typedef void(*select_menu_redraw_callback)(void *client_data,
struct form *form_new(void *node, const char *action, const char *target,
form_method method, const char *charset,
const char *doc_charset);
+void form_set_html_content(struct form *f, struct html_content *html);
void form_free(struct form *form);
struct form_control *form_new_control(void *node, form_control_type type);
void form_add_control(struct form *form, struct form_control *control);
@@ -187,13 +189,11 @@ void form_select_mouse_drag_end(struct form_control *control,
browser_mouse_state mouse, int x, int y);
void form_select_get_dimensions(struct form_control *control,
int *width, int *height);
-void form_select_process_selection(struct hlcache_handle *h,
- struct form_control *control, int item);
+void form_select_process_selection(struct form_control *control, int item);
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_radio_set(struct form_control *radio);
-void form_gadget_update_value(struct html_content *html,
- struct form_control *control, char *value);
+void form_gadget_update_value(struct form_control *control, char *value);
#endif
diff --git a/render/html.c b/render/html.c
index f9d885856..4336bead0 100644
--- a/render/html.c
+++ b/render/html.c
@@ -1182,6 +1182,9 @@ html_begin_conversion(html_content *htmlc)
return false;
}
}
+
+ /* Tell each form what content its in, so it can redraw */
+ form_set_html_content(f, htmlc);
}
dom_node_unref(html);
@@ -1780,7 +1783,7 @@ static void html__set_file_gadget_filename(struct content *c,
return;
}
- form_gadget_update_value(html, gadget, utf8_fn);
+ form_gadget_update_value(gadget, utf8_fn);
/* corestring_dom___ns_key_file_name_node_data */
if (dom_node_set_user_data((dom_node *)file_box->gadget->node,
diff --git a/render/html_interaction.c b/render/html_interaction.c
index 5304c0227..4d797a040 100644
--- a/render/html_interaction.c
+++ b/render/html_interaction.c
@@ -671,7 +671,7 @@ void html_mouse_action(struct content *c, struct browser_window *bw,
case GADGET_RADIO:
status = messages_get("FormRadio");
if (mouse & BROWSER_MOUSE_CLICK_1)
- form_radio_set(html, gadget);
+ form_radio_set(gadget);
break;
case GADGET_IMAGE:
if (mouse & BROWSER_MOUSE_CLICK_1) {