summaryrefslogtreecommitdiff
path: root/src/about.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/about.c')
-rw-r--r--src/about.c160
1 files changed, 151 insertions, 9 deletions
diff --git a/src/about.c b/src/about.c
index 43b023c..3818c2c 100644
--- a/src/about.c
+++ b/src/about.c
@@ -2,6 +2,8 @@
* about.c
*
* Copyright (C) 2002 Sun Microsystems, Inc.
+ * Copyright (C) 2001 CodeFactory AB
+ * Copyright (C) 2001, 2002 Anders Carlsson
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -19,22 +21,33 @@
* Boston, MA 02111-1307, USA.
*
* Authors: Glynn Foster <glynn.foster@sun.com>
+ * Anders Carlsson <andersca@gnu.org>
*/
-#include <glade/glade.h>
#include "config.h"
#include "zenity.h"
#include "util.h"
+#include <glade/glade.h>
+
+#define GTK_RESPONSE_CREDITS 0
-#define GTK_RESPONSE_CREDITS 1
+static GtkWidget *dialog;
+static GtkWidget *cred_dialog;
static void zenity_about_dialog_response (GtkWidget *widget, int response, gpointer data);
+static const gchar *author_credits[] = {
+ "Glynn Foster <glynn.foster@sun.com>",
+ "Mike Newman <mike@gtnorthern.demon.co.uk>",
+ NULL
+};
+
+gchar *translator_credits;
+
void
zenity_about (ZenityData *data)
{
GladeXML *glade_dialog = NULL;
- GtkWidget *dialog;
GtkWidget *label;
gchar *text;
@@ -43,8 +56,11 @@ zenity_about (ZenityData *data)
if (glade_dialog == NULL) {
data->exit_code = -1;
return;
- }
-
+ }
+
+ translator_credits = _("translator_credits");
+
+
glade_xml_signal_autoconnect (glade_dialog);
dialog = glade_xml_get_widget (glade_dialog, "zenity_about_dialog");
@@ -76,10 +92,138 @@ zenity_about (ZenityData *data)
gtk_main ();
}
+static GtkWidget *
+zenity_about_create_label (void)
+{
+ GtkWidget *label;
+
+ label = gtk_label_new ("");
+ gtk_label_set_selectable (GTK_LABEL (label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
+ gtk_misc_set_padding (GTK_MISC (label), 8, 8);
+
+ gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+
+ return label;
+}
+
+static void
+zenity_about_update_author_label (GtkWidget *label)
+{
+ GString *string;
+ gchar *tmp;
+ gint i = 0;
+
+ gtk_widget_show (label);
+
+ string = g_string_new ("");
+
+ for (i = 0; author_credits[i] != NULL; i++) {
+ tmp = g_markup_escape_text (author_credits[i], -1);
+ g_string_append (string, tmp);
+
+ if (author_credits[i+1] != NULL)
+ g_string_append (string, "\n");
+
+ g_free (tmp);
+ }
+ gtk_label_set_markup (GTK_LABEL (label), string->str);
+ g_string_free (string, TRUE);
+}
+
+static void
+zenity_about_update_translator_label (GtkWidget *label)
+{
+ GString *string;
+ gchar *tmp;
+
+ if (strcmp (translator_credits, "translator_credits") == 0) {
+ gtk_widget_hide (label);
+ return;
+ } else {
+ gtk_widget_show (label);
+ }
+
+ string = g_string_new ("");
+
+ tmp = g_markup_escape_text (translator_credits, -1);
+ g_string_append (string, tmp);
+ g_free (tmp);
+
+ gtk_label_set_markup (GTK_LABEL (label), string->str);
+ g_string_free (string, TRUE);
+}
+
+static void
+zenity_about_dialog_credits_response (GtkWidget *widget, int response, gpointer data)
+{
+ gtk_widget_destroy (widget);
+ widget = NULL;
+}
+
+static void
+zenity_about_display_credits_dialog (void)
+{
+ GtkWidget *credits_dialog;
+ GtkWidget *label, *notebook, *sw;
+
+ if (cred_dialog != NULL) {
+ gtk_window_present (GTK_WINDOW (cred_dialog));
+ return;
+ }
+
+ credits_dialog = gtk_dialog_new_with_buttons (_("Credits"),
+ GTK_WINDOW (dialog), GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
+
+ g_signal_connect (G_OBJECT (credits_dialog), "response",
+ G_CALLBACK (gtk_widget_destroy), credits_dialog);
+ g_signal_connect (G_OBJECT (credits_dialog), "destroy",
+ G_CALLBACK (gtk_widget_destroyed), &cred_dialog);
+
+ cred_dialog = credits_dialog;
+
+ gtk_window_set_default_size (GTK_WINDOW (credits_dialog), 360, 260);
+ gtk_dialog_set_default_response (GTK_DIALOG (credits_dialog), GTK_RESPONSE_OK);
+
+ notebook = gtk_notebook_new ();
+ gtk_container_set_border_width (GTK_CONTAINER (notebook), 8);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (credits_dialog)->vbox), notebook, TRUE, TRUE, 0);
+
+ if (author_credits != NULL) {
+ label = zenity_about_create_label ();
+ sw = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), label);
+ gtk_viewport_set_shadow_type (GTK_VIEWPORT (GTK_BIN (sw)->child), GTK_SHADOW_NONE);
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), sw,
+ gtk_label_new (_("Written by")));
+ zenity_about_update_author_label (label);
+ }
+
+ if (translator_credits != NULL) {
+ label = zenity_about_create_label ();
+ sw = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), label);
+ gtk_viewport_set_shadow_type (GTK_VIEWPORT (GTK_BIN (sw)->child), GTK_SHADOW_NONE);
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), sw,
+ gtk_label_new (_("Translated by")));
+ zenity_about_update_translator_label (label);
+ }
+
+ gtk_widget_show_all (credits_dialog);
+}
+
static void
zenity_about_dialog_response (GtkWidget *widget, int response, gpointer data)
{
ZenityData *zen_data = data;
+ GError *error = NULL;
switch (response) {
case GTK_RESPONSE_OK:
@@ -88,13 +232,11 @@ zenity_about_dialog_response (GtkWidget *widget, int response, gpointer data)
break;
case GTK_RESPONSE_HELP:
- zen_data->exit_code = 1;
- gtk_main_quit ();
+ zenity_util_show_help ("ghelp:///", NULL);
break;
case GTK_RESPONSE_CREDITS:
- zen_data->exit_code = 1;
- gtk_main_quit ();
+ zenity_about_display_credits_dialog ();
break;
default:
/* Esc dialog */