summaryrefslogtreecommitdiff
path: root/frontends/gtk/about.c
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/gtk/about.c')
-rw-r--r--frontends/gtk/about.c157
1 files changed, 157 insertions, 0 deletions
diff --git a/frontends/gtk/about.c b/frontends/gtk/about.c
new file mode 100644
index 000000000..d57afea7f
--- /dev/null
+++ b/frontends/gtk/about.c
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2014 Vincent Sanders <vince@netsurf-browser.org>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file gtk/about.c
+ *
+ * Implementation of gtk about dialog.
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+
+#include "utils/messages.h"
+#include "utils/nsoption.h"
+#include "utils/nsurl.h"
+#include "desktop/browser.h"
+#include "desktop/version.h"
+
+#include "gtk/warn.h"
+#include "gtk/compat.h"
+#include "gtk/about.h"
+
+#define ABOUT_RESPONSE_ID_LICENCE 1
+#define ABOUT_RESPONSE_ID_CREDITS 2
+
+
+/**
+ * Open a url and a browser window/tab
+ *
+ * \param url_text The text of the url to open
+ */
+static void about_open(const char *url_text)
+{
+ nsurl *url;
+ nserror ret;
+ enum browser_window_create_flags flags = BW_CREATE_HISTORY;
+
+ if (nsoption_bool(show_single_tab) == true) {
+ flags |= BW_CREATE_TAB;
+ }
+
+ 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) {
+ nsgtk_warning(messages_get_errorcode(ret), 0);
+ }
+}
+
+/**
+ * About dialog response handling.
+ *
+ * \param dialog The dialog widget
+ * \param response_id The response ID from the user clicking.
+ * \param user_data The value from the signal connection.
+ */
+static void
+nsgtk_about_dialog_response(GtkDialog *dialog,
+ gint response_id,
+ gpointer user_data)
+{
+ switch (response_id) {
+
+ case ABOUT_RESPONSE_ID_LICENCE:
+ about_open("about:credits");
+ break;
+
+ case ABOUT_RESPONSE_ID_CREDITS:
+ about_open("about:licence");
+ break;
+ }
+
+ /* close about dialog */
+ gtk_widget_destroy(GTK_WIDGET(dialog));
+}
+
+void nsgtk_about_dialog_init(GtkWindow *parent)
+{
+ GtkWidget *dialog, *vbox, *label;
+ gchar *name_string;
+ GList *pixbufs;
+
+ /* Create the dialog */
+ dialog = gtk_dialog_new_with_buttons("About NetSurf",
+ parent,
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ "Licence", ABOUT_RESPONSE_ID_LICENCE,
+ "Credits", ABOUT_RESPONSE_ID_CREDITS,
+ "Close", GTK_RESPONSE_CANCEL,
+ NULL, NULL);
+
+ vbox = nsgtk_vbox_new(FALSE, 8);
+
+ gtk_box_pack_start(GTK_BOX(nsgtk_dialog_get_content_area(GTK_DIALOG(dialog))), vbox, TRUE, TRUE, 0);
+
+ /* NetSurf icon */
+ pixbufs = gtk_window_get_default_icon_list();
+ if (pixbufs != NULL) {
+ GtkWidget *image;
+
+ image = nsgtk_image_new_from_pixbuf_icon(GDK_PIXBUF(g_list_nth_data(pixbufs, 0)),
+ GTK_ICON_SIZE_DIALOG);
+ g_list_free(pixbufs);
+
+ gtk_box_pack_start(GTK_BOX(vbox), image, FALSE, FALSE, 0);
+ }
+
+ /* version string */
+ label = gtk_label_new (NULL);
+ name_string = g_markup_printf_escaped("<span size=\"xx-large\" weight=\"bold\">NetSurf %s</span>", netsurf_version);
+ gtk_label_set_markup (GTK_LABEL (label), name_string);
+ g_free(name_string);
+ gtk_label_set_selectable (GTK_LABEL (label), TRUE);
+ 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(messages_get("AboutDesc"));
+ 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);
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+
+ label = gtk_label_new(messages_get("NetSurfCopyright"));
+ gtk_label_set_selectable(GTK_LABEL(label), TRUE);
+ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
+ gtk_box_pack_start(GTK_BOX (vbox), label, FALSE, FALSE, 0);
+
+ /* Remove separator */
+ nsgtk_dialog_set_has_separator(GTK_DIALOG (dialog), FALSE);
+
+ /* Ensure that the dialog box response is processed. */
+ g_signal_connect_swapped(dialog,
+ "response",
+ G_CALLBACK(nsgtk_about_dialog_response),
+ dialog);
+
+ /* Add the label, and show everything we've added to the dialog. */
+ gtk_widget_show_all(dialog);
+}