From 06a1d75d52dc533474194c0c9b33eecf09b59068 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Fri, 25 Jul 2014 16:29:18 +0100 Subject: stop gtk about dialog forcing navigation of existing browsing contexts --- gtk/dialogs/about.c | 80 +++++++++++++++++++++++++---------------------------- 1 file changed, 37 insertions(+), 43 deletions(-) (limited to 'gtk/dialogs/about.c') diff --git a/gtk/dialogs/about.c b/gtk/dialogs/about.c index 2cd2f346b..a86bfe70f 100644 --- a/gtk/dialogs/about.c +++ b/gtk/dialogs/about.c @@ -1,5 +1,5 @@ /* - * Copyright 2008 Mike Lester + * Copyright 2014 Vincent Sanders * * This file is part of NetSurf, http://www.netsurf-browser.org/ * @@ -16,62 +16,56 @@ * along with this program. If not, see . */ +/** + * \file gtk/dialogs/about.c + * + * Implementation of gtk about dialog. + */ + #include #include "utils/utils.h" +#include "utils/messages.h" +#include "utils/nsoption.h" +#include "desktop/browser.h" #include "gtk/compat.h" #include "gtk/gui.h" #include "gtk/dialogs/about.h" - +/** + * About dialog information button click. + * + * \param button The button widget that was clicked + * \param data The text of the url to open + */ static void -nsgtk_about_dialog_credits(GtkWidget *button, gpointer data) +nsgtk_about_dialog_info(GtkWidget *button, gpointer data) { - struct browser_window *bw = data; nsurl *url; + nserror ret; + const char *url_text = data; + enum browser_window_create_flags flags = BW_CREATE_HISTORY; - if (nsurl_create("about:credits", &url) != NSERROR_OK) { - warn_user("NoMemory", 0); - } else { - browser_window_navigate(bw, - url, - NULL, - BW_NAVIGATE_HISTORY, - NULL, - NULL, - NULL); - nsurl_unref(url); + if (nsoption_bool(show_single_tab) == true) { + flags |= BW_CREATE_TAB; } - gtk_widget_destroy(gtk_widget_get_toplevel(button)); -} - -static void -nsgtk_about_dialog_licence(GtkWidget *button, gpointer data) -{ - struct browser_window *bw = data; - nsurl *url; - - if (nsurl_create("about:licence", &url) != NSERROR_OK) { - warn_user("NoMemory", 0); - } else { - browser_window_navigate(bw, - url, - NULL, - BW_NAVIGATE_HISTORY, - NULL, - NULL, - NULL); + ret = nsurl_create(url_text, &url); + if (ret == NSERROR_OK) { + ret = browser_window_create(flags, url, NULL, NULL, NULL); nsurl_unref(url); } + if (ret != NSERROR_OK) { + warn_user(messages_get_errorcode(ret), 0); + } + + /* close about dialog */ gtk_widget_destroy(gtk_widget_get_toplevel(button)); } -void nsgtk_about_dialog_init(GtkWindow *parent, - struct browser_window *bw, - const char *version) +void nsgtk_about_dialog_init(GtkWindow *parent, const char *version) { GtkWidget *dialog, *vbox, *button, *image, *label; gchar *name_string; @@ -89,7 +83,7 @@ void nsgtk_about_dialog_init(GtkWindow *parent, vbox = nsgtk_vbox_new(FALSE, 8); gtk_box_pack_start(GTK_BOX(nsgtk_dialog_get_content_area(GTK_DIALOG(dialog))), vbox, TRUE, TRUE, 0); - + if (pixbufs != NULL) { GtkIconSet *icon_set = gtk_icon_set_new_from_pixbuf(GDK_PIXBUF(g_list_nth_data(pixbufs, 0))); @@ -103,7 +97,7 @@ void nsgtk_about_dialog_init(GtkWindow *parent, gtk_box_pack_start(GTK_BOX (vbox), image, FALSE, FALSE, 0); } - + label = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (label), name_string); @@ -112,7 +106,7 @@ void nsgtk_about_dialog_init(GtkWindow *parent, gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - label = gtk_label_new("NetSurf is a small fast web browser"); + label = gtk_label_new("NetSurf is a small fast web browser"); gtk_label_set_selectable(GTK_LABEL (label), TRUE); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); @@ -135,14 +129,14 @@ void nsgtk_about_dialog_init(GtkWindow *parent, gtk_box_pack_end(GTK_BOX(nsgtk_dialog_get_action_area(GTK_DIALOG(dialog))), button, FALSE, TRUE, 0); gtk_button_box_set_child_secondary (GTK_BUTTON_BOX(nsgtk_dialog_get_action_area(GTK_DIALOG(dialog))), button, TRUE); - g_signal_connect(button, "clicked", G_CALLBACK(nsgtk_about_dialog_credits), (gpointer)bw); + g_signal_connect(button, "clicked", G_CALLBACK(nsgtk_about_dialog_info), (gpointer)"about:credits"); /* Add the Licence button */ button = gtk_button_new_from_stock ("Licence"); - gtk_box_pack_end(GTK_BOX (GTK_DIALOG(nsgtk_dialog_get_action_area(GTK_DIALOG(dialog)))), + gtk_box_pack_end(GTK_BOX (nsgtk_dialog_get_action_area(GTK_DIALOG(dialog))), button, FALSE, TRUE, 0); gtk_button_box_set_child_secondary (GTK_BUTTON_BOX(nsgtk_dialog_get_action_area(GTK_DIALOG(dialog))), button, TRUE); - g_signal_connect(button, "clicked", G_CALLBACK(nsgtk_about_dialog_licence), (gpointer)bw); + g_signal_connect(button, "clicked", G_CALLBACK(nsgtk_about_dialog_info), (gpointer)"about:licence"); /* Ensure that the dialog box is destroyed when the user responds. */ -- cgit v1.2.3