summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorJames Bursa <james@netsurf-browser.org>2003-12-26 00:17:55 +0000
committerJames Bursa <james@netsurf-browser.org>2003-12-26 00:17:55 +0000
commitf1b59814f8da2f3e235d47adfb332edf8a093b31 (patch)
tree760327fafeb70a0ed342abba3455da00a684eabc /desktop
parent3b4de07169777f6f820f08ac1422e9af901b3ee2 (diff)
downloadnetsurf-f1b59814f8da2f3e235d47adfb332edf8a093b31.tar.gz
netsurf-f1b59814f8da2f3e235d47adfb332edf8a093b31.tar.bz2
[project @ 2003-12-26 00:17:55 by bursa]
New url_join using liburi, <base href=...>. svn path=/import/netsurf/; revision=441
Diffstat (limited to 'desktop')
-rw-r--r--desktop/browser.c42
-rw-r--r--desktop/gui.h15
2 files changed, 24 insertions, 33 deletions
diff --git a/desktop/browser.c b/desktop/browser.c
index b2a9c27d6..54a91b7b8 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -251,6 +251,8 @@ void browser_window_open_location_post(struct browser_window* bw,
LOG(("bw = %p, url = %s", bw, url));
assert(bw != 0 && url != 0);
url1 = url_join(url, 0);
+ if (!url1)
+ return;
browser_window_open_location_historical(bw, url1, post_urlenc, post_multipart);
bw->history_add = true;
free(url1);
@@ -292,14 +294,11 @@ void browser_window_callback(content_msg msg, struct content *c,
previous_safety = gui_window_set_redraw_safety(bw->window, UNSAFE);
if (bw->loading_content == c) {
- struct gui_message gmsg;
if (bw->url != 0)
xfree(bw->url);
bw->url = xstrdup(c->url);
- gmsg.type = msg_SET_URL;
- gmsg.data.set_url.url = bw->url;
- gui_window_message(bw->window, &gmsg);
+ gui_window_set_url(bw->window, bw->url);
if (bw->current_content != NULL)
{
@@ -1215,26 +1214,28 @@ void browser_window_follow_link(struct browser_window* bw,
continue;
if (click_boxes[i].box->href != NULL)
{
+ char *url = url_join((char*) click_boxes[i].box->href,
+ bw->current_content->data.html.base_url);
+ if (!url)
+ continue;
+
if (click_type == 1) {
- char *url = url_join((char*) click_boxes[i].box->href, bw->url);
browser_window_open_location(bw, url);
- free(url);
}
else if (click_type == 2)
{
- char *url = url_join((char*) click_boxes[i].box->href, bw->url);
struct browser_window* bw_new;
bw_new = create_browser_window(browser_TITLE | browser_TOOLBAR
| browser_SCROLL_X_ALWAYS | browser_SCROLL_Y_ALWAYS, 640, 480, NULL);
gui_window_show(bw_new->window);
browser_window_open_location(bw_new, url);
- free(url);
}
else if (click_type == 0)
{
- browser_window_set_status(bw, (char*) click_boxes[i].box->href);
+ browser_window_set_status(bw, url);
done = 1;
}
+ free(url);
break;
}
if (click_type == 0 && click_boxes[i].box->title != NULL)
@@ -1572,37 +1573,37 @@ void browser_window_redraw_boxes(struct browser_window* bw, struct box_position*
void browser_form_submit(struct browser_window *bw, struct form *form,
struct form_control *submit_button)
{
- char *data, *url, *url1;
+ char *data = 0, *url = 0, *url1 = 0, *base;
struct form_successful_control *success;
assert(form);
+ assert(bw->current_content->type == CONTENT_HTML);
success = form_successful_controls(form, submit_button);
+ base = bw->current_content->data.html.base_url;
switch (form->method) {
case method_GET:
data = form_url_encode(success);
url = xcalloc(1, strlen(form->action) + strlen(data) + 2);
sprintf(url, "%s?%s", form->action, data);
- url1 = url_join(url, bw->url);
- free(data);
- free(url);
+ url1 = url_join(url, base);
+ if (!url1)
+ break;
browser_window_open_location(bw, url1);
- free(url1);
break;
case method_POST_URLENC:
data = form_url_encode(success);
- url = url_join(form->action, bw->url);
+ url = url_join(form->action, base);
+ if (!url)
+ break;
browser_window_open_location_post(bw, url, data, 0);
- free(url);
- free(data);
break;
case method_POST_MULTIPART:
- url = url_join(form->action, bw->url);
+ url = url_join(form->action, base);
browser_window_open_location_post(bw, url, 0, success);
- free(url);
break;
default:
@@ -1610,4 +1611,7 @@ void browser_form_submit(struct browser_window *bw, struct form *form,
}
form_free_successful(success);
+ free(data);
+ free(url);
+ free(url1);
}
diff --git a/desktop/gui.h b/desktop/gui.h
index 5ca8e038d..72ead54b4 100644
--- a/desktop/gui.h
+++ b/desktop/gui.h
@@ -18,18 +18,6 @@ typedef struct gui_window gui_window;
#include <stdbool.h>
#include "netsurf/desktop/browser.h"
-struct gui_message
-{
- enum { msg_SET_URL } type;
- union {
- struct {
- char* url;
- } set_url;
- } data;
-};
-
-typedef struct gui_message gui_message;
-
gui_window *gui_create_browser_window(struct browser_window *bw);
gui_window *gui_create_download_window(struct content *content);
void gui_window_destroy(gui_window* g);
@@ -43,8 +31,7 @@ unsigned long gui_window_get_width(gui_window* g);
void gui_window_set_extent(gui_window* g, unsigned long width, unsigned long height);
void gui_window_set_status(gui_window* g, const char* text);
void gui_window_set_title(gui_window* g, char* title);
-
-void gui_window_message(gui_window* g, gui_message* msg);
+void gui_window_set_url(gui_window *g, char *url);
void gui_download_window_update_status(gui_window *g);
void gui_download_window_done(gui_window *g);