From b112dec78d5e8289ded3f61db96e495690ae96b5 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Thu, 14 Feb 2013 18:21:11 +0000 Subject: change browser_window_create and refactor all callsites --- amiga/arexx.c | 22 ++- amiga/context_menu.c | 36 ++++- amiga/gui.c | 201 ++++++++++++++++++++++++--- amiga/menu.c | 60 ++++++-- atari/ctxmenu.c | 34 +++-- atari/deskmenu.c | 80 +++++++++-- atari/gui.c | 30 +++- beos/gui.cpp | 29 +++- beos/scaffolding.cpp | 52 +++++-- cocoa/BookmarksController.m | 19 +-- cocoa/BrowserView.m | 35 ++++- cocoa/BrowserWindowController.m | 22 ++- cocoa/NetSurfAppDelegate.m | 80 ++++++++++- cocoa/NetsurfApp.m | 18 ++- desktop/browser.c | 80 ++++++----- desktop/browser.h | 26 ++-- desktop/history_core.c | 7 +- desktop/searchweb.c | 30 +++- desktop/tree_url_node.c | 54 +++++--- framebuffer/gui.c | 23 +++- gtk/dialogs/source.c | 20 ++- gtk/gui.c | 35 +++-- gtk/scaffolding.c | 108 +++++++++++---- monkey/browser.c | 24 +++- riscos/dialog.c | 34 +++-- riscos/gui.c | 82 +++++++---- riscos/iconbar.c | 23 +++- riscos/uri.c | 17 ++- riscos/url_protocol.c | 16 ++- riscos/window.c | 293 +++++++++++++++++++++++++++------------- windows/gui.c | 6 +- windows/main.c | 27 +++- 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(); -- cgit v1.2.3