From 3bfb5b96a7c7cb2718a60987e69cd659ed49b9d8 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Thu, 14 Feb 2013 15:09:28 +0000 Subject: browser_window_navigate refactor --- riscos/gui.c | 48 ++++++++++++++++++++++--------- riscos/gui/url_bar.c | 29 +++++++++++++++---- riscos/url_complete.c | 15 ++++++---- riscos/window.c | 80 ++++++++++++++++++++++++++++++++++++++++++++------- 4 files changed, 137 insertions(+), 35 deletions(-) (limited to 'riscos') diff --git a/riscos/gui.c b/riscos/gui.c index e786f67d8..a9827c707 100644 --- a/riscos/gui.c +++ b/riscos/gui.c @@ -1495,10 +1495,12 @@ void ro_msg_dataload(wimp_message *message) { int file_type = message->data.data_xfer.file_type; int tree_file_type = file_type; - char *url = 0; + char *urltxt = NULL; char *title = NULL; struct gui_window *g; os_error *error; + nsurl *url; + nserror nserror; g = ro_gui_window_lookup(message->data.data_xfer.w); if (g) { @@ -1513,16 +1515,16 @@ void ro_msg_dataload(wimp_message *message) switch (file_type) { case FILETYPE_ACORN_URI: - url = ro_gui_uri_file_parse(message->data.data_xfer.file_name, + urltxt = ro_gui_uri_file_parse(message->data.data_xfer.file_name, &title); tree_file_type = 0xfaf; break; case FILETYPE_ANT_URL: - url = ro_gui_url_file_parse(message->data.data_xfer.file_name); + urltxt = ro_gui_url_file_parse(message->data.data_xfer.file_name); tree_file_type = 0xfaf; break; case FILETYPE_IEURL: - url = ro_gui_ieurl_file_parse(message->data.data_xfer.file_name); + urltxt = ro_gui_ieurl_file_parse(message->data.data_xfer.file_name); tree_file_type = 0xfaf; break; @@ -1541,27 +1543,47 @@ void ro_msg_dataload(wimp_message *message) case FILETYPE_ARTWORKS: case FILETYPE_SVG: /* display the actual file */ - url = path_to_url(message->data.data_xfer.file_name); + urltxt = path_to_url(message->data.data_xfer.file_name); break; default: return; } - if (!url) + if (!urltxt) /* error has already been reported by one of the * functions called above */ return; - if (g) { - browser_window_go(g->bw, url, 0, true); -// } else if (ro_gui_hotlist_check_window(message->data.data_xfer.w)) { -// /* Drop URL into hotlist */ -// ro_gui_hotlist_url_drop(message, url); + + nserror = nsurl_create(urltxt, &url); + if (nserror != NSERROR_OK) { + warn_user(messages_get_errorcode(nserror), 0); } else { - browser_window_create(url, 0, 0, true, false); + if (g) { + browser_window_navigate(g->bw, + url, + NULL, + BROWSER_WINDOW_GO_FLAG_HISTORY | + BROWSER_WINDOW_GO_FLAG_VERIFIABLE, + NULL, + NULL, + NULL); + +#if DROPURLHOTLIST /** @todo This was commented out should it be removed? */ + } else if (ro_gui_hotlist_check_window(message->data.data_xfer.w)) { + /* Drop URL into hotlist */ + ro_gui_hotlist_url_drop(message, urltxt); +#endif + + } else { + browser_window_create(url, NULL, NULL, true, false); + } + + nsurl_unref(url); } + /* send DataLoadAck */ message->action = message_DATA_LOAD_ACK; message->your_ref = message->my_ref; @@ -1573,7 +1595,7 @@ void ro_msg_dataload(wimp_message *message) return; } - free(url); + free(urltxt); } diff --git a/riscos/gui/url_bar.c b/riscos/gui/url_bar.c index 74fe2806b..eb3483d91 100644 --- a/riscos/gui/url_bar.c +++ b/riscos/gui/url_bar.c @@ -690,19 +690,36 @@ bool ro_gui_url_bar_menu_prepare(struct url_bar *url_bar, wimp_i i, bool ro_gui_url_bar_menu_select(struct url_bar *url_bar, wimp_i i, wimp_menu *menu, wimp_selection *selection, menu_action action) { - const char *url; - struct gui_window *g; + const char *urltxt; + struct gui_window *g; if (url_bar == NULL || url_bar->suggest_icon != i || menu != ro_gui_url_suggest_menu) return false; - url = ro_gui_url_suggest_get_selection(selection); + urltxt = ro_gui_url_suggest_get_selection(selection); g = ro_gui_toolbar_lookup(url_bar->window); - if (url != NULL && g != NULL && g->bw != NULL) { - gui_window_set_url(g, url); - browser_window_go(g->bw, url, 0, true); + if (urltxt != NULL && g != NULL && g->bw != NULL) { + nsurl *url; + nserror error; + + gui_window_set_url(g, urltxt); + + error = nsurl_create(urltxt, &url); + if (error != NSERROR_OK) { + warn_user(messages_get_errorcode(error), 0); + } else { + browser_window_navigate(g->bw, + url, + NULL, + BROWSER_WINDOW_GO_FLAG_HISTORY | + BROWSER_WINDOW_GO_FLAG_VERIFIABLE, + NULL, + NULL, + NULL); + nsurl_unref(url); + } } return true; diff --git a/riscos/url_complete.c b/riscos/url_complete.c index 4d5f9d213..b804f741a 100644 --- a/riscos/url_complete.c +++ b/riscos/url_complete.c @@ -709,17 +709,22 @@ bool ro_gui_url_complete_click(wimp_pointer *pointer) /** \todo The interaction of components here is hideous */ /* Do NOT make any attempt to use any of the global url - * completion variables after this call to browser_window_go. + * completion variables after this call to browser_window_navigate. * They will be invalidated by (at least): * + gui_window_set_url * + destruction of (i)frames within the current page * Any attempt to use them will probably result in a crash. */ - browser_window_go(g->bw, - nsurl_access(url_complete_matches[ - url_complete_matches_selection]), - 0, true); + browser_window_navigate(g->bw, + url_complete_matches[url_complete_matches_selection], + NULL, + BROWSER_WINDOW_GO_FLAG_HISTORY | + BROWSER_WINDOW_GO_FLAG_VERIFIABLE, + NULL, + NULL, + NULL); + ro_gui_url_complete_close(); /* Adjust just sets the text */ diff --git a/riscos/window.c b/riscos/window.c index 2ad5426e7..a0a64a17f 100644 --- a/riscos/window.c +++ b/riscos/window.c @@ -2763,9 +2763,24 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu, } break; case BROWSER_LINK_DOWNLOAD: - if (current_menu_url != NULL) - browser_window_download(bw, current_menu_url, - nsurl_access(hlcache_handle_get_url(h))); + if (current_menu_url != NULL) { + nsurl *url; + nserror error; + + error = nsurl_create(current_menu_url, &url); + if (error != NSERROR_OK) { + warn_user(messages_get_errorcode(error), 0); + } else { + browser_window_navigate(bw, + url, + hlcache_handle_get_url(h), + BROWSER_WINDOW_GO_FLAG_DOWNLOAD | + BROWSER_WINDOW_GO_FLAG_VERIFIABLE, + NULL, + NULL, + NULL); + nsurl_unref(url); + } break; case BROWSER_LINK_NEW_WINDOW: if (current_menu_url != NULL) @@ -3845,16 +3860,34 @@ void ro_gui_window_prepare_objectinfo(hlcache_handle *object, const char *href) * \param url url to be launched */ -void ro_gui_window_launch_url(struct gui_window *g, const char *url) +void ro_gui_window_launch_url(struct gui_window *g, const char *url1) { - char *url2; + char *url2; /** @todo The risc os maintainer needs to examine why the url is copied here */ + nsurl *url; + nserror error; ro_gui_url_complete_close(); - url2 = strdup(url); + url2 = strdup(url1); if (url2 != NULL) { + gui_window_set_url(g, url2); - browser_window_go(g->bw, url2, 0, true); + + error = nsurl_create(url2, &url); + if (error != NSERROR_OK) { + warn_user(messages_get_errorcode(error), 0); + } else { + browser_window_navigate(g->bw, + url, + NULL, + BROWSER_WINDOW_GO_FLAG_HISTORY | + BROWSER_WINDOW_GO_FLAG_VERIFIABLE, + NULL, + NULL, + NULL); + nsurl_unref(url); + } + free(url2); } } @@ -3885,7 +3918,14 @@ bool ro_gui_window_navigate_up(struct gui_window *g, const char *url) } if (nsurl_compare(current, parent, NSURL_COMPLETE) == false) { - browser_window_go(g->bw, nsurl_access(parent), 0, true); + browser_window_navigate(g->bw, + parent, + NULL, + BROWSER_WINDOW_GO_FLAG_HISTORY | + BROWSER_WINDOW_GO_FLAG_VERIFIABLE, + NULL, + NULL, + NULL); } nsurl_unref(current); @@ -3902,14 +3942,32 @@ bool ro_gui_window_navigate_up(struct gui_window *g, const char *url) void ro_gui_window_action_home(struct gui_window *g) { + static const char *addr = NETSURF_HOMEPAGE; + nsurl *url; + nserror error; + if (g == NULL || g->bw == NULL) return; - if ((nsoption_charp(homepage_url)) && (nsoption_charp(homepage_url)[0])) { - browser_window_go(g->bw, nsoption_charp(homepage_url), 0, true); + if (nsoption_charp(homepage_url) != NULL) { + addr = nsoption_charp(homepage_url); + } + + error = nsurl_create(addr, &url); + if (error != NSERROR_OK) { + warn_user(messages_get_errorcode(error), 0); } else { - browser_window_go(g->bw, NETSURF_HOMEPAGE, 0, true); + browser_window_navigate(g->bw, + url, + NULL, + BROWSER_WINDOW_GO_FLAG_HISTORY | + BROWSER_WINDOW_GO_FLAG_VERIFIABLE, + NULL, + NULL, + NULL); + nsurl_unref(url); } + } -- cgit v1.2.3