diff options
-rw-r--r-- | desktop/browser.c | 33 | ||||
-rw-r--r-- | desktop/browser.h | 5 | ||||
-rw-r--r-- | desktop/gui.h | 1 | ||||
-rw-r--r-- | gtk/gtk_window.c | 6 | ||||
-rw-r--r-- | riscos/401login.c | 4 | ||||
-rw-r--r-- | riscos/gui.c | 2 | ||||
-rw-r--r-- | riscos/history.c | 2 | ||||
-rw-r--r-- | riscos/menus.c | 4 | ||||
-rw-r--r-- | riscos/plugin.c | 2 | ||||
-rw-r--r-- | riscos/window.c | 22 |
10 files changed, 53 insertions, 28 deletions
diff --git a/desktop/browser.c b/desktop/browser.c index f0c5b38a6..791a76685 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -82,7 +82,8 @@ static void browser_form_submit(struct browser_window *bw, struct form *form, /** * Create and open a new browser window with the given page. * - * \param url URL to start fetching in the new window (copied) + * \param url URL to start fetching in the new window (copied) + * \param clone The browser window to clone */ void browser_window_create(const char *url, struct browser_window *clone) @@ -105,22 +106,24 @@ void browser_window_create(const char *url, struct browser_window *clone) free(bw); return; } - browser_window_go(bw, url); + browser_window_go(bw, url, false); } /** * Start fetching a page in a browser window. * - * \param bw browser window - * \param url URL to start fetching (copied) + * \param bw browser window + * \param url URL to start fetching (copied) + * \param referer whether to send the referer header * * Any existing fetches in the window are aborted. */ -void browser_window_go(struct browser_window *bw, const char *url) +void browser_window_go(struct browser_window *bw, const char *url, + bool referer) { - browser_window_go_post(bw, url, 0, 0, true); + browser_window_go_post(bw, url, 0, 0, true, referer); } @@ -144,7 +147,7 @@ void browser_window_go(struct browser_window *bw, const char *url) void browser_window_go_post(struct browser_window *bw, const char *url, char *post_urlenc, struct form_successful_control *post_multipart, - bool history_add) + bool history_add, bool referer) { struct content *c; char *url2; @@ -188,7 +191,8 @@ void browser_window_go_post(struct browser_window *bw, const char *url, bw->loading_content = c; browser_window_start_throbber(bw); - fetchcache_go(c, 0, browser_window_callback, bw, 0, + fetchcache_go(c, referer ? gui_window_get_url(bw->window) : 0, + browser_window_callback, bw, 0, post_urlenc, post_multipart, true); } @@ -273,7 +277,8 @@ void browser_window_callback(content_msg msg, struct content *c, bw->loading_content = 0; browser_window_set_status(bw, messages_get("Redirecting")); - browser_window_go(bw, data.redirect); + /* hmm, should we do send the referrer here? */ + browser_window_go(bw, data.redirect, false); break; case CONTENT_MSG_REFORMAT: @@ -469,7 +474,7 @@ void browser_window_reload(struct browser_window *bw, bool all) } } bw->current_content->fresh = false; - browser_window_go_post(bw, bw->current_content->url, 0, 0, false); + browser_window_go_post(bw, bw->current_content->url, 0, 0, false, false); } @@ -783,7 +788,7 @@ void browser_window_mouse_click_html(struct browser_window *bw, click == BROWSER_MOUSE_CLICK_2) { if (fetch_can_fetch(url)) { if (click == BROWSER_MOUSE_CLICK_1) - browser_window_go(bw, url); + browser_window_go(bw, url, true); else browser_window_create(url, bw); } else { @@ -1721,7 +1726,7 @@ void browser_form_submit(struct browser_window *bw, struct form *form, res = url_join(url, base, &url1); if (res != URL_FUNC_OK) break; - browser_window_go(bw, url1); + browser_window_go(bw, url1, true); break; case method_POST_URLENC: @@ -1734,14 +1739,14 @@ void browser_form_submit(struct browser_window *bw, struct form *form, res = url_join(form->action, base, &url); if (res != URL_FUNC_OK) break; - browser_window_go_post(bw, url, data, 0, true); + browser_window_go_post(bw, url, data, 0, true, true); break; case method_POST_MULTIPART: res = url_join(form->action, base, &url); if (res != URL_FUNC_OK) break; - browser_window_go_post(bw, url, 0, success, true); + browser_window_go_post(bw, url, 0, success, true, true); break; default: diff --git a/desktop/browser.h b/desktop/browser.h index ba0bd0e04..7978060ef 100644 --- a/desktop/browser.h +++ b/desktop/browser.h @@ -71,11 +71,12 @@ typedef enum { void browser_window_create(const char *url, struct browser_window *clone); -void browser_window_go(struct browser_window *bw, const char *url); +void browser_window_go(struct browser_window *bw, const char *url, + bool referer); void browser_window_go_post(struct browser_window *bw, const char *url, char *post_urlenc, struct form_successful_control *post_multipart, - bool history_add); + bool history_add, bool referer); void browser_window_stop(struct browser_window *bw); void browser_window_reload(struct browser_window *bw, bool all); void browser_window_destroy(struct browser_window *bw); diff --git a/desktop/gui.h b/desktop/gui.h index 1db455c6f..cb16e8864 100644 --- a/desktop/gui.h +++ b/desktop/gui.h @@ -45,6 +45,7 @@ void gui_window_set_extent(struct gui_window *g, int width, int height); void gui_window_set_status(struct gui_window *g, const char *text); void gui_window_set_pointer(gui_pointer_shape shape); void gui_window_set_url(struct gui_window *g, const char *url); +char *gui_window_get_url(struct gui_window *g); void gui_window_start_throbber(struct gui_window *g); void gui_window_stop_throbber(struct gui_window *g); void gui_window_place_caret(struct gui_window *g, int x, int y, int height); diff --git a/gtk/gtk_window.c b/gtk/gtk_window.c index ded7a6514..46c9e74ad 100644 --- a/gtk/gtk_window.c +++ b/gtk/gtk_window.c @@ -188,7 +188,7 @@ gboolean gui_window_url_key_press_event(GtkWidget *widget, if (event->keyval != GDK_Return) return FALSE; - browser_window_go(g->bw, gtk_entry_get_text(GTK_ENTRY(g->url_bar))); + browser_window_go(g->bw, gtk_entry_get_text(GTK_ENTRY(g->url_bar)), false); return TRUE; } @@ -305,6 +305,10 @@ void gui_window_set_url(struct gui_window *g, const char *url) gtk_entry_set_text(GTK_ENTRY(g->url_bar), url); } +char *gui_window_get_url(struct gui_window *g) +{ + return gtk_entry_get_text(GTK_ENTRY(g->url_bar)); +} void gui_window_start_throbber(struct gui_window* g) { diff --git a/riscos/401login.c b/riscos/401login.c index 9edef15a8..0832d594f 100644 --- a/riscos/401login.c +++ b/riscos/401login.c @@ -99,7 +99,7 @@ bool ro_gui_401login_keypress(wimp_key *key) case wimp_KEY_RETURN: get_unamepwd(); ro_gui_dialog_close(dialog_401li); - browser_window_go(bwin, url); + browser_window_go(bwin, url, false); return true; } @@ -118,7 +118,7 @@ void ro_gui_401login_click(wimp_pointer *pointer) case ICON_401LOGIN_LOGIN: get_unamepwd(); ro_gui_dialog_close(dialog_401li); - browser_window_go(bwin, url); + browser_window_go(bwin, url, false); break; case ICON_401LOGIN_CANCEL: ro_gui_dialog_close(dialog_401li); diff --git a/riscos/gui.c b/riscos/gui.c index eb635bdd9..7edd73cdb 100644 --- a/riscos/gui.c +++ b/riscos/gui.c @@ -1164,7 +1164,7 @@ void ro_msg_dataload(wimp_message *message) return; if (g) - browser_window_go(g->bw, url); + browser_window_go(g->bw, url, false); else browser_window_create(url, 0); diff --git a/riscos/history.c b/riscos/history.c index 87e420015..628409db5 100644 --- a/riscos/history.c +++ b/riscos/history.c @@ -663,7 +663,7 @@ void history_go(struct browser_window *bw, struct history_entry *entry) else url = entry->url; - browser_window_go_post(bw, url, 0, 0, false); + browser_window_go_post(bw, url, 0, 0, false, false); if (entry->frag_id) free(url); diff --git a/riscos/menus.c b/riscos/menus.c index 2fc45c7b5..616f48782 100644 --- a/riscos/menus.c +++ b/riscos/menus.c @@ -817,12 +817,12 @@ void ro_gui_menu_selection(wimp_selection *selection) switch (selection->items[1]) { case 0: /* Home */ if (option_homepage_url && option_homepage_url[0]) { - browser_window_go_post(current_gui->bw, option_homepage_url, 0, 0, true); + browser_window_go_post(current_gui->bw, option_homepage_url, 0, 0, true, false); } else { snprintf(url, sizeof url, "file:/<NetSurf$Dir>/Docs/intro_%s", option_language); - browser_window_go_post(current_gui->bw, url, 0, 0, true); + browser_window_go_post(current_gui->bw, url, 0, 0, true, false); } break; case 1: /* Back */ diff --git a/riscos/plugin.c b/riscos/plugin.c index 8801ac326..76213d1f5 100644 --- a/riscos/plugin.c +++ b/riscos/plugin.c @@ -730,7 +730,7 @@ void plugin_url_access(wimp_message *message) strcasecmp(window, "_parent") == 0 || strcasecmp(window, "_top") == 0 || strcasecmp(window, "") == 0) { - browser_window_go(c->data.plugin.bw, url); + browser_window_go(c->data.plugin.bw, url, false); } else if (strcasecmp(window, "_blank") == 0) { browser_window_create(url, NULL); diff --git a/riscos/window.c b/riscos/window.c index 0ca060353..dd0d9dfad 100644 --- a/riscos/window.c +++ b/riscos/window.c @@ -762,6 +762,20 @@ void gui_window_set_url(struct gui_window *g, const char *url) } } +/** + * Get the contents of a window's address bar. + * + * \param g gui_window to update + * \return The url in the address bar or NULL + */ +char *gui_window_get_url(struct gui_window *g) +{ + if (!g->toolbar) + return NULL; + + return ro_gui_get_icon_string(g->toolbar->toolbar_handle, + ICON_TOOLBAR_URL); +} /** * Forces all windows to be set to the current theme @@ -818,7 +832,7 @@ void ro_gui_window_update_dimensions(struct gui_window *g, int yscroll) { return; } state.yscroll -= yscroll; - g->old_height = -1; + g->old_height = -1; ro_gui_window_open(g, (wimp_open *)&state); /* gui_window_redraw_window(g); */ } @@ -1085,7 +1099,7 @@ void ro_gui_toolbar_click(struct gui_window *g, wimp_pointer *pointer) if (option_homepage_url && option_homepage_url[0]) { if (pointer->buttons == wimp_CLICK_SELECT) { browser_window_go_post(g->bw, option_homepage_url, - 0, 0, true); + 0, 0, true, false); } else { browser_window_create(option_homepage_url, NULL); } @@ -1094,7 +1108,7 @@ void ro_gui_toolbar_click(struct gui_window *g, wimp_pointer *pointer) "file:/<NetSurf$Dir>/Docs/intro_%s", option_language); if (pointer->buttons == wimp_CLICK_SELECT) { - browser_window_go_post(g->bw, url, 0, 0, true); + browser_window_go_post(g->bw, url, 0, 0, true, false); } else { browser_window_create(url, NULL); } @@ -1447,7 +1461,7 @@ bool ro_gui_window_keypress(struct gui_window *g, int key, bool toolbar) res = url_normalize(toolbar_url, &url); if (res == URL_FUNC_OK) { gui_window_set_url(g, url); - browser_window_go(g->bw, url); + browser_window_go(g->bw, url, false); free(url); } return true; |