summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xamiga/arexx.c22
-rwxr-xr-xamiga/context_menu.c36
-rwxr-xr-xamiga/gui.c201
-rwxr-xr-xamiga/menu.c60
-rw-r--r--atari/ctxmenu.c34
-rw-r--r--atari/deskmenu.c80
-rw-r--r--atari/gui.c30
-rw-r--r--beos/gui.cpp29
-rw-r--r--beos/scaffolding.cpp52
-rw-r--r--cocoa/BookmarksController.m19
-rw-r--r--cocoa/BrowserView.m35
-rw-r--r--cocoa/BrowserWindowController.m22
-rw-r--r--cocoa/NetSurfAppDelegate.m80
-rw-r--r--cocoa/NetsurfApp.m18
-rw-r--r--desktop/browser.c80
-rw-r--r--desktop/browser.h26
-rw-r--r--desktop/history_core.c7
-rw-r--r--desktop/searchweb.c30
-rw-r--r--desktop/tree_url_node.c54
-rw-r--r--framebuffer/gui.c23
-rw-r--r--gtk/dialogs/source.c20
-rw-r--r--gtk/gui.c35
-rw-r--r--gtk/scaffolding.c108
-rw-r--r--monkey/browser.c24
-rw-r--r--riscos/dialog.c34
-rw-r--r--riscos/gui.c82
-rw-r--r--riscos/iconbar.c23
-rw-r--r--riscos/uri.c17
-rw-r--r--riscos/url_protocol.c16
-rw-r--r--riscos/window.c293
-rw-r--r--windows/gui.c6
-rw-r--r--windows/main.c27
32 files changed, 1277 insertions, 346 deletions
diff --git a/amiga/arexx.c b/amiga/arexx.c
index 66b1ad88e..606f348cb 100755
--- a/amiga/arexx.c
+++ b/amiga/arexx.c
@@ -257,11 +257,22 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
}
else if(cmd->ac_ArgList[2])
{
- browser_window_create(url, NULL, NULL, true, true);
+ browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY |
+ BROWSER_WINDOW_GO_FLAG_TAB,
+ url,
+ NULL,
+ NULL,
+ NULL);
}
else if(cmd->ac_ArgList[1])
{
- browser_window_create(url, NULL, NULL, true, false);
+ browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
}
else
{
@@ -278,7 +289,12 @@ STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unu
}
else
{
- browser_window_create(url, NULL, NULL, true, false);
+ browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
}
}
nsurl_unref(url);
diff --git a/amiga/context_menu.c b/amiga/context_menu.c
index 952d5c2c8..2091f55ca 100755
--- a/amiga/context_menu.c
+++ b/amiga/context_menu.c
@@ -718,6 +718,8 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
const char *source_data;
ULONG source_size;
struct bitmap *bm;
+ nsurl *url;
+ nserror error;
if(GetAttrs(item,PMIA_ID,&itemid,
PMIA_UserData,&userdata,
@@ -776,14 +778,40 @@ static uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved
case CMID_FRAMEWIN:
case CMID_URLOPENWIN:
- bw = browser_window_create(userdata, gwin->bw,
- nsurl_access(hlcache_handle_get_url(gwin->bw->current_content)), true, false);
+ error = nsurl_create(userdata, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ hlcache_handle_get_url(gwin->bw->current_content),
+ gwin->bw,
+ &bw);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+
+
break;
case CMID_FRAMETAB:
case CMID_URLOPENTAB:
- bw = browser_window_create(userdata, gwin->bw,
- nsurl_access(hlcache_handle_get_url(gwin->bw->current_content)), true, true);
+ error = nsurl_create(userdata, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY |
+ BROWSER_WINDOW_GO_FLAG_TAB,
+ url,
+ hlcache_handle_get_url(gwin->bw->current_content),
+ gwin->bw,
+ &bw);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+
break;
case CMID_FRAMESAVE:
diff --git a/amiga/gui.c b/amiga/gui.c
index 62aa87713..0269fa0e5 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -686,6 +686,8 @@ void ami_openscreenfirst(void)
static void gui_init2(int argc, char** argv)
{
+ nsurl *url;
+ nserror error;
struct browser_window *bw = NULL;
struct RDArgs *args;
STRPTR temp_homepage_url = NULL;
@@ -726,7 +728,20 @@ static void gui_init2(int argc, char** argv)
if(notalreadyrunning)
{
- bw = browser_window_create(temp_homepage_url, 0, 0, true,false);
+ error = nsurl_create(temp_homepage_url, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ &bw);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+
free(temp_homepage_url);
}
}
@@ -762,14 +777,36 @@ static void gui_init2(int argc, char** argv)
if(notalreadyrunning)
{
- if(!first)
- {
- bw = browser_window_create(temp_homepage_url, 0, 0, true,false);
- first=1;
+ error = nsurl_create(temp_homepage_url, &url);
+
+
+ if (error == NSERROR_OK) {
+ if(!first)
+ {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ &bw);
+
+ first=1;
+ }
+ else
+ {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ bw,
+ &bw);
+
+ }
+ nsurl_unref(url);
+
}
- else
- {
- bw = browser_window_create(temp_homepage_url, bw, 0, true,false);
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
}
free(temp_homepage_url);
temp_homepage_url = NULL;
@@ -841,8 +878,21 @@ static void gui_init2(int argc, char** argv)
if(applibport) applibsig = (1L << applibport->mp_SigBit);
}
- if(!bw && (nsoption_bool(startup_no_window) == false))
- bw = browser_window_create(nsoption_charp(homepage_url), 0, 0, true,false);
+ if(!bw && (nsoption_bool(startup_no_window) == false)) {
+ error = nsurl_create(nsoption_charp(homepage_url), &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+ }
}
/** Normal entry point from OS */
@@ -1622,7 +1672,25 @@ void ami_handle_msg(void)
break;
case GID_ADDTAB:
- browser_window_create(nsoption_charp(homepage_url), gwin->bw, 0, true, true);
+ {
+ nsurl *urlns;
+ nserror error;
+
+ error = nsurl_create(nsoption_charp(homepage_url), &urlns);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY |
+ BROWSER_WINDOW_GO_FLAG_TAB,
+ urlns,
+ NULL,
+ gwin->bw,
+ NULL);
+ nsurl_unref(urlns);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+ }
break;
case GID_URL:
@@ -1756,15 +1824,47 @@ void ami_handle_msg(void)
switch(nskey)
{
case 'n':
- if ((nsoption_bool(kiosk_mode) == false))
- browser_window_create(nsoption_charp(homepage_url), NULL,
- 0, true, false);
+ if ((nsoption_bool(kiosk_mode) == false)) {
+ nsurl *urlns;
+ nserror error;
+
+ error = nsurl_create(nsoption_charp(homepage_url), &urlns);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ urlns,
+ NULL,
+ gwin->bw,
+ NULL);
+ nsurl_unref(urlns);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+
+ }
break;
case 't':
- if((nsoption_bool(kiosk_mode) == false))
- browser_window_create(nsoption_charp(homepage_url),
- gwin->bw, 0, true, true);
+ if((nsoption_bool(kiosk_mode) == false)) {
+ nsurl *urlns;
+ nserror error;
+
+ error = nsurl_create(nsoption_charp(homepage_url), &urlns);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ urlns,
+ NULL,
+ gwin->bw,
+ NULL);
+ nsurl_unref(urlns);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+
+ }
break;
case 'k':
@@ -2139,7 +2239,13 @@ void ami_handle_appmsg(void)
}
else
{
- browser_window_create(url, NULL, gwin->bw, true, true);
+ browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY |
+ BROWSER_WINDOW_GO_FLAG_TAB,
+ url,
+ NULL,
+ gwin->bw,
+ NULL);
}
nsurl_unref(url);
}
@@ -2174,7 +2280,14 @@ void ami_handle_appmsg(void)
}
else
{
- browser_window_create(url, NULL, gwin->bw, true, true);
+ browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY |
+ BROWSER_WINDOW_GO_FLAG_TAB,
+ url,
+ NULL,
+ gwin->bw,
+ NULL);
+
}
nsurl_unref(url);
}
@@ -2197,6 +2310,8 @@ void ami_handle_applib(void)
{
struct ApplicationMsg *applibmsg;
struct browser_window *bw;
+ nsurl *url;
+ nserror error;
if(!applibport) return;
@@ -2205,7 +2320,22 @@ void ami_handle_applib(void)
switch (applibmsg->type)
{
case APPLIBMT_NewBlankDoc:
- bw = browser_window_create(nsoption_charp(homepage_url), 0, 0, true, false);
+ {
+
+ error = nsurl_create(nsoption_charp(homepage_url), &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ &bw);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+ }
break;
case APPLIBMT_OpenDoc:
@@ -2215,7 +2345,20 @@ void ami_handle_applib(void)
char *tempurl;
tempurl = path_to_url(applibopdmsg->fileName);
- bw = browser_window_create(tempurl, 0, 0, true, false);
+
+ error = nsurl_create(tempurl, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ &bw);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
free(tempurl);
}
break;
@@ -2229,7 +2372,21 @@ void ami_handle_applib(void)
}
else
{
- bw = browser_window_create(nsoption_charp(homepage_url), 0, 0, true, false);
+ error = nsurl_create(nsoption_charp(homepage_url), &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ &bw);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+
+
}
break;
diff --git a/amiga/menu.c b/amiga/menu.c
index f480b3f69..a5fe4c342 100755
--- a/amiga/menu.c
+++ b/amiga/menu.c
@@ -700,18 +700,46 @@ void ami_menu_update_disabled(struct gui_window *g, hlcache_handle *c)
static void ami_menu_item_project_newwin(struct Hook *hook, APTR window, struct IntuiMessage *msg)
{
- struct browser_window *bw;
+ nsurl *url;
+ nserror error;
- bw = browser_window_create(nsoption_charp(homepage_url), NULL, 0, true, false);
+ error = nsurl_create(nsoption_charp(homepage_url), &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
static void ami_menu_item_project_newtab(struct Hook *hook, APTR window, struct IntuiMessage *msg)
{
- struct browser_window *bw;
struct gui_window_2 *gwin;
+ nsurl *url;
+ nserror error;
GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
- bw = browser_window_create(nsoption_charp(homepage_url), gwin->bw, 0, true, true);
+
+ error = nsurl_create(nsoption_charp(homepage_url), &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY |
+ BROWSER_WINDOW_GO_FLAG_TAB,
+ url,
+ NULL,
+ gwin->bw,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
static void ami_menu_item_project_open(struct Hook *hook, APTR window, struct IntuiMessage *msg)
@@ -763,6 +791,8 @@ static void ami_menu_item_project_about(struct Hook *hook, APTR window, struct I
struct gui_window_2 *gwin;
char *temp, *temp2;
int sel;
+ nsurl *url;
+ nserror error;
GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
@@ -795,10 +825,24 @@ static void ami_menu_item_project_about(struct Hook *hook, APTR window, struct I
free(temp2);
- if(sel == 2)
- browser_window_create("about:credits", NULL, 0, true, false);
- else if(sel == 0)
- browser_window_create("about:licence", NULL, 0, true, false);
+ if(sel == 2) {
+ error = nsurl_create("about:credits", &url);
+ } else if(sel == 0) {
+ error = nsurl_create("about:licence", &url);
+ }
+
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
ami_reset_pointer(gwin);
}
diff --git a/atari/ctxmenu.c b/atari/ctxmenu.c
index 859aeea5b..2a6d6e2ba 100644
--- a/atari/ctxmenu.c
+++ b/atari/ctxmenu.c
@@ -208,10 +208,11 @@ void context_popup(struct gui_window * gw, short x, short y)
case POP_CTX_SAVE_LINK_AS:
if (ctx->ccdata.link_url != NULL) {
nsurl *url;
- if (nsurl_create(ctx->ccdata.link_url, &url) != NSERROR_OK) {
- warn_user("NoMemory", 0);
- } else {
- browser_window_navigate(
+ nserror error;
+
+ error = nsurl_create(ctx->ccdata.link_url, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_navigate(
gw->browser->bw,
url,
hlcache_handle_get_url(gw->browser->bw->current_content),
@@ -223,6 +224,9 @@ void context_popup(struct gui_window * gw, short x, short y)
);
nsurl_unref(url);
}
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
break;
@@ -244,12 +248,22 @@ void context_popup(struct gui_window * gw, short x, short y)
case POP_CTX_OPEN_NEW:
if ((ctx->flags & CNT_HREF) && ctx->ccdata.link_url) {
- browser_window_create(
- ctx->ccdata.link_url,
- gw->browser->bw,
- nsurl_access(hlcache_handle_get_url(gw->browser->bw->current_content)),
- true, false
- );
+ nsurl *url;
+ nserror error;
+
+ error = nsurl_create(ctx->ccdata.link_url, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ hlcache_handle_get_url(gw->browser->bw->current_content),
+ gw->browser->bw
+ );
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
break;
diff --git a/atari/deskmenu.c b/atari/deskmenu.c
index df31ba012..0cb8409b9 100644
--- a/atari/deskmenu.c
+++ b/atari/deskmenu.c
@@ -148,18 +148,59 @@ static void __CDECL evnt_menu(WINDOW * win, short buff[8])
static void __CDECL menu_about(short item, short title, void *data)
{
- LOG(("%s", __FUNCTION__));
+ nsurl *url;
+ nserror error;
char buf[PATH_MAX];
+
+ LOG(("%s", __FUNCTION__));
strcpy((char*)&buf, "file://");
strncat((char*)&buf, (char*)"./doc/README.TXT",
PATH_MAX - (strlen("file://")+1) );
- browser_window_create((char*)&buf, 0, 0, true, false);
+
+ error = nsurl_create(buf, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
static void __CDECL menu_new_win(short item, short title, void *data)
{
+ nsurl *url;
+ nserror error;
+ const char *addr;
+
LOG(("%s", __FUNCTION__));
- browser_window_create(option_homepage_url, 0, 0, true, false);
+
+ if (nsoption_charp(homepage_url) != NULL) {
+ addr = nsoption_charp(homepage_url);
+ } else {
+ addr = NETSURF_HOMEPAGE;
+ }
+
+ /* create an initial browser window */
+ error = nsurl_create(addr, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
static void __CDECL menu_open_url(short item, short title, void *data)
@@ -170,7 +211,12 @@ static void __CDECL menu_open_url(short item, short title, void *data)
gw = input_window;
if( gw == NULL ) {
- bw = browser_window_create("", 0, 0, true, false);
+ browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ NULL,
+ NULL,
+ NULL,
+ &bw);
gw = bw->window;
}
/* Loose focus: */
@@ -185,17 +231,31 @@ static void __CDECL menu_open_url(short item, short title, void *data)
static void __CDECL menu_open_file(short item, short title, void *data)
{
- struct gui_window * gw;
- struct browser_window * bw ;
LOG(("%s", __FUNCTION__));
const char * filename = file_select(messages_get("OpenFile"), "");
if( filename != NULL ){
- char * url = local_file_to_url( filename );
- if( url ){
- bw = browser_window_create(url, NULL, NULL, true, false);
- free( url );
+ char * urltxt = local_file_to_url( filename );
+ if( urltxt ){
+ nsurl *url;
+ nserror error;
+
+ error = nsurl_create(urltxt, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+ free( urltxt );
}
}
}
diff --git a/atari/gui.c b/atari/gui.c
index a59caa8e5..4a0c70537 100644
--- a/atari/gui.c
+++ b/atari/gui.c
@@ -1027,6 +1027,9 @@ static void gui_init2(int argc, char** argv)
int main(int argc, char** argv)
{
char messages[PATH_MAX];
+ const char *addr;
+ nsurl *url;
+ nserror error;
setbuf(stderr, NULL);
setbuf(stdout, NULL);
@@ -1056,10 +1059,29 @@ int main(int argc, char** argv)
graf_mouse( ARROW , NULL);
LOG(("Creating initial browser window..."));
- browser_window_create(option_homepage_url, 0, 0, true, false);
-
- LOG(("Entering NetSurf mainloop..."));
- netsurf_main_loop();
+ if (nsoption_charp(homepage_url) != NULL) {
+ addr = nsoption_charp(homepage_url);
+ } else {
+ addr = NETSURF_HOMEPAGE;
+ }
+
+ /* create an initial browser window */
+ error = nsurl_create(addr, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ } else {
+ LOG(("Entering NetSurf mainloop..."));
+ netsurf_main_loop();
+ }
netsurf_exit();
LOG(("ApplExit"));
diff --git a/beos/gui.cpp b/beos/gui.cpp
index c556d45e5..3a164133f 100644
--- a/beos/gui.cpp
+++ b/beos/gui.cpp
@@ -426,14 +426,33 @@ nsurl *gui_get_resource_url(const char *path)
static void gui_init2(int argc, char** argv)
{
- const char *addr = NETSURF_HOMEPAGE;
+ const char *addr;
+ nsurl *url;
+ nserror error;
- if (nsoption_charp(homepage_url) != NULL)
+ if (argc > 1) {
+ addr = argv[1];
+ } else if (nsoption_charp(homepage_url) != NULL) {
addr = nsoption_charp(homepage_url);
+ } else {
+ addr = NETSURF_HOMEPAGE;
+ }
+
+ /* create an initial browser window */
+ error = nsurl_create(addr, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
- if (argc > 1) addr = argv[1];
- if (gFirstRefsReceived) addr = NULL;
- browser_window_create(addr, 0, 0, true, false);
if (gFirstRefsReceived) {
// resend the refs we got before having a window to send them to
be_app_messenger.SendMessage(gFirstRefsReceived);
diff --git a/beos/scaffolding.cpp b/beos/scaffolding.cpp
index 0a337685d..53a4a7b5b 100644
--- a/beos/scaffolding.cpp
+++ b/beos/scaffolding.cpp
@@ -786,9 +786,7 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
nserror error;
error = nsurl_create(url.String(), &nsurl);
- if (error != NSERROR_OK) {
- warn_user(messages_get_errorcode(error), 0);
- } else {
+ if (error == NSERROR_OK) {
if (/*message->WasDropped() &&*/ i == 0) {
browser_window_navigate(bw,
nsurl,
@@ -799,21 +797,40 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
NULL,
NULL);
} else {
- browser_window_create(nsurl, NULL, bw, false, false);
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE,
+ nsurl,
+ NULL,
+ bw,
+ NULL);
}
nsurl_unref(nsurl);
}
-
-
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
break;
}
case B_ARGV_RECEIVED:
{
int32 i;
- BString url;
- for (i = 1; message->FindString("argv", i, &url) >= B_OK; i++) {
- browser_window_create(url.String(), bw, NULL, false, false);
+ BString urltxt;
+ nsurl *url;
+ nserror error;
+
+ for (i = 1; message->FindString("argv", i, &urltxt) >= B_OK; i++) {
+ error = nsurl_create(urltxt.String(), &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE,
+ url,
+ NULL,
+ bw,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
break;
}
@@ -1010,13 +1027,28 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m
case BROWSER_NEW_WINDOW:
{
BString text;
+ nsurl *url;
+ nserror error;
+
if (!scaffold->url_bar->LockLooper())
break;
text = scaffold->url_bar->Text();
scaffold->url_bar->UnlockLooper();
NSBrowserWindow::activeWindow = scaffold->window;
- browser_window_create(text.String(), bw, NULL, false, false);
+
+ error = nsurl_create(text.String(), &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE,
+ url,
+ NULL,
+ bw,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
break;
}
case BROWSER_VIEW_SOURCE:
diff --git a/cocoa/BookmarksController.m b/cocoa/BookmarksController.m
index bb43b2fde..830c054a7 100644
--- a/cocoa/BookmarksController.m
+++ b/cocoa/BookmarksController.m
@@ -135,12 +135,10 @@ static const char *cocoa_hotlist_path( void )
nserror error;
error = nsurl_create(urltxt, &url);
- if (error != NSERROR_OK) {
- warn_user(messages_get_errorcode(error), 0);
- } else {
+ if (error == NSERROR_OK) {
BrowserViewController *tab = [(NetSurfApp *)NSApp frontTab];
if (tab != nil) {
- browser_window_navigate([tab browser],
+ error = browser_window_navigate([tab browser],
url,
NULL,
BROWSER_WINDOW_GO_FLAG_HISTORY |
@@ -149,13 +147,18 @@ static const char *cocoa_hotlist_path( void )
NULL,
NULL);
} else {
- browser_window_create( url, NULL, NULL, true, false );
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
}
-
nsurl_unref(url);
}
-
-
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
- (IBAction) addBookmark: (id) sender;
diff --git a/cocoa/BrowserView.m b/cocoa/BrowserView.m
index 63efac468..aed2230b9 100644
--- a/cocoa/BrowserView.m
+++ b/cocoa/BrowserView.m
@@ -575,12 +575,43 @@ static browser_mouse_state cocoa_mouse_flags_for_event( NSEvent *evt )
- (IBAction) cmOpenURLInTab: (id) sender;
{
- browser_window_create( [[sender representedObject] UTF8String], browser, NULL, true, true );
+ nsurl *url;
+ nserror error;
+
+ error = nsurl_create([[sender representedObject] UTF8String], &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY |
+ BROWSER_WINDOW_GO_FLAG_TAB,
+ url,
+ NULL,
+ browser,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
- (IBAction) cmOpenURLInWindow: (id) sender;
{
- browser_window_create( [[sender representedObject] UTF8String], browser, NULL, true, false );
+ nsurl *url;
+ nserror error;
+
+ error = nsurl_create([[sender representedObject] UTF8String], &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ browser,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
- (IBAction) cmDownloadURL: (id) sender;
diff --git a/cocoa/BrowserWindowController.m b/cocoa/BrowserWindowController.m
index b709ec613..771ae0841 100644
--- a/cocoa/BrowserWindowController.m
+++ b/cocoa/BrowserWindowController.m
@@ -150,7 +150,27 @@
- (IBAction) newTab: (id) sender;
{
- browser_window_create( nsoption_charp(homepage_url), [activeBrowser browser], NULL, false, true );
+ nsurl *url;
+ nserror error;
+
+ if (nsoption_charp(homepage_url) != NULL) {
+ error = nsurl_create(nsoption_charp(homepage_url), &url);
+ } else {
+ error = nsurl_create(NETSURF_HOMEPAGE, &url);
+ }
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY |
+ BROWSER_WINDOW_GO_FLAG_TAB,
+ url,
+ NULL,
+ [activeBrowser browser],
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
- (IBAction) closeCurrentTab: (id) sender;
diff --git a/cocoa/NetSurfAppDelegate.m b/cocoa/NetSurfAppDelegate.m
index 651df1259..ba8678d42 100644
--- a/cocoa/NetSurfAppDelegate.m
+++ b/cocoa/NetSurfAppDelegate.m
@@ -39,24 +39,74 @@
- (void) newDocument: (id) sender;
{
- browser_window_create( nsoption_charp(homepage_url), NULL, NULL, true, false );
+ nsurl *url;
+ nserror error;
+
+ if (nsoption_charp(homepage_url) != NULL) {
+ error = nsurl_create(nsoption_charp(homepage_url), &url);
+ } else {
+ error = nsurl_create(NETSURF_HOMEPAGE, &url);
+ }
+
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
- (void) openDocument: (id) sender;
{
+ nsurl *url;
+ nserror error;
+
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setAllowsMultipleSelection: YES];
if ([openPanel runModalForTypes: nil] == NSOKButton) {
for (NSURL *url in [openPanel URLs]) {
- browser_window_create( [[url absoluteString] UTF8String], NULL, NULL, true, false );
+ error = nsurl_create([[url absoluteString] UTF8String], &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
}
}
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
- NSString *urlAsString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
- browser_window_create( [urlAsString UTF8String], NULL, NULL, true, false );
+ nsurl *url;
+ nserror error;
+ NSString *urlAsString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
+
+ error = nsurl_create([urlAsString UTF8String], &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
- (IBAction) showSearchWindow: (id) sender;
@@ -124,9 +174,25 @@
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
- NSURL *url = [NSURL fileURLWithPath: filename];
- browser_window_create( [[url absoluteString] UTF8String], NULL, NULL, true, false );
- return YES;
+ nsurl *url;
+ nserror error;
+ NSURL *urltxt = [NSURL fileURLWithPath: filename];
+
+ error = nsurl_create([[urltxt absoluteString] UTF8String], &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+
+ return YES;
}
diff --git a/cocoa/NetsurfApp.m b/cocoa/NetsurfApp.m
index 4c2dfc185..b9cf4b999 100644
--- a/cocoa/NetsurfApp.m
+++ b/cocoa/NetsurfApp.m
@@ -175,6 +175,9 @@ void gui_options_init_defaults(void)
int main( int argc, char **argv )
{
+ nsurl *url;
+ nserror error;
+
cocoa_autorelease();
const char * const messages = [[[NSBundle mainBundle] pathForResource: @"Messages" ofType: @""] UTF8String];
@@ -193,7 +196,20 @@ int main( int argc, char **argv )
/* skip -psn_* and other possible options */
if (argv[i][0] == '-')
continue;
- browser_window_create( argv[i], NULL, NULL, true, false );
+
+ error = nsurl_create(argv[i], &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
[app run];
diff --git a/desktop/browser.c b/desktop/browser.c
index c373e84e3..42b9a1398 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -659,34 +659,29 @@ void browser_window_debug_dump(struct browser_window *bw, FILE *f)
}
-/**
- * Create and open a new root browser window with the given page.
- *
- * \param url URL to start fetching in the new window
- * \param referer The referring uri or NULL if none
- * \param clone The browser window to clone
- * \param history_add add to history
- * \param new_tab create a new tab
- * \return new browser window or NULL on error
- */
+/* exported interface, documented in desktop/browser.h */
-struct browser_window *
-browser_window_create(nsurl *url,
- nsurl *referer,
+nserror
+browser_window_create(enum browser_window_nav_flags flags,
+ nsurl *url,
+ nsurl *referrer,
struct browser_window *clone,
- bool history_add,
- bool new_tab)
+ struct browser_window **ret_bw)
{
struct browser_window *bw;
struct browser_window *top;
- assert(clone || history_add);
+ /* caller must provide window to clone or be adding to history */
+ assert(clone ||
+ ((flags & BROWSER_WINDOW_GO_FLAG_HISTORY) != 0));
- if ((bw = calloc(1, sizeof *bw)) == NULL) {
+
+ if ((bw = calloc(1, sizeof(struct browser_window))) == NULL) {
warn_user("NoMemory", 0);
- return NULL;
+ return NSERROR_NOMEM;
}
+ /* new javascript context for window */
bw->jsctx = js_newcontext();
/* Initialise common parts */
@@ -705,23 +700,25 @@ browser_window_create(nsurl *url,
* so find that. */
top = browser_window_get_root(clone);
- bw->window = gui_create_browser_window(bw, top, new_tab);
+ bw->window = gui_create_browser_window(bw,
+ top,
+ ((flags & BROWSER_WINDOW_GO_FLAG_TAB) != 0));
if (bw->window == NULL) {
browser_window_destroy(bw);
- return NULL;
+ return NSERROR_BAD_PARAMETER;
}
if (url != NULL) {
- enum browser_window_nav_flags flags;
- flags = BROWSER_WINDOW_GO_FLAG_VERIFIABLE;
- if (history_add) {
- flags |= BROWSER_WINDOW_GO_FLAG_HISTORY;
- }
- browser_window_navigate(bw, url, referer, flags, NULL, NULL, NULL);
+ flags |= BROWSER_WINDOW_GO_FLAG_VERIFIABLE;
+ browser_window_navigate(bw, url, referrer, flags, NULL, NULL, NULL);
}
- return bw;
+ if (ret_bw != NULL) {
+ *ret_bw = bw;
+ }
+
+ return NSERROR_OK;
}
@@ -2315,6 +2312,7 @@ struct browser_window *browser_window_find_target(struct browser_window *bw,
struct browser_window *top;
hlcache_handle *c;
int rdepth;
+ nserror error;
/* use the base target if we don't have one */
c = bw->current_content;
@@ -2353,9 +2351,15 @@ struct browser_window *browser_window_find_target(struct browser_window *bw,
* OR
* - button_2 opens in new tab and the link target is "_blank"
*/
- bw_target = browser_window_create(NULL, NULL, bw, false, true);
- if (!bw_target)
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_TAB,
+ NULL,
+ NULL,
+ bw,
+ &bw_target);
+ if (error != NSERROR_OK) {
return bw;
+ }
return bw_target;
} else if (((!nsoption_bool(button_2_tab)) &&
(mouse & BROWSER_MOUSE_CLICK_2)) ||
@@ -2374,9 +2378,14 @@ struct browser_window *browser_window_find_target(struct browser_window *bw,
* - button_2 doesn't open in new tabs and the link target is
* "_blank"
*/
- bw_target = browser_window_create(NULL, NULL, bw, false, false);
- if (!bw_target)
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE,
+ NULL,
+ NULL,
+ bw,
+ &bw_target);
+ if (error != NSERROR_OK) {
return bw;
+ }
return bw_target;
} else if ((target == TARGET_SELF) || (!strcasecmp(target, "_self"))) {
return bw;
@@ -2408,9 +2417,14 @@ struct browser_window *browser_window_find_target(struct browser_window *bw,
if (!nsoption_bool(target_blank))
return bw;
- bw_target = browser_window_create(NULL, NULL, bw, false, false);
- if (!bw_target)
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE,
+ NULL,
+ NULL,
+ bw,
+ &bw_target);
+ if (error != NSERROR_OK) {
return bw;
+ }
/* frame names should begin with an alphabetic character (a-z,A-Z),
* however in practice you get things such as '_new' and '2left'. The
diff --git a/desktop/browser.h b/desktop/browser.h
index 7e62eb613..bcba585e8 100644
--- a/desktop/browser.h
+++ b/desktop/browser.h
@@ -73,6 +73,8 @@ enum browser_window_nav_flags {
BROWSER_WINDOW_GO_FLAG_DOWNLOAD = 2,
/** this transaction is verifiable */
BROWSER_WINDOW_GO_FLAG_VERIFIABLE = 4,
+ /** open a new tab rather than a new window */
+ BROWSER_WINDOW_GO_FLAG_TAB = 8,
};
void browser_window_initialise_common(struct browser_window *bw,
@@ -81,29 +83,29 @@ void browser_window_initialise_common(struct browser_window *bw,
/**
* Create and open a new root browser window with the given page.
*
- * \param url URL to start fetching in the new window
- * \param referer The referring uri or NULL if none
- * \param clone The browser window to clone
- * \param history_add add to history
- * \param new_tab create a new tab
- * \return new browser window or NULL on error
+ * \param flags Flags to control operation
+ * \param url URL to start fetching in the new window or NULL for blank
+ * \param referer The referring uri or NULL if none
+ * \param clone The browser window to clone
+ * \param bw pointer to created browser window or untouched on error.
+ * \return error code
*/
-struct browser_window *browser_window_create(nsurl *url,
- nsurl *referer,
- struct browser_window *clone,
- bool history_add,
- bool new_tab);
+nserror browser_window_create(enum browser_window_nav_flags flags,
+ nsurl *url,
+ nsurl *referrer,
+ struct browser_window *clone,
+ struct browser_window **bw);
/**
* Start fetching a page in a browser window.
*
* \param bw browser window
* \param url URL to start fetching
+ * \param flags Flags to control operation
* \param referrer The referring uri or NULL if none
* \param post_urlenc url encoded post data or NULL if none
* \param post_multipart multipart post data or NULL if none
* \param parent Parent content or NULL if none
- * \param flags Flags to control operation
*
* Any existing fetches in the window are aborted.
*
diff --git a/desktop/history_core.c b/desktop/history_core.c
index dda4bcaec..48627fa7a 100644
--- a/desktop/history_core.c
+++ b/desktop/history_core.c
@@ -461,7 +461,12 @@ void history_go(struct browser_window *bw,
if (new_window) {
current = history->current;
history->current = entry;
- browser_window_create(url, NULL, bw, false, false);
+
+ browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE,
+ url,
+ NULL,
+ bw,
+ NULL);
history->current = current;
} else {
history->current = entry;
diff --git a/desktop/searchweb.c b/desktop/searchweb.c
index 93694058a..4b97ca82c 100644
--- a/desktop/searchweb.c
+++ b/desktop/searchweb.c
@@ -59,14 +59,32 @@ static nserror search_web_ico_callback(hlcache_handle *ico,
bool search_web_new_window(struct browser_window *bw, const char *searchterm)
{
char *encsearchterm;
- char *url;
- if (url_escape(searchterm,0, true, NULL, &encsearchterm) !=
- URL_FUNC_OK)
+ char *urltxt;
+ nsurl *url;
+ nserror error;
+
+ if (url_escape(searchterm,0, true, NULL, &encsearchterm) != URL_FUNC_OK)
return false;
- url = search_web_get_url(encsearchterm);
+
+ urltxt = search_web_get_url(encsearchterm);
free(encsearchterm);
- browser_window_create(url, bw, NULL, true, true);
- free(url);
+
+ error = nsurl_create(urltxt, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY |
+ BROWSER_WINDOW_GO_FLAG_TAB,
+ url,
+ NULL,
+ bw,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+
+ free(urltxt);
return true;
}
diff --git a/desktop/tree_url_node.c b/desktop/tree_url_node.c
index 5305fa11d..3b84b4c08 100644
--- a/desktop/tree_url_node.c
+++ b/desktop/tree_url_node.c
@@ -356,7 +356,7 @@ node_callback_resp tree_url_node_callback(void *user_data,
{
struct tree *tree;
struct node_element *element;
- nsurl *nsurl;
+ nsurl *url;
nserror error;
const char *text;
char *norm_text;
@@ -372,13 +372,13 @@ node_callback_resp tree_url_node_callback(void *user_data,
*/
case TREE_ELEMENT_URL:
/* reset URL characteristics */
- error = nsurl_create(msg_data->data.text, &nsurl);
+ error = nsurl_create(msg_data->data.text, &url);
if (error != NSERROR_OK) {
warn_user("NoMemory", 0);
return NODE_CALLBACK_REJECT;
}
- urldb_reset_url_visit_data(nsurl);
- nsurl_unref(nsurl);
+ urldb_reset_url_visit_data(url);
+ nsurl_unref(url);
return NODE_CALLBACK_HANDLED;
case TREE_ELEMENT_TITLE:
return NODE_CALLBACK_HANDLED;
@@ -393,29 +393,45 @@ node_callback_resp tree_url_node_callback(void *user_data,
element = tree_node_find_element(msg_data->node,
TREE_ELEMENT_URL, NULL);
if (element != NULL) {
+ nserror error;
+ enum browser_window_nav_flags flags;
+
text = tree_node_element_get_text(element);
- if (msg_data->flag == TREE_ELEMENT_LAUNCH_IN_TABS) {
- msg_data->data.bw = browser_window_create(text,
- msg_data->data.bw, 0, true, true);
- } else {
- browser_window_create(text, NULL, 0,
- true, false);
+
+ error = nsurl_create(text, &url);
+ if (error == NSERROR_OK) {
+ flags = BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY;
+ if (msg_data->flag == TREE_ELEMENT_LAUNCH_IN_TABS) {
+ flags |= BROWSER_WINDOW_GO_FLAG_TAB;
+ }
+ error = browser_window_create(flags,
+ url,
+ NULL,
+ msg_data->data.bw,
+ &msg_data->data.bw);
+ nsurl_unref(url);
}
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+
return NODE_CALLBACK_HANDLED;
}
break;
+
case NODE_ELEMENT_EDIT_FINISHING:
text = msg_data->data.text;
if (msg_data->flag == TREE_ELEMENT_URL) {
size_t len;
- error = nsurl_create(text, &nsurl);
+ error = nsurl_create(text, &url);
if (error != NSERROR_OK) {
warn_user("NoMemory", 0);
return NODE_CALLBACK_REJECT;
}
- error = nsurl_get(nsurl, NSURL_WITH_FRAGMENT,
+ error = nsurl_get(url, NSURL_WITH_FRAGMENT,
&norm_text, &len);
if (error != NSERROR_OK) {
warn_user("NoMemory", 0);
@@ -424,20 +440,20 @@ node_callback_resp tree_url_node_callback(void *user_data,
msg_data->data.text = norm_text;
- data = urldb_get_url_data(nsurl);
+ data = urldb_get_url_data(url);
if (data == NULL) {
- urldb_add_url(nsurl);
- urldb_set_url_persistence(nsurl, true);
- data = urldb_get_url_data(nsurl);
+ urldb_add_url(url);
+ urldb_set_url_persistence(url, true);
+ data = urldb_get_url_data(url);
if (data == NULL) {
- nsurl_unref(nsurl);
+ nsurl_unref(url);
return NODE_CALLBACK_REJECT;
}
}
tree = user_data;
tree_update_URL_node(tree, msg_data->node,
- nsurl, NULL);
- nsurl_unref(nsurl);
+ url, NULL);
+ nsurl_unref(url);
}
else if (msg_data->flag == TREE_ELEMENT_TITLE) {
while (isspace(*text))
diff --git a/framebuffer/gui.c b/framebuffer/gui.c
index 986eaaa22..81ed7214e 100644
--- a/framebuffer/gui.c
+++ b/framebuffer/gui.c
@@ -528,6 +528,8 @@ main(int argc, char** argv)
struct browser_window *bw;
char *options;
char *messages;
+ nsurl *url;
+ nserror error;
setbuf(stderr, NULL);
@@ -543,12 +545,27 @@ main(int argc, char** argv)
gui_init(argc, argv);
+ /* create an initial browser window */
+
LOG(("calling browser_window_create"));
- bw = browser_window_create(feurl, 0, 0, true, false);
- netsurf_main_loop();
+ error = nsurl_create(feurl, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ &bw);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ } else {
+ netsurf_main_loop();
- browser_window_destroy(bw);
+ browser_window_destroy(bw);
+ }
netsurf_exit();
diff --git a/gtk/dialogs/source.c b/gtk/dialogs/source.c
index 0804dfffb..3834daa6f 100644
--- a/gtk/dialogs/source.c
+++ b/gtk/dialogs/source.c
@@ -254,11 +254,14 @@ void nsgtk_source_dialog_init(GtkWindow *parent, struct browser_window *bw)
gtk_widget_show(GTK_WIDGET(wndSource));
}
+
void nsgtk_source_tab_init(GtkWindow *parent, struct browser_window *bw)
{
const char *source_data;
unsigned long source_size;
char *ndata = 0;
+ nsurl *url;
+ nserror error;
source_data = content_get_source_data(bw->current_content,
&source_size);
@@ -298,8 +301,23 @@ void nsgtk_source_tab_init(GtkWindow *parent, struct browser_window *bw)
warn_user(messages_get("NoMemory"), 0);
return;
}
+
/* Open tab */
- browser_window_create(fileurl, bw, NULL, false, true);
+ error = nsurl_create(fileurl, &url);
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ } else {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_TAB,
+ url,
+ NULL,
+ bw,
+ NULL);
+ nsurl_unref(url);
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+ }
free(fileurl);
}
diff --git a/gtk/gui.c b/gtk/gui.c
index f44a13824..8d9912d62 100644
--- a/gtk/gui.c
+++ b/gtk/gui.c
@@ -351,8 +351,10 @@ nsurl *gui_get_resource_url(const char *path)
static void gui_init(int argc, char** argv, char **respath)
{
char buf[PATH_MAX];
- const char *addr = NETSURF_HOMEPAGE;
char *resource_filename;
+ const char *addr;
+ nsurl *url;
+ nserror error;
/* check user options */
check_options(respath);
@@ -457,15 +459,32 @@ static void gui_init(int argc, char** argv, char **respath)
sslcert_init(tree_content_icon_name);
- if (nsoption_charp(homepage_url) != NULL) {
- addr = nsoption_charp(homepage_url);
+ /* If there is a url specified on the command line use it */
+ if (argc > 1) {
+ addr = argv[1];
+ } else if (nsoption_charp(homepage_url) != NULL) {
+ addr = nsoption_charp(homepage_url);
+ } else {
+ addr = NETSURF_HOMEPAGE;
}
- if (2 <= argc)
- addr = argv[1];
+ /* create an initial browser window */
+ error = nsurl_create(addr, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ } else {
+ netsurf_main_loop();
+ }
- /* Last step of initialization. Opens the main browser window. */
- browser_window_create(addr, 0, 0, true, false);
}
@@ -524,8 +543,6 @@ int main(int argc, char** argv)
gui_init(argc, argv, respaths);
- netsurf_main_loop();
-
/* Ensure all scaffoldings are destroyed before we go into exit */
while (scaf_list != NULL)
nsgtk_scaffolding_destroy(scaf_list);
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index 3f027f88f..3ebf051dc 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -579,15 +579,28 @@ static void nsgtk_openfile_open(const char *filename)
MULTIHANDLER(newwindow)
{
struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- const char *url = nsoption_charp(homepage_url);
-
- if (url != NULL)
- url = NULL;
+ const char *addr;
+ nsurl *url;
+ nserror error;
- if (url == NULL)
- url = NETSURF_HOMEPAGE;
+ if (nsoption_charp(homepage_url) != NULL) {
+ addr = nsoption_charp(homepage_url);
+ } else {
+ addr = NETSURF_HOMEPAGE;
+ }
- browser_window_create(url, bw, NULL, false, false);
+ error = nsurl_create(addr, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE,
+ url,
+ NULL,
+ bw,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
return TRUE;
}
@@ -595,25 +608,41 @@ MULTIHANDLER(newwindow)
MULTIHANDLER(newtab)
{
struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
+ nsurl *url;
+ nserror error;
- if (nsoption_bool(new_blank)) {
- browser_window_create(NULL, bw, NULL, false, true);
+ if (!nsoption_bool(new_blank)) {
+ const char *addr;
+ if (nsoption_charp(homepage_url) != NULL) {
+ addr = nsoption_charp(homepage_url);
+ } else {
+ addr = NETSURF_HOMEPAGE;
+ }
+ error = nsurl_create(addr, &url);
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+ }
+
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_TAB,
+ url,
+ NULL,
+ bw,
+ NULL);
+ if (url != NULL) {
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ } else if (nsoption_bool(new_blank)) {
+ /** @todo what the heck is this for? */
GtkWidget *window = gtk_notebook_get_nth_page(g->notebook, -1);
nsgtk_widget_override_background_color(window,
- GTK_STATE_NORMAL,
- 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF);
- } else {
- const char *url = nsoption_charp(homepage_url);
-
- if (url != NULL)
- url = NULL;
-
- if (url == NULL)
- url = NETSURF_HOMEPAGE;
-
- browser_window_create(url, bw, NULL, false, true);
+ GTK_STATE_NORMAL,
+ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF);
}
-
+
return TRUE;
}
@@ -968,11 +997,25 @@ MENUHANDLER(link_openwin)
struct gtk_scaffolding *g = (struct gtk_scaffolding *) data;
struct gui_window *gui = g->top_level;
struct browser_window *bw = nsgtk_get_browser_window(gui);
+ nsurl *url;
+ nserror error;
if (current_menu_ctx.link_url == NULL)
return FALSE;
- browser_window_create(current_menu_ctx.link_url, bw, NULL, true, false);
+ error = nsurl_create(current_menu_ctx.link_url, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ bw,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
return TRUE;
}
@@ -985,12 +1028,29 @@ MENUHANDLER(link_opentab)
struct gtk_scaffolding *g = (struct gtk_scaffolding *) data;
struct gui_window *gui = g->top_level;
struct browser_window *bw = nsgtk_get_browser_window(gui);
+ nsurl *url;
+ nserror error;
if (current_menu_ctx.link_url == NULL)
return FALSE;
temp_open_background = 1;
- browser_window_create(current_menu_ctx.link_url, bw, NULL, true, true);
+
+ error = nsurl_create(current_menu_ctx.link_url, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY |
+ BROWSER_WINDOW_GO_FLAG_TAB,
+ url,
+ NULL,
+ bw,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+
temp_open_background = -1;
return TRUE;
diff --git a/monkey/browser.c b/monkey/browser.c
index a4a923fac..c73e0c0ef 100644
--- a/monkey/browser.c
+++ b/monkey/browser.c
@@ -394,11 +394,29 @@ gui_window_save_link(struct gui_window *g, const char *url,
static void
monkey_window_handle_new(int argc, char **argv)
{
- struct browser_window *bw;
+ nsurl *url = NULL;
+ nserror error = NSERROR_OK;
+
if (argc > 3)
return;
- bw = browser_window_create((argc == 3) ? argv[2] : NULL, NULL, NULL, true, false);
- (void) bw;
+
+ if (argc == 3) {
+ error = nsurl_create(argv[2], &url);
+ }
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ if (url != NULL) {
+ nsurl_unref(url);
+ }
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
static void
diff --git a/riscos/dialog.c b/riscos/dialog.c
index 1fabbcb5e..d66b1cb08 100644
--- a/riscos/dialog.c
+++ b/riscos/dialog.c
@@ -705,17 +705,35 @@ void ro_gui_dialog_update_zoom(struct gui_window *g) {
bool ro_gui_dialog_openurl_apply(wimp_w w) {
- const char *url;
+ const char *urltxt;
char *url2;
+ nsurl *url;
+ nserror error;
- url = ro_gui_get_icon_string(w, ICON_OPENURL_URL);
- url2 = strdup(url);
- if (url2 != NULL) {
- browser_window_create(url2, 0, 0, true, false);
- free(url2);
- return true;
+ urltxt = ro_gui_get_icon_string(w, ICON_OPENURL_URL);
+ url2 = strdup(urltxt); /** @todo why is this copied */
+ if (url2 == NULL) {
+ return false;
+ }
+
+ error = nsurl_create(url2, &url);
+ free(url2);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
}
- return false;
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ return false;
+ }
+
+ return true;
+
}
diff --git a/riscos/gui.c b/riscos/gui.c
index a9827c707..afe82aba9 100644
--- a/riscos/gui.c
+++ b/riscos/gui.c
@@ -777,8 +777,24 @@ static void gui_init2(int argc, char** argv)
}
}
- if (open_window)
- browser_window_create(url, NULL, 0, true, false);
+ if (open_window) {
+ nsurl *urlns;
+ nserror errorns;
+
+ errorns = nsurl_create(yrl, &urlns);
+ if (errorns == NSERROR_OK) {
+ errorns = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ urlns,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(urlns);
+ }
+ if (errorns != NSERROR_OK) {
+ warn_user(messages_get_errorcode(errorns), 0);
+ }
+ }
free(url);
}
@@ -1498,9 +1514,9 @@ void ro_msg_dataload(wimp_message *message)
char *urltxt = NULL;
char *title = NULL;
struct gui_window *g;
- os_error *error;
+ os_error *oserror;
nsurl *url;
- nserror nserror;
+ nserror error;
g = ro_gui_window_lookup(message->data.data_xfer.w);
if (g) {
@@ -1556,12 +1572,10 @@ void ro_msg_dataload(wimp_message *message)
return;
- nserror = nsurl_create(urltxt, &url);
- if (nserror != NSERROR_OK) {
- warn_user(messages_get_errorcode(nserror), 0);
- } else {
+ error = nsurl_create(urltxt, &url);
+ if (nserror == NSERROR_OK) {
if (g) {
- browser_window_navigate(g->bw,
+ error = browser_window_navigate(g->bw,
url,
NULL,
BROWSER_WINDOW_GO_FLAG_HISTORY |
@@ -1577,25 +1591,32 @@ void ro_msg_dataload(wimp_message *message)
#endif
} else {
- browser_window_create(url, NULL, NULL, true, false);
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
}
-
nsurl_unref(url);
}
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+ free(urltxt);
/* send DataLoadAck */
message->action = message_DATA_LOAD_ACK;
message->your_ref = message->my_ref;
- error = xwimp_send_message(wimp_USER_MESSAGE, message, message->sender);
- if (error) {
+ oserror = xwimp_send_message(wimp_USER_MESSAGE, message, message->sender);
+ if (oserror) {
LOG(("xwimp_send_message: 0x%x: %s",
- error->errnum, error->errmess));
- warn_user("WimpError", error->errmess);
+ oserror->errnum, oserror->errmess));
+ warn_user("WimpError", oserror->errmess);
return;
}
- free(urltxt);
}
@@ -1896,7 +1917,9 @@ void ro_msg_dataopen(wimp_message *message)
int file_type = message->data.data_xfer.file_type;
char *url = 0;
size_t len;
- os_error *error;
+ os_error *oserror;
+ nsurl *urlns;
+ nserror error;
if (file_type == 0xb28) /* ANT URL file */
url = ro_gui_url_file_parse(message->data.data_xfer.file_name);
@@ -1924,11 +1947,11 @@ void ro_msg_dataopen(wimp_message *message)
/* send DataLoadAck */
message->action = message_DATA_LOAD_ACK;
message->your_ref = message->my_ref;
- error = xwimp_send_message(wimp_USER_MESSAGE, message, message->sender);
- if (error) {
+ oserror = xwimp_send_message(wimp_USER_MESSAGE, message, message->sender);
+ if (oserror) {
LOG(("xwimp_send_message: 0x%x: %s",
- error->errnum, error->errmess));
- warn_user("WimpError", error->errmess);
+ oserror->errnum, oserror->errmess));
+ warn_user("WimpError", oserror->errmess);
return;
}
@@ -1937,10 +1960,21 @@ void ro_msg_dataopen(wimp_message *message)
* functions called above */
return;
- /* create a new window with the file */
- browser_window_create(url, NULL, 0, true, false);
-
+ error = nsurl_create(url, &urlns);
free(url);
+ if (error == NSERROR_OK) {
+ /* create a new window with the file */
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ urlns,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(urlns);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
diff --git a/riscos/iconbar.c b/riscos/iconbar.c
index 24d8661cc..a23f4063c 100644
--- a/riscos/iconbar.c
+++ b/riscos/iconbar.c
@@ -118,15 +118,30 @@ void ro_gui_iconbar_initialise(void)
bool ro_gui_iconbar_click(wimp_pointer *pointer)
{
int key_down = 0;
+ nsurl *url;
+ nserror error;
switch (pointer->buttons) {
case wimp_CLICK_SELECT:
if (nsoption_charp(homepage_url) != NULL) {
- browser_window_create(nsoption_charp(homepage_url),
- NULL, 0, true, false);
+ error = nsurl_create(nsoption_charp(homepage_url), &url);
} else {
- browser_window_create(NETSURF_HOMEPAGE,
- NULL, 0, true, false);
+ error = nsurl_create(NETSURF_HOMEPAGE, &url);
+ }
+
+ /* create an initial browser window */
+ error = nsurl_create(addr, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
}
break;
diff --git a/riscos/uri.c b/riscos/uri.c
index 986a84022..d4e96b438 100644
--- a/riscos/uri.c
+++ b/riscos/uri.c
@@ -42,6 +42,8 @@ void ro_uri_message_received(wimp_message *msg)
char* uri_requested;
int uri_length;
nsurl *nsurl;
+ nsurl *url;
+ nserror error;
uri_handle = uri_message->handle;
@@ -69,9 +71,20 @@ void ro_uri_message_received(wimp_message *msg)
xuri_request_uri(0, uri_requested, uri_length, uri_handle, NULL);
- browser_window_create(uri_requested, NULL, 0, true, false);
-
+ error = nsurl_create(uri_requested, &url);
free(uri_requested);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
bool ro_uri_launch(const char *uri)
diff --git a/riscos/url_protocol.c b/riscos/url_protocol.c
index 272847e83..66245689c 100644
--- a/riscos/url_protocol.c
+++ b/riscos/url_protocol.c
@@ -54,6 +54,7 @@ void ro_url_message_received(wimp_message *message)
(inetsuite_message_open_url*) &message->data;
os_error *error;
nsurl *nsurl;
+ nserror errorns;
/* If the url_message->indirect.tag is non-zero,
* then the message data is contained within the message block.
@@ -111,7 +112,7 @@ void ro_url_message_received(wimp_message *message)
return;
}
- nsurl_unref(nsurl);
+ free(url);
/* send ack */
message->your_ref = message->my_ref;
@@ -124,9 +125,18 @@ void ro_url_message_received(wimp_message *message)
}
/* create new browser window */
- browser_window_create(url, 0, 0, true, false);
+ errorns = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ nsurl,
+ NULL,
+ NULL,
+ NULL);
- free(url);
+
+ nsurl_unref(nsurl);
+ if (errorns != NSERROR_OK) {
+ warn_user(messages_get_errorcode(errorns), 0);
+ }
}
diff --git a/riscos/window.c b/riscos/window.c
index a0a64a17f..29c74302a 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -1909,6 +1909,8 @@ bool ro_gui_window_handle_local_keypress(struct gui_window *g, wimp_key *key,
uint32_t c = (uint32_t) key->c;
wimp_scroll_direction xscroll = wimp_SCROLL_NONE;
wimp_scroll_direction yscroll = wimp_SCROLL_NONE;
+ nsurl *url;
+ nserror error;
if (g == NULL)
return false;
@@ -1917,11 +1919,22 @@ bool ro_gui_window_handle_local_keypress(struct gui_window *g, wimp_key *key,
switch (c) {
case IS_WIMP_KEY + wimp_KEY_F1: /* Help. */
- browser_window_create(
- "http://www.netsurf-browser.org/documentation/",
- NULL, 0, true, false);
+ {
+ error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
return true;
-
+ }
case IS_WIMP_KEY + wimp_KEY_CONTROL + wimp_KEY_F1:
ro_gui_window_action_page_info(g);
return true;
@@ -2627,7 +2640,8 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
hlcache_handle *h;
struct toolbar *toolbar;
wimp_window_state state;
- os_error *error;
+ nsurl *url;
+ nserror error;
g = (struct gui_window *) ro_gui_wimp_event_get_user_data(w);
toolbar = g->toolbar;
@@ -2650,28 +2664,72 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
switch (action) {
- /* help actions */
+ /* help actions */
case HELP_OPEN_CONTENTS:
- browser_window_create(
- "http://www.netsurf-browser.org/documentation/",
- NULL, 0, true, false);
+ error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
break;
+
case HELP_OPEN_GUIDE:
- browser_window_create(
- "http://www.netsurf-browser.org/documentation/guide",
- NULL, 0, true, false);
+ error = nsurl_create("http://www.netsurf-browser.org/documentation/guide", &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
break;
+
case HELP_OPEN_INFORMATION:
- browser_window_create(
- "http://www.netsurf-browser.org/documentation/info",
- NULL, 0, true, false);
+ error = nsurl_create("http://www.netsurf-browser.org/documentation/info", &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
break;
+
case HELP_OPEN_CREDITS:
- browser_window_create("about:credits", NULL, 0, true, false);
+ error = nsurl_create("about:credits", &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
break;
+
case HELP_OPEN_LICENCE:
- browser_window_create("about:licence", NULL, 0, true, false);
+ error = nsurl_create("about:licence", &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
break;
+
case HELP_LAUNCH_INTERACTIVE:
if (!ro_gui_interactive_help_available()) {
ro_gui_interactive_help_start();
@@ -2681,7 +2739,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
}
break;
- /* history actions */
+ /* history actions */
case HISTORY_SHOW_LOCAL:
ro_gui_window_action_local_history(g);
break;
@@ -2689,7 +2747,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
ro_gui_global_history_open();
break;
- /* hotlist actions */
+ /* hotlist actions */
case HOTLIST_ADD_URL:
ro_gui_window_action_add_bookmark(g);
break;
@@ -2697,7 +2755,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
ro_gui_hotlist_open();
break;
- /* cookies actions */
+ /* cookies actions */
case COOKIES_SHOW:
ro_gui_cookies_open();
break;
@@ -2706,7 +2764,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
cookies_delete_all();
break;
- /* page actions */
+ /* page actions */
case BROWSER_PAGE_INFO:
ro_gui_window_action_page_info(g);
break;
@@ -2721,13 +2779,13 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
ro_gui_view_source(h);
break;
- /* object actions */
+ /* object actions */
case BROWSER_OBJECT_INFO:
if (current_menu_object != NULL) {
ro_gui_window_prepare_objectinfo(current_menu_object,
- current_menu_url);
+ current_menu_url);
ro_gui_dialog_open_persistent(g->window,
- dialog_objinfo, false);
+ dialog_objinfo, false);
}
break;
case BROWSER_OBJECT_RELOAD:
@@ -2741,77 +2799,84 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case BROWSER_LINK_SAVE_URI:
if (current_menu_url != NULL) {
ro_gui_save_prepare(GUI_SAVE_LINK_URI, NULL, NULL,
- current_menu_url, NULL);
+ current_menu_url, NULL);
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
+ false);
}
break;
case BROWSER_LINK_SAVE_URL:
if (current_menu_url != NULL) {
ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL,
- current_menu_url, NULL);
+ current_menu_url, NULL);
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
+ false);
}
break;
case BROWSER_LINK_SAVE_TEXT:
if (current_menu_url != NULL) {
ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, NULL, NULL,
- current_menu_url, NULL);
+ current_menu_url, NULL);
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
+ false);
}
break;
+
case BROWSER_LINK_DOWNLOAD:
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);
+ if (error == NSERROR_OK) {
+ error = 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)
- browser_window_create(current_menu_url, bw,
- nsurl_access(hlcache_handle_get_url(h)),
- true, false);
+ if (current_menu_url != NULL) {
+ error = nsurl_create(current_menu_url, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ hlcache_handle_get_url(h),
+ bw,
+ NULL);
+ nsurl_unref(url);
+ }
+ }
break;
+
/* save actions */
case BROWSER_OBJECT_SAVE:
if (current_menu_object != NULL) {
ro_gui_save_prepare(GUI_SAVE_OBJECT_ORIG,
- current_menu_object, NULL, NULL, NULL);
+ current_menu_object, NULL, NULL, NULL);
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
+ false);
}
break;
case BROWSER_OBJECT_EXPORT_SPRITE:
if (current_menu_object != NULL) {
ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE,
- current_menu_object, NULL, NULL, NULL);
+ current_menu_object, NULL, NULL, NULL);
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
+ false);
}
break;
case BROWSER_OBJECT_EXPORT_DRAW:
if (current_menu_object != NULL) {
ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE,
- current_menu_object, NULL, NULL, NULL);
+ current_menu_object, NULL, NULL, NULL);
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
+ false);
}
break;
case BROWSER_SAVE:
@@ -2839,14 +2904,14 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
ro_gui_window_action_save(g, GUI_SAVE_LINK_TEXT);
break;
- /* selection actions */
+ /* selection actions */
case BROWSER_SELECTION_SAVE:
if (h != NULL) {
ro_gui_save_prepare(GUI_SAVE_TEXT_SELECTION, NULL,
- browser_window_get_selection(bw),
- NULL, NULL);
+ browser_window_get_selection(bw),
+ NULL, NULL);
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
+ false);
}
break;
case BROWSER_SELECTION_COPY:
@@ -2865,7 +2930,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
browser_window_key_press(bw, KEY_CLEAR_SELECTION);
break;
- /* navigation actions */
+ /* navigation actions */
case BROWSER_NAVIGATE_HOME:
ro_gui_window_action_home(g);
break;
@@ -2880,7 +2945,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case BROWSER_NAVIGATE_UP:
if (bw != NULL && h != NULL)
ro_gui_window_navigate_up(bw->window,
- nsurl_access(hlcache_handle_get_url(h)));
+ nsurl_access(hlcache_handle_get_url(h)));
break;
case BROWSER_NAVIGATE_RELOAD_ALL:
if (bw != NULL)
@@ -2891,7 +2956,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
browser_window_stop(bw);
break;
- /* browser window/display actions */
+ /* browser window/display actions */
case BROWSER_SCALE_VIEW:
ro_gui_window_action_zoom(g);
break;
@@ -2911,11 +2976,11 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
case BROWSER_BUFFER_ANIMS:
if (g != NULL)
g->option.buffer_animations =
- !g->option.buffer_animations;
+ !g->option.buffer_animations;
break;
case BROWSER_BUFFER_ALL:
if (g != NULL)
- g->option.buffer_everything =
+ g->option.buffer_everything =
!g->option.buffer_everything;
break;
case BROWSER_SAVE_VIEW:
@@ -2926,31 +2991,35 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
break;
case BROWSER_WINDOW_DEFAULT:
if (g != NULL) {
+ os_error *oserror;
+
ro_gui_screen_size(&nsoption_int(window_screen_width),
&nsoption_int(window_screen_height));
state.w = w;
- error = xwimp_get_window_state(&state);
- if (error) {
+ oserror = xwimp_get_window_state(&state);
+ if (oserror) {
LOG(("xwimp_get_window_state: 0x%x: %s",
- error->errnum,
- error->errmess));
- warn_user("WimpError", error->errmess);
+ oserror->errnum,
+ oserror->errmess));
+ warn_user("WimpError", oserror->errmess);
}
nsoption_set_int(window_x, state.visible.x0);
nsoption_set_int(window_y, state.visible.y0);
nsoption_set_int(window_width,
- state.visible.x1 - state.visible.x0);
+ state.visible.x1 - state.visible.x0);
nsoption_set_int(window_height,
- state.visible.y1 - state.visible.y0);
+ state.visible.y1 - state.visible.y0);
ro_gui_save_options();
}
break;
case BROWSER_WINDOW_STAGGER:
- nsoption_set_bool(window_stagger, !nsoption_bool(window_stagger));
+ nsoption_set_bool(window_stagger,
+ !nsoption_bool(window_stagger));
ro_gui_save_options();
break;
case BROWSER_WINDOW_COPY:
- nsoption_set_bool(window_size_clone, !nsoption_bool(window_size_clone));
+ nsoption_set_bool(window_size_clone,
+ !nsoption_bool(window_size_clone));
ro_gui_save_options();
break;
case BROWSER_WINDOW_RESET:
@@ -2959,7 +3028,7 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
ro_gui_save_options();
break;
- /* toolbar actions */
+ /* toolbar actions */
case TOOLBAR_BUTTONS:
assert(toolbar);
ro_toolbar_set_display_buttons(toolbar,
@@ -2986,6 +3055,10 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
return false;
}
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
+
return true;
}
@@ -3607,13 +3680,23 @@ void ro_gui_window_toolbar_click(void *data,
case TOOLBAR_BUTTON_UP_NEW:
if (g->bw && g->bw->current_content) {
hlcache_handle *h = g->bw->current_content;
- new_bw = browser_window_create(NULL,
- g->bw, NULL, false,
- false);
- /* do it without loading the content
- * into the new window */
- ro_gui_window_navigate_up(new_bw->window,
+ nserror error;
+
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE,
+ NULL,
+ NULL,
+ g->bw,
+ &new_bw);
+
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ } else {
+ /* do it without loading the content
+ * into the new window
+ */
+ ro_gui_window_navigate_up(new_bw->window,
nsurl_access(hlcache_handle_get_url(h)));
+ }
}
break;
@@ -3954,10 +4037,8 @@ void ro_gui_window_action_home(struct gui_window *g)
}
error = nsurl_create(addr, &url);
- if (error != NSERROR_OK) {
- warn_user(messages_get_errorcode(error), 0);
- } else {
- browser_window_navigate(g->bw,
+ if (error == NSERROR_OK) {
+ error = browser_window_navigate(g->bw,
url,
NULL,
BROWSER_WINDOW_GO_FLAG_HISTORY |
@@ -3967,7 +4048,9 @@ void ro_gui_window_action_home(struct gui_window *g)
NULL);
nsurl_unref(url);
}
-
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
@@ -3979,15 +4062,23 @@ void ro_gui_window_action_home(struct gui_window *g)
void ro_gui_window_action_navigate_back_new(struct gui_window *g)
{
- struct browser_window *new_bw;
+ struct browser_window *new_bw;
+ nserror error;
if (g == NULL || g->bw == NULL)
return;
- new_bw = browser_window_create(NULL, g->bw, NULL, false, false);
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE,
+ NULL,
+ NULL,
+ g->bw,
+ &new_bw);
- if (new_bw != NULL && new_bw->history != NULL)
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ } else {
history_back(new_bw, new_bw->history);
+ }
}
@@ -3999,15 +4090,23 @@ void ro_gui_window_action_navigate_back_new(struct gui_window *g)
void ro_gui_window_action_navigate_forward_new(struct gui_window *g)
{
- struct browser_window *new_bw;
+ struct browser_window *new_bw;
+ nserror error;
if (g == NULL || g->bw == NULL)
return;
- new_bw = browser_window_create(NULL, g->bw, NULL, false, false);
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE,
+ NULL,
+ NULL,
+ g->bw,
+ &new_bw);
- if (new_bw != NULL && new_bw->history != NULL)
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ } else {
history_forward(new_bw, new_bw->history);
+ }
}
@@ -4019,12 +4118,20 @@ void ro_gui_window_action_navigate_forward_new(struct gui_window *g)
void ro_gui_window_action_new_window(struct gui_window *g)
{
+ nserror error;
+
if (g == NULL || g->bw == NULL || g->bw->current_content == NULL)
return;
- browser_window_create(nsurl_access(
- hlcache_handle_get_url(g->bw->current_content)), g->bw,
- 0, false, false);
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE,
+ hlcache_handle_get_url(g->bw->current_content),
+ NULL,
+ g->bw,
+ NULL);
+
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ }
}
diff --git a/windows/gui.c b/windows/gui.c
index 6e65816c8..e005ab405 100644
--- a/windows/gui.c
+++ b/windows/gui.c
@@ -744,7 +744,11 @@ nsws_window_command(HWND hwnd,
break;
case IDM_FILE_OPEN_WINDOW:
- browser_window_create(NULL, gw->bw, NULL, false, false);
+ browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE,
+ NULL,
+ NULL,
+ gw->bw,
+ NULL);
break;
case IDM_FILE_CLOSE_WINDOW:
diff --git a/windows/main.c b/windows/main.c
index 7d158660a..50449df56 100644
--- a/windows/main.c
+++ b/windows/main.c
@@ -100,8 +100,9 @@ WinMain(HINSTANCE hInstance, HINSTANCE hLastInstance, LPSTR lpcli, int ncmd)
LPWSTR *argvw;
char *messages;
nserror ret;
- struct browser_window *bw;
- const char *addr = NETSURF_HOMEPAGE;
+ const char *addr;
+ nsurl *url;
+ nserror error;
if (SLEN(lpcli) > 0) {
argvw = CommandLineToArgvW(GetCommandLineW(), &argc);
@@ -150,14 +151,30 @@ WinMain(HINSTANCE hInstance, HINSTANCE hLastInstance, LPSTR lpcli, int ncmd)
/* If there is a url specified on the command line use it */
if (argc > 1) {
addr = argv[1];
- } else {
+ } else if (nsoption_charp(homepage_url) != NULL) {
addr = nsoption_charp(homepage_url);
+ } else {
+ addr = NETSURF_HOMEPAGE;
}
LOG(("calling browser_window_create"));
- bw = browser_window_create(addr, 0, 0, true, false);
- netsurf_main_loop();
+ error = nsurl_create(addr, &url);
+ if (error == NSERROR_OK) {
+ error = browser_window_create(BROWSER_WINDOW_GO_FLAG_VERIFIABLE |
+ BROWSER_WINDOW_GO_FLAG_HISTORY,
+ url,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+
+ }
+ if (error != NSERROR_OK) {
+ warn_user(messages_get_errorcode(error), 0);
+ } else {
+ netsurf_main_loop();
+ }
netsurf_exit();