[brasero] New function that lets BraseroTrackDataCfg return its GIcon



commit 3999b81d38834737a0f6dcc4c8b882ab4338b820
Author: Philippe Rouquier <bonfire-app wanadoo fr>
Date:   Wed Jul 22 14:49:59 2009 +0200

    New function that lets BraseroTrackDataCfg return its GIcon
    This allows:
    - to fix a problem with GtkEntry when setting an icon
    - display the icon for when an imported session has an icon already set in an autorun.inf

 libbrasero-burn/brasero-track-data-cfg.c |   40 ++++++++++++++++----
 libbrasero-burn/brasero-track-data-cfg.h |    5 ++-
 src/brasero-project-name.c               |   59 +++++++-----------------------
 src/brasero-project-parse.c              |    7 +++-
 4 files changed, 55 insertions(+), 56 deletions(-)
---
diff --git a/libbrasero-burn/brasero-track-data-cfg.c b/libbrasero-burn/brasero-track-data-cfg.c
index 7bbcec9..56ee439 100644
--- a/libbrasero-burn/brasero-track-data-cfg.c
+++ b/libbrasero-burn/brasero-track-data-cfg.c
@@ -41,6 +41,7 @@
 #include <gtk/gtk.h>
 
 #include "brasero-units.h"
+#include "brasero-volume.h"
 
 #include "brasero-track-data-cfg.h"
 
@@ -61,7 +62,7 @@ struct _BraseroTrackDataCfgPrivate
 
 	BraseroFileNode *autorun;
 	BraseroFileNode *icon;
-	gchar *image_path;
+	GFile *image_file;
 
 	BraseroDataTreeModel *tree;
 	guint stamp;
@@ -1722,9 +1723,9 @@ brasero_track_data_clean_autorun (BraseroTrackDataCfg *track)
 
 	priv = BRASERO_TRACK_DATA_CFG_PRIVATE (track);
 
