brasero r718 - in trunk: . src



Author: philippr
Date: Tue Apr 15 08:57:31 2008
New Revision: 718
URL: http://svn.gnome.org/viewvc/brasero?rev=718&view=rev

Log:
	fix #525501 â Brasero displays odd burning speeds (1-3-5-etc) instead of even values (2-4-8-etc)

	display only list of speeds returned by drive (there can be only one sometimes) instead of
	making up some with a 2 increment

	* src/brasero-dest-selection.c
	(brasero_dest_selection_save_drive_properties),
	(brasero_dest_selection_set_drive_properties):
	* src/brasero-drive-properties.c
	(brasero_drive_properties_format_disc_speed),
	(brasero_drive_properties_set_drive):
	* src/burn-medium.c (brasero_medium_get_write_speeds),
	(brasero_medium_init_real):
	* src/burn-medium.h:

Modified:
   trunk/ChangeLog
   trunk/src/brasero-dest-selection.c
   trunk/src/brasero-drive-properties.c
   trunk/src/burn-medium.c
   trunk/src/burn-medium.h

Modified: trunk/src/brasero-dest-selection.c
==============================================================================
--- trunk/src/brasero-dest-selection.c	(original)
+++ trunk/src/brasero-dest-selection.c	Tue Apr 15 08:57:31 2008
@@ -103,7 +103,6 @@
 	GConfClient *client;
 	const gchar *path;
 	guint64 rate;
-	guint speed;
 	gchar *key;
 
 	priv = BRASERO_DEST_SELECTION_PRIVATE (self);
@@ -111,18 +110,13 @@
 	client = gconf_client_get_default ();
 
 	rate = brasero_burn_session_get_rate (priv->session);
-	if (brasero_burn_session_get_dest_media (priv->session) & BRASERO_MEDIUM_DVD)
-		speed = BRASERO_RATE_TO_SPEED_DVD (rate);
-	else
-		speed = BRASERO_RATE_TO_SPEED_CD (rate);
-
 	key = brasero_burn_session_get_config_key (priv->session, "speed");
 	if (!key) {
 		g_object_unref (client);
 		return;
 	}
 
-	gconf_client_set_int (client, key, speed, NULL);
+	gconf_client_set_int (client, key, rate / 1024, NULL);
 	g_free (key);
 
 	key = brasero_burn_session_get_config_key (priv->session, "flags");
@@ -875,12 +869,8 @@
 
 	if (!value)
 		rate = brasero_medium_get_max_write_speed (medium);
-	else if (brasero_medium_get_status (medium) & BRASERO_MEDIUM_DVD) {
-		rate = BRASERO_SPEED_TO_RATE_DVD (gconf_value_get_int (value));
-		gconf_value_free (value);
-	}
 	else {
-		rate = BRASERO_SPEED_TO_RATE_CD (gconf_value_get_int (value));
+		rate = gconf_value_get_int (value) * 1024;
 		gconf_value_free (value);
 	}
 

Modified: trunk/src/brasero-drive-properties.c
==============================================================================
--- trunk/src/brasero-drive-properties.c	(original)
+++ trunk/src/brasero-drive-properties.c	Tue Apr 15 08:57:31 2008
@@ -246,13 +246,13 @@
 	gchar *text;
 
 	if (media & BRASERO_MEDIUM_DVD)
-		text = g_strdup_printf (_("%d x (DVD)"),
+		text = g_strdup_printf (_("%.1f x (DVD)"),
 					BRASERO_RATE_TO_SPEED_DVD (rate));
 	else if (media & BRASERO_MEDIUM_CD)
-		text = g_strdup_printf (_("%d x (CD)"),
+		text = g_strdup_printf (_("%.1f x (CD)"),
 					BRASERO_RATE_TO_SPEED_CD (rate));
 	else
-		text = g_strdup_printf (_("%d x (DVD) %d x (CD)"),
+		text = g_strdup_printf (_("%.1f x (DVD) %.1f x (CD)"),
 					BRASERO_RATE_TO_SPEED_DVD (rate),
 					BRASERO_RATE_TO_SPEED_CD (rate));
 
@@ -270,12 +270,11 @@
 	GtkTreeModel *model;
 	gchar *display_name;
 	GtkTreeIter iter;
-	gint64 max_rate;
-	gchar *header;
-	gint64 rate;
-	gint64 step;
 	gchar *max_text;
+	gint64 *rates;
+	gchar *header;
 	gchar *text;
+	guint i;
 
 	priv = BRASERO_DRIVE_PROPERTIES_PRIVATE (self);
 
@@ -290,12 +289,7 @@
 	/* Speed combo */
 	medium = brasero_drive_get_medium (drive);
 	media = brasero_medium_get_status (medium);
-	max_rate = brasero_medium_get_max_write_speed (medium);
-	if (media & BRASERO_MEDIUM_CD)
-		step = CD_RATE;
-	else
-		step = DVD_RATE;
-
+	rates = brasero_medium_get_write_speeds (medium);
 	model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->speed));
 
 	max_text = g_strdup_printf (_("Max speed"));
@@ -303,26 +297,42 @@
 	gtk_list_store_append (GTK_LIST_STORE (model), &iter);
 	gtk_list_store_set (GTK_LIST_STORE (model), &iter,
 			    PROP_TEXT, max_text,
-			    PROP_RATE, max_rate,
+			    PROP_RATE, rates [0],
 			    -1);
 	g_free (max_text);
 
-	gtk_combo_box_set_active (GTK_COMBO_BOX (priv->speed), 0);
-
-	for (rate = max_rate - step; rate > step; rate -= step * 2) {
-		GtkTreeIter iter;
-
-		text = brasero_drive_properties_format_disc_speed (media, rate);
+	/* fill model */
+	for (i = 0; rates [i] != 0; i ++) {
+		text = brasero_drive_properties_format_disc_speed (media, rates [i]);
 		gtk_list_store_append (GTK_LIST_STORE (model), &iter);
 		gtk_list_store_set (GTK_LIST_STORE (model), &iter,
 				    PROP_TEXT, text,
-				    PROP_RATE, rate,
+				    PROP_RATE, brasero_medium_get_max_write_speed (medium),
 				    -1);
 		g_free (text);
+	}
+
+	/* Set active one preferably max speed */
+	gtk_tree_model_get_iter_first (model, &iter);
+	do {
+		gint64 rate;
+
+		gtk_tree_model_get (model, &iter,
+				    PROP_RATE, &rate,
+				    -1);
 
 		/* we do this to round things and get the closest possible speed */
-		if ((rate / step) == (default_rate / step))
+		if ((rate / 1024) == (default_rate / 1024)) {
 			gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->speed), &iter);
+			break;
+		}
+
+	} while (gtk_tree_model_iter_next (model, &iter));
+
+	/* make sure at least one is active */
+	if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->speed), &iter)) {
+		gtk_tree_model_get_iter_first (model, &iter);
+		gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->speed), &iter);
 	}
 }
 

