[brasero] New function that lets BraseroTrackDataCfg return its GIcon
- From: Philippe Rouquier <philippr src gnome org>
- To: svn-commits-list gnome org
- Subject: [brasero] New function that lets BraseroTrackDataCfg return its GIcon
- Date: Sun, 26 Jul 2009 12:19:39 +0000 (UTC)
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]