summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorRichard Wilson <rjw@netsurf-browser.org>2006-12-30 00:34:26 +0000
committerRichard Wilson <rjw@netsurf-browser.org>2006-12-30 00:34:26 +0000
commit1353585036eac67feeffdda4de20d91f036c1576 (patch)
tree70b313ef005a4d7945bccaf86ed499d0b3ff77fe /desktop
parent98b451ffaeedf9f5b0d4ab249c9f8eb216988eb1 (diff)
downloadnetsurf-1353585036eac67feeffdda4de20d91f036c1576.tar.gz
netsurf-1353585036eac67feeffdda4de20d91f036c1576.tar.bz2
Implement form targets (fix 1619094)
svn path=/trunk/netsurf/; revision=3125
Diffstat (limited to 'desktop')
-rw-r--r--desktop/browser.c34
-rw-r--r--desktop/browser.h4
-rw-r--r--desktop/textinput.c2
3 files changed, 19 insertions, 21 deletions
diff --git a/desktop/browser.c b/desktop/browser.c
index 052e8bad8..0cb541358 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -842,6 +842,8 @@ void browser_window_destroy_internal(struct browser_window *bw)
{
assert(bw);
+ LOG(("Destroying window"));
+
if ((bw->children) || (bw->iframes))
browser_window_destroy_children(bw);
if (bw->loading_content) {
@@ -1212,6 +1214,8 @@ void browser_window_mouse_action_html(struct browser_window *bw,
gadget_box = box;
gadget_box_x = box_x;
gadget_box_y = box_y;
+ if (gadget->form)
+ target = gadget->form->target;
}
if (box->title)
@@ -1285,11 +1289,11 @@ void browser_window_mouse_action_html(struct browser_window *bw,
status = status_buffer;
pointer = GUI_POINTER_POINT;
if (mouse & BROWSER_MOUSE_CLICK_1)
- browser_form_submit(bw, gadget->form,
- gadget, false);
+ browser_form_submit(bw, target, gadget->form,
+ gadget);
else if (mouse & BROWSER_MOUSE_CLICK_2)
- browser_form_submit(bw, gadget->form,
- gadget, true);
+ browser_form_submit(bw, "_blank", gadget->form,
+ gadget);
} else {
status = messages_get("FormBadSubmit");
}
@@ -2210,12 +2214,12 @@ gui_pointer_shape get_pointer_shape(css_cursor cursor)
* Collect controls and submit a form.
*/
-void browser_form_submit(struct browser_window *bw, struct form *form,
- struct form_control *submit_button, bool new_window)
+void browser_form_submit(struct browser_window *bw, const char *target,
+ struct form *form, struct form_control *submit_button)
{
char *data = 0, *url = 0;
struct form_successful_control *success;
- struct browser_window *target;
+ struct browser_window *bw_form;
assert(form);
assert(bw->current_content->type == CONTENT_HTML);
@@ -2225,14 +2229,8 @@ void browser_form_submit(struct browser_window *bw, struct form *form,
return;
}
- if (new_window) {
- target = browser_window_create(NULL, bw, NULL, false);
- /* any error has already been reported */
- if (!target)
- return;
- } else {
- target = bw;
- }
+ bw_form = browser_window_find_target(bw, target);
+ assert(bw);
switch (form->method) {
case method_GET:
@@ -2255,7 +2253,7 @@ void browser_form_submit(struct browser_window *bw, struct form *form,
else {
sprintf(url, "%s?%s", form->action, data);
}
- browser_window_go(target, url, bw->current_content->url,
+ browser_window_go(bw_form, url, bw->current_content->url,
true);
break;
@@ -2266,13 +2264,13 @@ void browser_form_submit(struct browser_window *bw, struct form *form,
warn_user("NoMemory", 0);
return;
}
- browser_window_go_post(target, form->action, data, 0,
+ browser_window_go_post(bw_form, form->action, data, 0,
true, bw->current_content->url,
false);
break;
case method_POST_MULTIPART:
- browser_window_go_post(target, form->action, 0, success,
+ browser_window_go_post(bw_form, form->action, 0, success,
true, bw->current_content->url,
false);
break;
diff --git a/desktop/browser.h b/desktop/browser.h
index e64e0ae21..c7bbaf8e3 100644
--- a/desktop/browser.h
+++ b/desktop/browser.h
@@ -209,8 +209,8 @@ bool browser_window_paste_text(struct browser_window *bw, const char *utf8,
void browser_window_form_select(struct browser_window *bw,
struct form_control *control, int item);
void browser_redraw_box(struct content *c, struct box *box);
-void browser_form_submit(struct browser_window *bw, struct form *form,
- struct form_control *submit_button, bool new_window);
+void browser_form_submit(struct browser_window *bw, const char *target,
+ struct form *form, struct form_control *submit_button);
void browser_window_redraw_rect(struct browser_window *bw, int x, int y,
int width, int height);
diff --git a/desktop/textinput.c b/desktop/textinput.c
index d8965725b..b03bc0999 100644
--- a/desktop/textinput.c
+++ b/desktop/textinput.c
@@ -920,7 +920,7 @@ void browser_window_input_callback(struct browser_window *bw,
case 10:
case 13: /* Return/Enter hit */
if (form)
- browser_form_submit(bw, form, 0, false);
+ browser_form_submit(bw, 0, form, 0);
return;
case 11: { /* Shift + Tab */