-	if (priv->image_path) {
-		g_free (priv->image_path);
-		priv->image_path = NULL;
+	if (priv->image_file) {
+		g_object_unref (priv->image_file);
+		priv->image_file = NULL;
 	}
 
 	if (priv->autorun) {
@@ -2852,8 +2853,7 @@ brasero_track_data_cfg_span_stop (BraseroTrackDataCfg *track)
 /**
  * This is to handle the icon for the image
  */
-
-const gchar *
+gchar *
 brasero_track_data_cfg_get_icon_path (BraseroTrackDataCfg *track)
 {
 	BraseroTrackDataCfgPrivate *priv;
@@ -2861,7 +2861,31 @@ brasero_track_data_cfg_get_icon_path (BraseroTrackDataCfg *track)
 	g_return_val_if_fail (BRASERO_IS_TRACK_DATA_CFG (track), NULL);
 
 	priv = BRASERO_TRACK_DATA_CFG_PRIVATE (track);
-	return priv->image_path;
+	if (!priv->image_file)
+		return NULL;
+
+	return g_file_get_path (priv->image_file);
+}
+
+GIcon *
+brasero_track_data_cfg_get_icon (BraseroTrackDataCfg *track)
+{
+	gchar *array [] = {"media-optical", NULL};
+	BraseroTrackDataCfgPrivate *priv;
+	BraseroMedium *medium;
+	GIcon *icon;
+
+	g_return_val_if_fail (BRASERO_IS_TRACK_DATA_CFG (track), NULL);
+
+	priv = BRASERO_TRACK_DATA_CFG_PRIVATE (track);
+	if (priv->image_file)
+		icon = g_file_icon_new (priv->image_file);
+	else if ((medium = brasero_data_session_get_loaded_medium (BRASERO_DATA_SESSION (priv->tree))))
+		icon = brasero_volume_get_icon (BRASERO_VOLUME (medium));
+	else
+		icon = g_themed_icon_new_from_names (array, -1);
+
+	return icon;
 }
 
 static gchar *
@@ -3019,7 +3043,7 @@ brasero_track_data_cfg_set_icon (BraseroTrackDataCfg *track,
 		brasero_track_data_cfg_autorun_inf_update (track);
 	}
 
-	priv->image_path = g_strdup (icon_path);
+	priv->image_file = g_file_new_for_path (icon_path);
 	g_signal_emit (track,
 		       brasero_track_data_cfg_signals [ICON_CHANGED],
 		       0);
diff --git a/libbrasero-burn/brasero-track-data-cfg.h b/libbrasero-burn/brasero-track-data-cfg.h
index 0b39473..a7e6cbe 100644
--- a/libbrasero-burn/brasero-track-data-cfg.h
+++ b/libbrasero-burn/brasero-track-data-cfg.h
@@ -171,7 +171,10 @@ brasero_track_data_cfg_span_stop (BraseroTrackDataCfg *track);
  * Icon
  */
 
-const gchar *
+GIcon *
+brasero_track_data_cfg_get_icon (BraseroTrackDataCfg *track);
+
+gchar *
 brasero_track_data_cfg_get_icon_path (BraseroTrackDataCfg *track);
 
 gboolean
diff --git a/src/brasero-project-name.c b/src/brasero-project-name.c
index 29b49a6..0f08b66 100644
--- a/src/brasero-project-name.c
+++ b/src/brasero-project-name.c
@@ -88,18 +88,9 @@ static void
 brasero_project_name_icon_update (BraseroProjectName *self,
 				  BraseroTrackDataCfg *track)
 {
-	GError *error = NULL;
-	GdkPixbuf *pixbuf;
-	const gchar *icon; 
-
-	gtk_entry_set_icon_from_pixbuf (GTK_ENTRY (self),
-					GTK_ENTRY_ICON_PRIMARY,
-					NULL);
-	gtk_entry_set_icon_from_icon_name (GTK_ENTRY (self),
-					   GTK_ENTRY_ICON_PRIMARY,
-					   NULL);
+	GIcon *icon; 
 
-	icon = brasero_track_data_cfg_get_icon_path (track);
+	icon = brasero_track_data_cfg_get_icon (track);
 	if (!icon) {
 		gtk_entry_set_icon_from_icon_name (GTK_ENTRY (self),
 						   GTK_ENTRY_ICON_PRIMARY,
@@ -107,25 +98,11 @@ brasero_project_name_icon_update (BraseroProjectName *self,
 		return;
 	}
 
-	/* Load and convert the image into a pixbuf */
-	pixbuf = gdk_pixbuf_new_from_file_at_scale (icon,
-						    24,
-						    24,
-						    FALSE,
-						    &error);
-	if (!pixbuf) {
-		gtk_entry_set_icon_from_icon_name (GTK_ENTRY (self),
-						   GTK_ENTRY_ICON_PRIMARY,
-						   "media-optical");
-		brasero_project_name_data_icon_error (self, error);
-		g_error_free (error);
-		return;
-	}
+	gtk_entry_set_icon_from_gicon (GTK_ENTRY (self),
+	                               GTK_ENTRY_ICON_PRIMARY,
+	                               icon);
 
-	gtk_entry_set_icon_from_pixbuf (GTK_ENTRY (self),
-					GTK_ENTRY_ICON_PRIMARY,
-					pixbuf);
-	g_object_unref (pixbuf);
+	g_object_unref (icon);
 }
 
 static void
@@ -164,7 +141,7 @@ brasero_project_name_icon_button_clicked (BraseroProjectName *project,
 	BraseroProjectNamePrivate *priv;
 	BraseroTrackDataCfg *track;
 	GtkFileFilter *filter;
-	const gchar *filename;
+	gchar *filename;
 	GError *error = NULL;
 	GtkWidget *chooser;
 	gchar *path;
@@ -197,8 +174,10 @@ brasero_project_name_icon_button_clicked (BraseroProjectName *project,
 	gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (chooser), filter);
 
 	filename = brasero_track_data_cfg_get_icon_path (track);
-	if (filename)
+	if (filename) {
 		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (chooser), filename);
+		g_free (filename);
+	}
 
 	gtk_widget_show (chooser);
 	res = gtk_dialog_run (GTK_DIALOG (chooser));
@@ -508,22 +487,12 @@ brasero_project_name_session_changed (BraseroProjectName *self)
 					  G_CALLBACK (brasero_project_name_icon_changed_cb),
 					  self);
 			brasero_project_name_icon_update (self, track);
-			gtk_entry_set_icon_tooltip_text (GTK_ENTRY (self),
-							 GTK_ENTRY_ICON_PRIMARY,
-							 _("Select an icon for the disc that will appear in file managers"));
 		}
 	}
-	else {
-		gtk_entry_set_icon_from_pixbuf (GTK_ENTRY (self),
-						GTK_ENTRY_ICON_PRIMARY,
-						NULL);
-		gtk_entry_set_icon_from_icon_name (GTK_ENTRY (self),
-						   GTK_ENTRY_ICON_PRIMARY,
-						   NULL);
-		gtk_entry_set_icon_tooltip_text (GTK_ENTRY (self),
-						 GTK_ENTRY_ICON_PRIMARY,
-						 NULL);
-	}
+	else
+		gtk_entry_set_icon_from_gicon (GTK_ENTRY (self),
+		                               GTK_ENTRY_ICON_PRIMARY,
+		                               NULL);
 
 	brasero_track_type_free (type);
 
diff --git a/src/brasero-project-parse.c b/src/brasero-project-parse.c
index e197fc8..840102f 100644
--- a/src/brasero-project-parse.c
+++ b/src/brasero-project-parse.c
@@ -717,14 +717,17 @@ _save_data_track_xml (xmlTextWriter *project,
 	GSList *iter;
 	GSList *tracks;
 	GSList *grafts;
+	gchar *filename;
 	BraseroTrackDataCfg *track;
 
 	tracks = brasero_burn_session_get_tracks (session);
 	track = BRASERO_TRACK_DATA_CFG (tracks->data);
 
-	if (brasero_track_data_cfg_get_icon_path (track)) {
+	filename = brasero_track_data_cfg_get_icon_path (track);
+	if (filename) {
 		/* Write the icon if any */
-		success = xmlTextWriterWriteElement (project, (xmlChar *) "icon", (xmlChar *) brasero_track_data_cfg_get_icon_path (track));
+		success = xmlTextWriterWriteElement (project, (xmlChar *) "icon", (xmlChar *) filename);
+		g_free (filename);
 		if (success < 0)
 			return FALSE;
 	}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]