summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorVincent Sanders <vince@netsurf-browser.org>2013-02-14 18:21:11 +0000
committerVincent Sanders <vince@netsurf-browser.org>2013-02-18 11:23:48 +0000
commitb112dec78d5e8289ded3f61db96e495690ae96b5 (patch)
tree9babaed21ed2eb841b8d398e28814544c73656d9 /gtk
parent3bfb5b96a7c7cb2718a60987e69cd659ed49b9d8 (diff)
downloadnetsurf-b112dec78d5e8289ded3f61db96e495690ae96b5.tar.gz
netsurf-b112dec78d5e8289ded3f61db96e495690ae96b5.tar.bz2
change browser_window_create and refactor all callsites
Diffstat (limited to 'gtk')
-rw-r--r--gtk/dialogs/source.c20
-rw-r--r--gtk/gui.c35
-rw-r--r--gtk/scaffolding.c108
3 files changed, 129 insertions, 34 deletions
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;