summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2014-02-17 14:38:53 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2014-02-17 14:38:53 +0000
commit71cb70065e6819c26f101ff11e34c10383487b30 (patch)
tree6a4e2d6adb6bfbb029a93fa4c992613228a49e24
parentb99357616cebe750e523f123701f284d7ac0037f (diff)
downloadnetsurf-71cb70065e6819c26f101ff11e34c10383487b30.tar.gz
netsurf-71cb70065e6819c26f101ff11e34c10383487b30.tar.bz2
Gadgets can exisit outside forms, so now they store their own ref to the containing html content.
-rw-r--r--render/box_construct.c4
-rw-r--r--render/box_textarea.c15
-rw-r--r--render/form.c18
-rw-r--r--render/form.h4
-rw-r--r--render/html.c3
5 files changed, 15 insertions, 29 deletions
diff --git a/render/box_construct.c b/render/box_construct.c
index ce21b70f7..f5ef099b4 100644
--- a/render/box_construct.c
+++ b/render/box_construct.c
@@ -2391,6 +2391,7 @@ bool box_input(BOX_SPECIAL_PARAMS)
goto no_memory;
box->gadget = gadget;
gadget->box = box;
+ gadget->html = content;
if (type && dom_string_caseless_lwc_isequal(type,
corestring_lwc_password)) {
@@ -2526,6 +2527,7 @@ bool box_button(BOX_SPECIAL_PARAMS)
if (!gadget)
return false;
+ gadget->html = content;
box->gadget = gadget;
gadget->box = box;
@@ -2554,6 +2556,7 @@ bool box_select(BOX_SPECIAL_PARAMS)
if (gadget == NULL)
return false;
+ gadget->html = content;
err = dom_node_get_first_child(n, &c);
if (err != DOM_NO_ERR)
return false;
@@ -2761,6 +2764,7 @@ bool box_textarea(BOX_SPECIAL_PARAMS)
if (box->gadget == NULL)
return false;
+ box->gadget->html = content;
box->gadget->box = box;
if (!box_input_text(content, box, n))
diff --git a/render/box_textarea.c b/render/box_textarea.c
index 298406acd..fe5a7bab1 100644
--- a/render/box_textarea.c
+++ b/render/box_textarea.c
@@ -107,8 +107,8 @@ bool box_textarea_keypress(html_content *html, struct box *box, uint32_t key)
static void box_textarea_callback(void *data, struct textarea_msg *msg)
{
struct form_textarea_data *d = data;
- struct html_content *html = d->html;
struct form_control *gadget = d->gadget;
+ struct html_content *html = d->gadget->html;
struct box *box = gadget->box;
switch (msg->type) {
@@ -119,7 +119,7 @@ static void box_textarea_callback(void *data, struct textarea_msg *msg)
union html_drag_owner drag_owner;
drag_owner.no_owner = true;
- html_set_drag_type(d->html, drag_type, drag_owner,
+ html_set_drag_type(html, drag_type, drag_owner,
NULL);
} else {
/* Textarea drag started */
@@ -146,7 +146,7 @@ static void box_textarea_callback(void *data, struct textarea_msg *msg)
break;
}
- html_set_drag_type(d->html, drag_type, drag_owner,
+ html_set_drag_type(html, drag_type, drag_owner,
&rect);
}
break;
@@ -171,7 +171,7 @@ static void box_textarea_callback(void *data, struct textarea_msg *msg)
union html_selection_owner sel_owner;
sel_owner.textarea = box;
- html_set_selection(d->html, HTML_SELECTION_TEXTAREA,
+ html_set_selection(html, HTML_SELECTION_TEXTAREA,
sel_owner,
msg->data.selection.read_only);
} else {
@@ -179,7 +179,7 @@ static void box_textarea_callback(void *data, struct textarea_msg *msg)
union html_selection_owner sel_owner;
sel_owner.none = true;
- html_set_selection(d->html, HTML_SELECTION_NONE,
+ html_set_selection(html, HTML_SELECTION_NONE,
sel_owner, true);
}
break;
@@ -191,12 +191,12 @@ static void box_textarea_callback(void *data, struct textarea_msg *msg)
if (msg->data.caret.type == TEXTAREA_CARET_HIDE) {
union html_focus_owner focus_owner;
focus_owner.textarea = box;
- html_set_focus(d->html, HTML_FOCUS_TEXTAREA,
+ html_set_focus(html, HTML_FOCUS_TEXTAREA,
focus_owner, true, 0, 0, 0, NULL);
} else {
union html_focus_owner focus_owner;
focus_owner.textarea = box;
- html_set_focus(d->html, HTML_FOCUS_TEXTAREA,
+ html_set_focus(html, HTML_FOCUS_TEXTAREA,
focus_owner, false,
msg->data.caret.pos.x,
msg->data.caret.pos.y,
@@ -277,7 +277,6 @@ bool box_textarea_create_textarea(html_content *html,
if (read_only)
ta_flags |= TEXTAREA_READONLY;
- gadget->data.text.data.html = html;
gadget->data.text.data.gadget = gadget;
font_plot_style_from_css(gadget->box->style, &fstyle);
diff --git a/render/form.c b/render/form.c
index d02240f46..518d2f626 100644
--- a/render/form.c
+++ b/render/form.c
@@ -156,17 +156,6 @@ struct form *form_new(void *node, const char *action, const char *target,
/**
- * 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.
*
* \param form The form to free
@@ -1397,9 +1386,8 @@ static void form__select_process_selection(html_content *html,
void form_select_process_selection(struct form_control *control, int item)
{
assert(control != NULL);
- assert(control->form != NULL);
- form__select_process_selection(control->form->html, control, item);
+ form__select_process_selection(control->html, control, item);
}
/**
@@ -1650,13 +1638,13 @@ void form_radio_set(struct form_control *radio)
if (control->selected) {
control->selected = false;
dom_html_input_element_set_checked(control->node, false);
- html__redraw_a_box(radio->form->html, control->box);
+ html__redraw_a_box(radio->html, control->box);
}
}
radio->selected = true;
dom_html_input_element_set_checked(radio->node, true);
- html__redraw_a_box(radio->form->html, radio->box);
+ html__redraw_a_box(radio->html, radio->box);
}
diff --git a/render/form.h b/render/form.h
index 21829b9c5..f072b801e 100644
--- a/render/form.h
+++ b/render/form.h
@@ -46,7 +46,6 @@ 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. */
@@ -78,13 +77,13 @@ typedef enum {
/** Data for textarea */
struct form_textarea_data {
- struct html_content *html;
struct form_control *gadget;
};
/** Form control. */
struct form_control {
void *node; /**< Corresponding DOM node */
+ struct html_content *html; /**< HTML content containing control */
form_control_type type; /**< Type of control */
@@ -157,7 +156,6 @@ 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);
diff --git a/render/html.c b/render/html.c
index 8d3daf1a4..e375e62a5 100644
--- a/render/html.c
+++ b/render/html.c
@@ -1202,9 +1202,6 @@ 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);