[brasero] Virtualize two methods (add_fs and rm_fs) of BraseroTrackData



commit 7070a87c70d275454291b494282c96b2667e4e53
Author: Philippe Rouquier <bonfire-app wanadoo fr>
Date:   Mon May 18 09:06:47 2009 +0200

    Virtualize two methods (add_fs and rm_fs) of BraseroTrackData
---
 libbrasero-burn/brasero-track-data-cfg.c |   32 +++++++++++++++
 libbrasero-burn/brasero-track-data.c     |   64 +++++++++++++++++++++++-------
 libbrasero-burn/brasero-track-data.h     |    6 +++
 src/brasero-utils.h                      |    4 --
 4 files changed, 87 insertions(+), 19 deletions(-)

diff --git a/libbrasero-burn/brasero-track-data-cfg.c b/libbrasero-burn/brasero-track-data-cfg.c
index 979e712..7096361 100644
--- a/libbrasero-burn/brasero-track-data-cfg.c
+++ b/libbrasero-burn/brasero-track-data-cfg.c
@@ -52,6 +52,9 @@
 typedef struct _BraseroTrackDataCfgPrivate BraseroTrackDataCfgPrivate;
 struct _BraseroTrackDataCfgPrivate
 {
+	BraseroImageFS *forced_fs;
+	BraseroImageFS *banned_fs;
+
 	BraseroDataTreeModel *tree;
 	guint stamp;
 
@@ -1825,6 +1828,30 @@ brasero_track_data_cfg_set_source (BraseroTrackData *track,
 	return BRASERO_BURN_NOT_READY;
 }
 
+static BraseroBurnResult
+brasero_track_data_cfg_add_fs (BraseroTrackData *track,
+			       BraseroImageFS fstype)
+{
+	BraseroTrackDataCfgPrivate *priv;
+
+	priv = BRASERO_TRACK_DATA_CFG_PRIVATE (track);
+	priv->forced |= fstype;
+	priv->banned &= ~(fstype);
+	return BRASERO_BURN_OK;
+}
+
+static BraseroBurnResult
+brasero_track_data_cfg_rm_fs (BraseroTrackData *track,
+			      BraseroImageFS fstype)
+{
+	BraseroTrackDataCfgPrivate *priv;
+
+	priv = BRASERO_TRACK_DATA_CFG_PRIVATE (track);
+	priv->banned |= fstype;
+	priv->forced &= ~(fstype);
+	return BRASERO_BURN_OK;
+}
+
 static BraseroImageFS
 brasero_track_data_cfg_get_fs (BraseroTrackData *track)
 {
@@ -1839,6 +1866,8 @@ brasero_track_data_cfg_get_fs (BraseroTrackData *track)
 	stats = BRASERO_FILE_NODE_STATS (root);
 
 	fs_type = BRASERO_IMAGE_FS_ISO;
+	fs_type |= priv->forced;
+
 	if (brasero_data_project_has_symlinks (BRASERO_DATA_PROJECT (priv->tree)))
 		fs_type |= BRASERO_IMAGE_FS_SYMLINK;
 	else {
@@ -1859,6 +1888,7 @@ brasero_track_data_cfg_get_fs (BraseroTrackData *track)
 	if (stats->num_deep != 0)
 		fs_type |= BRASERO_IMAGE_ISO_FS_DEEP_DIRECTORY;
 
+	fs_type &= ~(priv->banned);
 	return fs_type;
 }
 
@@ -2465,6 +2495,8 @@ brasero_track_data_cfg_class_init (BraseroTrackDataCfgClass *klass)
 	track_class->get_status = brasero_track_data_cfg_get_status;
 
 	parent_class->set_source = brasero_track_data_cfg_set_source;
+	parent_class->set_source = brasero_track_data_cfg_add_fs;
+	parent_class->set_source = brasero_track_data_cfg_rm_fs;
 
 	parent_class->get_fs = brasero_track_data_cfg_get_fs;
 	parent_class->get_grafts = brasero_track_data_cfg_get_grafts;
diff --git a/libbrasero-burn/brasero-track-data.c b/libbrasero-burn/brasero-track-data.c
index 1ee5332..87e7bce 100644
--- a/libbrasero-burn/brasero-track-data.c
+++ b/libbrasero-burn/brasero-track-data.c
@@ -121,44 +121,76 @@ brasero_track_data_set_source (BraseroTrackData *track,
 	return klass->set_source (track, grafts, unreadable);
 }
 
+static BraseroBurnResult
+brasero_track_data_add_fs_real (BraseroTrackData *track,
+				BraseroImageFS fstype)
+{
+	BraseroTrackDataPrivate *priv;
+
+	priv = BRASERO_TRACK_DATA_PRIVATE (track);
+	priv->fs_type |= fstype;
+	return BRASERO_BURN_OK;
+}
+
 BraseroBurnResult
 brasero_track_data_add_fs (BraseroTrackData *track,
 			   BraseroImageFS fstype)
 {
-	BraseroTrackDataPrivate *priv;
+	BraseroTrackDataClass *klass;
+	BraseroImageFS fs_before;
+	BraseroBurnResult result;
 
 	g_return_val_if_fail (BRASERO_IS_TRACK_DATA (track), BRASERO_BURN_NOT_SUPPORTED);
 
-	priv = BRASERO_TRACK_DATA_PRIVATE (track);
+	fs_before = brasero_track_data_get_fs (track);
+	klass = BRASERO_TRACK_DATA_GET_CLASS (track);
+	if (!klass->add_fs)
+		return BRASERO_BURN_NOT_SUPPORTED;
 
-	fstype |= priv->fs_type;
-	if (fstype == priv->fs_type)
-		return BRASERO_BURN_OK;
+	result = klass->add_fs (track, fstype);
+	if (result != BRASERO_BURN_OK)
+		return result;
 
-	priv->fs_type = fstype;
-	brasero_track_changed (BRASERO_TRACK (track));
+	if (fs_before != brasero_track_data_get_fs (track))
+		brasero_track_changed (BRASERO_TRACK (track));
 
 	return BRASERO_BURN_OK;
 }
 
+static BraseroBurnResult
+brasero_track_data_rm_fs_real (BraseroTrackData *track,
+			       BraseroImageFS fstype)
+{
+	BraseroTrackDataPrivate *priv;
+
+	priv = BRASERO_TRACK_DATA_PRIVATE (track);
+	priv->fs_type &= ~(fstype);
+	return BRASERO_BURN_OK;
+}
+
 BraseroBurnResult
 brasero_track_data_rm_fs (BraseroTrackData *track,
 			  BraseroImageFS fstype)
 {
-	BraseroTrackDataPrivate *priv;
-	BraseroImageFS new_fstype;
+	BraseroTrackDataClass *klass;
+	BraseroImageFS fs_before;
+	BraseroBurnResult result;
 
 	g_return_val_if_fail (BRASERO_IS_TRACK_DATA (track), BRASERO_BURN_NOT_SUPPORTED);
 
 	priv = BRASERO_TRACK_DATA_PRIVATE (track);
 
-	new_fstype = priv->fs_type;
-	new_fstype &= ~fstype;
-	if (new_fstype == priv->fs_type)
-		return BRASERO_BURN_OK;
+	fs_before = brasero_track_data_get_fs (track);
+	klass = BRASERO_TRACK_DATA_GET_CLASS (track);
+	if (!klass->rm_fs);
+		return BRASERO_BURN_NOT_SUPPORTED;
 
-	priv->fs_type = new_fstype;
-	brasero_track_changed (BRASERO_TRACK (track));
+	result = klass->rm_fs (track, fstype);
+	if (result != BRASERO_BURN_OK)
+		return result;
+
+	if (fs_before != brasero_track_data_get_fs (track))
+		brasero_track_changed (BRASERO_TRACK (track));
 
 	return BRASERO_BURN_OK;
 }
@@ -402,6 +434,8 @@ brasero_track_data_class_init (BraseroTrackDataClass *klass)
 	track_class->get_size = brasero_track_data_get_size;
 
 	track_data_class->set_source = brasero_track_data_set_source_real;
+	track_data_class->add_fs = brasero_track_data_add_fs_real;
+	track_data_class->rm_fs = brasero_track_data_rm_fs_real;
 
 	track_data_class->get_fs = brasero_track_data_get_fs_real;
 	track_data_class->get_grafts = brasero_track_data_get_grafts_real;
diff --git a/libbrasero-burn/brasero-track-data.h b/libbrasero-burn/brasero-track-data.h
index 3ace6cc..a418239 100644
--- a/libbrasero-burn/brasero-track-data.h
+++ b/libbrasero-burn/brasero-track-data.h
@@ -68,6 +68,12 @@ struct _BraseroTrackDataClass
 	BraseroBurnResult	(*set_source)		(BraseroTrackData *track,
 							 GSList *grafts,
 							 GSList *unreadable);
+	BraseroBurnResult       (*add_fs)		(BraseroTrackData *track,
+							 BraseroImageFS fstype);
+
+	BraseroBurnResult       (*rm_fs)		(BraseroTrackData *track,
+							 BraseroImageFS fstype);
+
 	BraseroImageFS		(*get_fs)		(BraseroTrackData *track);
 	GSList*			(*get_grafts)		(BraseroTrackData *track);
 	GSList*			(*get_excluded)		(BraseroTrackData *track);
diff --git a/src/brasero-utils.h b/src/brasero-utils.h
index 69ab1f7..71cde36 100644
--- a/src/brasero-utils.h
+++ b/src/brasero-utils.h
@@ -55,10 +55,6 @@ brasero_utils_launch_app (GtkWidget *widget,
 			  GSList *list);
 
 gboolean
-brasero_utils_selection_may_have_uri (GdkAtom *atoms,
-				      gint n_atoms);
-
-gboolean
 brasero_clipboard_selection_may_have_uri (GdkAtom *atoms,
 					  gint n_atoms);
 



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