summaryrefslogtreecommitdiff
path: root/riscos
diff options
context:
space:
mode:
authorVincent Sanders <vince@netsurf-browser.org>2013-02-14 15:09:28 +0000
committerVincent Sanders <vince@netsurf-browser.org>2013-02-18 11:23:27 +0000
commit3bfb5b96a7c7cb2718a60987e69cd659ed49b9d8 (patch)
tree40aa4e52aa50010c8f7c47dda79be2b77339e546 /riscos
parentc545bb4b42dff8bfd4c288e330f52848ec2df6c4 (diff)
downloadnetsurf-3bfb5b96a7c7cb2718a60987e69cd659ed49b9d8.tar.gz
netsurf-3bfb5b96a7c7cb2718a60987e69cd659ed49b9d8.tar.bz2
browser_window_navigate refactor
Diffstat (limited to 'riscos')
-rw-r--r--riscos/gui.c48
-rw-r--r--riscos/gui/url_bar.c29
-rw-r--r--riscos/url_complete.c15
-rw-r--r--riscos/window.c80
4 files changed, 137 insertions, 35 deletions
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);
}
+
}