Index: gtk/gtkaboutdialog.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkaboutdialog.c,v
retrieving revision 1.12
diff -u -p -r1.12 gtkaboutdialog.c
--- gtk/gtkaboutdialog.c	17 Oct 2004 06:38:35 -0000	1.12
+++ gtk/gtkaboutdialog.c	25 Oct 2004 10:54:49 -0000
@@ -102,7 +102,8 @@ enum 
   PROP_DOCUMENTERS,
   PROP_TRANSLATOR_CREDITS,
   PROP_ARTISTS,
-  PROP_LOGO
+  PROP_LOGO,
+  PROP_LOGO_ICON_NAME
 };
 
 static void                 gtk_about_dialog_finalize       (GObject            *object);
@@ -273,6 +274,14 @@ gtk_about_dialog_class_init (GtkAboutDia
 							GDK_TYPE_PIXBUF,
 							G_PARAM_READWRITE));
 
+  g_object_class_install_property (object_class,
+				   PROP_LOGO_ICON_NAME,
+				   g_param_spec_string ("logo_icon_name",
+							P_("Logo Icon Name"),
+							P_("A named icon to use as the logo for the about box."),
+							NULL,
+							G_PARAM_READWRITE));
+
   /* Style properties */
   gtk_widget_class_install_style_property (widget_class,
                                            g_param_spec_boxed ("link_color",
@@ -448,6 +457,9 @@ gtk_about_dialog_set_property (GObject  
     case PROP_TRANSLATOR_CREDITS:
       gtk_about_dialog_set_translator_credits (about, g_value_get_string (value));
       break;
+    case PROP_LOGO_ICON_NAME:
+      gtk_about_dialog_set_logo_icon_name (about, g_value_get_string (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -499,7 +511,22 @@ gtk_about_dialog_get_property (GObject  
       g_value_set_boxed (value, priv->artists);
       break;
     case PROP_LOGO:
-      g_value_set_object (value, gtk_image_get_pixbuf (GTK_IMAGE (priv->logo_image)));
+      if (gtk_image_get_storage_type (GTK_IMAGE (priv->logo_image)) == GTK_IMAGE_PIXBUF)
+	g_value_set_object (value, gtk_image_get_pixbuf (GTK_IMAGE (priv->logo_image)));
+      else
+	g_value_set_object (value, NULL);
+      break;
+    case PROP_LOGO_ICON_NAME:
+      if (gtk_image_get_storage_type (GTK_IMAGE (priv->logo_image)) == GTK_IMAGE_ICON_NAME)
+	{
+	  gchar *icon_name;
+
+	  gtk_image_get_icon_name (GTK_IMAGE (priv->logo_image),
+				   &icon_name, NULL);
+	  g_value_set_string (value, icon_name);
+	}
+      else
+	g_value_set_string (value, NULL);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1217,7 +1244,10 @@ gtk_about_dialog_get_logo (GtkAboutDialo
 
   priv = (GtkAboutDialogPrivate *)about->private_data;
 
-  return gtk_image_get_pixbuf (GTK_IMAGE (priv->logo_image));
+  if (gtk_image_get_storage_type (GTK_IMAGE (priv->logo_image)) == GTK_IMAGE_PIXBUF)
+    return gtk_image_get_pixbuf (GTK_IMAGE (priv->logo_image));
+  else
+    return NULL;
 }
 
 static GtkIconSet *
@@ -1260,6 +1290,11 @@ gtk_about_dialog_set_logo (GtkAboutDialo
 
   priv = (GtkAboutDialogPrivate *)about->private_data;
 
+  g_object_freeze_notify (G_OBJECT (about));
+
+  if (gtk_image_get_storage_type (GTK_IMAGE (priv->logo_image)) == GTK_IMAGE_ICON_NAME)
+    g_object_notify (G_OBJECT (about), "logo_icon_name");
+
   if (logo != NULL) 
     gtk_image_set_from_pixbuf (GTK_IMAGE (priv->logo_image), logo);
   else 
@@ -1279,6 +1314,70 @@ gtk_about_dialog_set_logo (GtkAboutDialo
     }
 
   g_object_notify (G_OBJECT (about), "logo");
+
+  g_object_thaw_notify (G_OBJECT (about));
+}
+
+/**
+ * gtk_about_dialog_get_logo_icon_name:
+ * @about: a #GtkAboutDialog
+ * 
+ * Returns the icon name displayed as logo in the about dialog.
+ * 
+ * Return value: the icon name displayed as logo. The string is
+ *   owned by the about dialog. If you want to keep a reference
+ *   to it, you have to call g_strdup() on it.
+ *
+ * Since: 2.6
+ **/
+G_CONST_RETURN gchar *
+gtk_about_dialog_get_logo_icon_name (GtkAboutDialog *about)
+{
+  GtkAboutDialogPrivate *priv;
+  gchar *icon_name = NULL;
+  
+  g_return_val_if_fail (GTK_IS_ABOUT_DIALOG (about), NULL);
+
+  priv = (GtkAboutDialogPrivate *)about->private_data;
+
+  if (gtk_image_get_storage_type (GTK_IMAGE (priv->logo_image)) == GTK_IMAGE_ICON_NAME)
+    gtk_image_get_icon_name (GTK_IMAGE (priv->logo_image), &icon_name, NULL);
+
+  return icon_name;
+}
+
+/**
+ * gtk_about_dialog_set_logo_icon_name:
+ * @about: a #GtkAboutDialog
+ * @icon_name: an icon name, or %NULL
+ * 
+ * Sets the pixbuf to be displayed as logo in 
+ * the about dialog. If it is %NULL, the default
+ * window icon set with gtk_window_set_default_icon ()
+ * will be used.
+ *
+ * Since: 2.6
+ **/
+void
+gtk_about_dialog_set_logo_icon_name (GtkAboutDialog *about,
+				     const gchar    *icon_name)
+{
+  GtkAboutDialogPrivate *priv;
+
+  g_return_if_fail (GTK_IS_ABOUT_DIALOG (about));
+
+  priv = (GtkAboutDialogPrivate *)about->private_data;
+
+  g_object_freeze_notify (G_OBJECT (about));
+
+  if (gtk_image_get_storage_type (GTK_IMAGE (priv->logo_image)) == GTK_IMAGE_PIXBUF)
+    g_object_notify (G_OBJECT (about), "logo");
+
+  gtk_image_set_from_icon_name (GTK_IMAGE (priv->logo_image), icon_name,
+				GTK_ICON_SIZE_DIALOG);
+  g_object_notify (G_OBJECT (about), "logo_icon_name");
+
+  g_object_thaw_notify (G_OBJECT (about));
 }
 
 static void
Index: gtk/gtkaboutdialog.h
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkaboutdialog.h,v
retrieving revision 1.2
diff -u -p -r1.2 gtkaboutdialog.h
--- gtk/gtkaboutdialog.h	13 Aug 2004 01:10:38 -0000	1.2
+++ gtk/gtkaboutdialog.h	25 Oct 2004 10:54:49 -0000
@@ -100,6 +100,9 @@ void                   gtk_about_dialog_
 GdkPixbuf             *gtk_about_dialog_get_logo               (GtkAboutDialog  *about);
 void                   gtk_about_dialog_set_logo               (GtkAboutDialog  *about,
 								GdkPixbuf       *logo);
+G_CONST_RETURN gchar  *gtk_about_dialog_get_logo_icon_name     (GtkAboutDialog  *about);
+void                   gtk_about_dialog_set_logo_icon_name     (GtkAboutDialog  *about,
+								const gchar     *icon_name);
 
 typedef void (* GtkAboutDialogActivateLinkFunc) (GtkAboutDialog *about,
 						 const gchar    *link,
