From: Matthias Clasen Date: Mon, 25 Oct 2004 18:41:11 +0000 (+0000) Subject: Support named icons as logos. (#156378, James Henstridge) X-Git-Url: http://pileus.org/git/?a=commitdiff_plain;h=615deb5728d07f02fabc31718a204e99de13485b;p=~andy%2Fgtk Support named icons as logos. (#156378, James Henstridge) 2004-10-25 Matthias Clasen * gtk/gtkaboutdialog.h: * gtk/gtkaboutdialog.c (gtk_about_dialog_set_logo_icon_name) (gtk_about_dialog_get_logo_icon_name): Support named icons as logos. (#156378, James Henstridge) --- diff --git a/ChangeLog b/ChangeLog index f078f573f..a21e53c18 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2004-10-25 Matthias Clasen + * gtk/gtkaboutdialog.h: + * gtk/gtkaboutdialog.c (gtk_about_dialog_set_logo_icon_name) + (gtk_about_dialog_get_logo_icon_name): Support named icons as + logos. (#156378, James Henstridge) + * gtk/gtkdialog.c (gtk_dialog_set_alternative_button_order): Fix the doc formatting. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index f078f573f..a21e53c18 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,10 @@ 2004-10-25 Matthias Clasen + * gtk/gtkaboutdialog.h: + * gtk/gtkaboutdialog.c (gtk_about_dialog_set_logo_icon_name) + (gtk_about_dialog_get_logo_icon_name): Support named icons as + logos. (#156378, James Henstridge) + * gtk/gtkdialog.c (gtk_dialog_set_alternative_button_order): Fix the doc formatting. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index f078f573f..a21e53c18 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,5 +1,10 @@ 2004-10-25 Matthias Clasen + * gtk/gtkaboutdialog.h: + * gtk/gtkaboutdialog.c (gtk_about_dialog_set_logo_icon_name) + (gtk_about_dialog_get_logo_icon_name): Support named icons as + logos. (#156378, James Henstridge) + * gtk/gtkdialog.c (gtk_dialog_set_alternative_button_order): Fix the doc formatting. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index f078f573f..a21e53c18 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,5 +1,10 @@ 2004-10-25 Matthias Clasen + * gtk/gtkaboutdialog.h: + * gtk/gtkaboutdialog.c (gtk_about_dialog_set_logo_icon_name) + (gtk_about_dialog_get_logo_icon_name): Support named icons as + logos. (#156378, James Henstridge) + * gtk/gtkdialog.c (gtk_dialog_set_alternative_button_order): Fix the doc formatting. diff --git a/gtk/gtkaboutdialog.c b/gtk/gtkaboutdialog.c index b345c640c..8b351541f 100644 --- a/gtk/gtkaboutdialog.c +++ b/gtk/gtkaboutdialog.c @@ -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 (GtkAboutDialogClass *klass) 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 *object, 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,21 @@ gtk_about_dialog_get_property (GObject *object, 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 +1243,10 @@ gtk_about_dialog_get_logo (GtkAboutDialog *about) 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 +1289,11 @@ gtk_about_dialog_set_logo (GtkAboutDialog *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_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 +1313,70 @@ gtk_about_dialog_set_logo (GtkAboutDialog *about, } 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 diff --git a/gtk/gtkaboutdialog.h b/gtk/gtkaboutdialog.h index 7c58eee16..0e5075080 100644 --- a/gtk/gtkaboutdialog.h +++ b/gtk/gtkaboutdialog.h @@ -100,6 +100,9 @@ void gtk_about_dialog_set_translator_credits (GtkAboutDialog 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,