From 71cb70065e6819c26f101ff11e34c10383487b30 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Mon, 17 Feb 2014 14:38:53 +0000 Subject: Gadgets can exisit outside forms, so now they store their own ref to the containing html content. --- render/box_construct.c | 4 ++++ render/box_textarea.c | 15 +++++++-------- render/form.c | 18 +++--------------- render/form.h | 4 +--- render/html.c | 3 --- 5 files changed, 15 insertions(+), 29 deletions(-) (limited to 'render') 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 @@ -155,17 +155,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. * @@ -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); -- cgit v1.2.3