change browser_window_create and refactor all callsites

This commit is contained in:
Vincent Sanders 2013-02-14 18:21:11 +00:00
parent 3bfb5b96a7
commit b112dec78d
32 changed files with 1277 additions and 346 deletions

View File

@ -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);

View File

@ -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:

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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 );
}
}
}

View File

@ -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);
if (nsoption_charp(homepage_url) != NULL) {
addr = nsoption_charp(homepage_url);
} else {
addr = NETSURF_HOMEPAGE;
}
LOG(("Entering NetSurf mainloop..."));
netsurf_main_loop();
/* 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"));

View File

@ -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);

View File

@ -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:

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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];

View File

@ -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

View File

@ -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.
*

View File

@ -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;

View File

@ -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;
}

View File

@ -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))

View File

@ -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();

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
const char *addr;
nsurl *url;
nserror error;
if (url != NULL)
url = NULL;
if (nsoption_charp(homepage_url) != NULL) {
addr = nsoption_charp(homepage_url);
} else {
addr = NETSURF_HOMEPAGE;
}
if (url == NULL)
url = 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);
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);
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);
}
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;

View File

@ -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

View File

@ -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;
}
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);
}
if (error != NSERROR_OK) {
warn_user(messages_get_errorcode(error), 0);
return false;
}
return true;
}

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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)

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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:

View File

@ -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();