Modified: trunk/src/burn-medium.c
==============================================================================
--- trunk/src/burn-medium.c	(original)
+++ trunk/src/burn-medium.c	Tue Apr 15 08:57:31 2008
@@ -358,6 +358,25 @@
 	return priv->max_wrt * 1024;
 }
 
+gint64 *
+brasero_medium_get_write_speeds (BraseroMedium *medium)
+{
+	BraseroMediumPrivate *priv;
+	gint64 *speeds;
+	guint max = 0;
+	guint i;
+
+	priv = BRASERO_MEDIUM_PRIVATE (medium);
+
+	while (priv->wr_speeds [max] != 0) max ++;
+
+	speeds = g_new0 (gint64, max + 1);
+	for (i = 0; i < max; i ++)
+		speeds [i] = priv->wr_speeds [i] * 1024;
+
+	return speeds;
+}
+
 /**
  * NOTEs about the following functions:
  * for all closed media (including ROM types) capacity == size of data and 
@@ -1953,6 +1972,7 @@
 brasero_medium_init_real (BraseroMedium *object,
 			  BraseroDeviceHandle *handle)
 {
+	guint i;
 	gchar *name;
 	BraseroBurnResult result;
 	BraseroMediumPrivate *priv;
@@ -1980,6 +2000,24 @@
 		brasero_medium_get_css_feature (object, handle, &code);
 
 	BRASERO_BURN_LOG_DISC_TYPE (priv->info, "media is ");
+
+	if (!priv->wr_speeds)
+		return;
+
+	/* sort write speeds */
+	for (i = 0; priv->wr_speeds [i] != 0; i ++) {
+		guint j;
+
+		for (j = 0; priv->wr_speeds [j] != 0; j ++) {
+			if (priv->wr_speeds [i] < priv->wr_speeds [j]) {
+				gint64 tmp;
+
+				tmp = priv->wr_speeds [i];
+				priv->wr_speeds [i] = priv->wr_speeds [j];
+				priv->wr_speeds [j] = tmp;
+			}
+		}
+	}
 }
 
 static gboolean

Modified: trunk/src/burn-medium.h
==============================================================================
--- trunk/src/burn-medium.h	(original)
+++ trunk/src/burn-medium.h	Tue Apr 15 08:57:31 2008
@@ -37,8 +37,8 @@
 
 #define BRASERO_SPEED_TO_RATE_CD(speed)		(guint) ((speed) * CD_RATE)
 #define BRASERO_SPEED_TO_RATE_DVD(speed)	(guint) ((speed) * DVD_RATE)
-#define BRASERO_RATE_TO_SPEED_CD(rate)		(guint) ((rate) / CD_RATE)
-#define BRASERO_RATE_TO_SPEED_DVD(rate)		(guint) ((rate) / DVD_RATE)
+#define BRASERO_RATE_TO_SPEED_CD(rate)		(gdouble) ((gdouble) (rate) / (gdouble) CD_RATE)
+#define BRASERO_RATE_TO_SPEED_DVD(rate)		(gdouble) ((gdouble) (rate) / (gdouble) DVD_RATE)
 
 #define BRASERO_TYPE_MEDIUM             (brasero_medium_get_type ())
 #define BRASERO_MEDIUM(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), BRASERO_TYPE_MEDIUM, BraseroMedium))
@@ -239,6 +239,9 @@
 gint64
 brasero_medium_get_max_write_speed (BraseroMedium *medium);
 
+gint64 *
+brasero_medium_get_write_speeds (BraseroMedium *medium);
+
 void
 brasero_medium_get_free_space (BraseroMedium *medium,
 			       gint64 *size,



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