summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--amiga/context_menu.c2
-rw-r--r--cocoa/FormSelectMenu.m2
-rw-r--r--gtk/gui.c4
-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
-rw-r--r--riscos/window.c4
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;
diff --git a/gtk/gui.c b/gtk/gui.c
index 74da73321..a7f8d4cb2 100644
--- a/gtk/gui.c
+++ b/gtk/gui.c
@@ -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]);
}