diff options
-rw-r--r-- | amiga/context_menu.c | 2 | ||||
-rw-r--r-- | cocoa/FormSelectMenu.m | 2 | ||||
-rw-r--r-- | gtk/gui.c | 4 | ||||
-rw-r--r-- | render/box_textarea.c | 2 | ||||
-rw-r--r-- | render/form.c | 34 | ||||
-rw-r--r-- | render/form.h | 10 | ||||
-rw-r--r-- | render/html.c | 5 | ||||
-rw-r--r-- | render/html_interaction.c | 2 | ||||
-rw-r--r-- | riscos/window.c | 4 |
9 files changed, 37 insertions, 28 deletions
diff --git a/amiga/context_menu.c b/amiga/context_menu.c index 1e6da27ba..c0c47ac6b 100644 --- a/amiga/context_menu.c +++ b/amiga/context_menu.c @@ -1281,7 +1281,7 @@ static uint32 ami_popup_hook(struct Hook *hook,Object *item,APTR reserved) if(GetAttr(PMIA_ID, item, &itemid)) { - form_select_process_selection(gwin->shared->bw->current_content,gwin->shared->control,itemid); + form_select_process_selection(gwin->shared->control,itemid); } return itemid; diff --git a/cocoa/FormSelectMenu.m b/cocoa/FormSelectMenu.m index 3aaeae524..6ab9a1bd8 100644 --- a/cocoa/FormSelectMenu.m +++ b/cocoa/FormSelectMenu.m @@ -87,7 +87,7 @@ - (void) itemSelected: (id) sender; { - form_select_process_selection( browser->current_content, control, [sender tag] ); + form_select_process_selection( control, [sender tag] ); } - (void) menuDidClose: (NSMenu *) sender; @@ -611,8 +611,8 @@ static void gui_quit(void) static void nsgtk_select_menu_clicked(GtkCheckMenuItem *checkmenuitem, gpointer user_data) { - form_select_process_selection(select_menu_bw->current_content, - select_menu_control, (intptr_t)user_data); + form_select_process_selection(select_menu_control, + (intptr_t)user_data); } static void gui_create_form_select_menu(struct browser_window *bw, 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) { diff --git a/riscos/window.c b/riscos/window.c index 0116a9721..54ab250b5 100644 --- a/riscos/window.c +++ b/riscos/window.c @@ -4919,9 +4919,7 @@ void ro_gui_window_process_form_select_menu(struct gui_window *g, assert(g != NULL); if (selection->items[0] >= 0) - form_select_process_selection( - ro_gui_select_menu_bw->current_content, - gui_form_select_control, + form_select_process_selection(gui_form_select_control, selection->items[0]); } |