[brasero/gnome-2-26] Backported a few bug fixes from master:



commit e4a515b3989406b4bea823de77994ae6ec5f845a
Author: Philippe Rouquier <bonfire-app wanadoo fr>
Date:   Sun May 17 20:29:11 2009 +0200

    Backported a few bug fixes from master:
    #578970 â?? should allow all text targets, not just UTF8_STRING
    #578977 â?? use g_uri_list_extract_uris
    #578959 â?? brasero crashed with SIGSEGV in g_closure_invoke()
    #579023 â?? No error message when attempting to burn on incorrect medium
    and part of #573807 â?? Image selection filters are badly named
---
 src/brasero-audio-disc.c             |   30 +++++++-----------------
 src/brasero-data-disc.c              |   40 ++++++++++++---------------------
 src/brasero-file-monitor.c           |    4 +-
 src/brasero-image-properties.c       |   10 ++++++--
 src/brasero-image-type-chooser.c     |   11 ++++++++-
 src/brasero-image-type-chooser.h     |    2 +-
 src/brasero-utils.c                  |   29 ++++++++++++++++++++++++
 src/brasero-utils.h                  |    4 +++
 src/brasero-video-disc.c             |   30 +++++++-----------------
 src/plugins/cdrkit/burn-wodim.c      |   18 +++++++++++++-
 src/plugins/cdrtools/burn-cdrecord.c |   17 +++++++++++++-
 11 files changed, 118 insertions(+), 77 deletions(-)

diff --git a/src/brasero-audio-disc.c b/src/brasero-audio-disc.c
index f7f3099..d9ec791 100644
--- a/src/brasero-audio-disc.c
+++ b/src/brasero-audio-disc.c
@@ -3422,7 +3422,10 @@ brasero_audio_disc_clipboard_text_cb (GtkClipboard *clipboard,
 	gchar **array;
 	gchar **item;
 
-	array = g_strsplit_set (text, "\n\r", 0);
+	if (!text)
+		return;
+
+	array = g_uri_list_extract_uris (text);
 	item = array;
 	while (*item) {
 		if (**item != '\0') {
@@ -3446,6 +3449,7 @@ brasero_audio_disc_clipboard_text_cb (GtkClipboard *clipboard,
 
 		item++;
 	}
+	g_strfreev (array);
 }
 
 static void
@@ -3454,26 +3458,10 @@ brasero_audio_disc_clipboard_targets_cb (GtkClipboard *clipboard,
 					 gint n_atoms,
 					 BraseroAudioDisc *disc)
 {
-	GdkAtom *iter;
-	gchar *target;
-
-	iter = atoms;
-	while (n_atoms > 0) {
-		target = gdk_atom_name (*iter);
-
-		if (!strcmp (target, "x-special/gnome-copied-files")
-		||  !strcmp (target, "UTF8_STRING")) {
-			gtk_clipboard_request_text (clipboard,
-						    (GtkClipboardTextReceivedFunc) brasero_audio_disc_clipboard_text_cb,
-						    disc);
-			g_free (target);
-			return;
-		}
-
-		g_free (target);
-		iter++;
-		n_atoms--;
-	}
+	if (brasero_clipboard_selection_may_have_uri (atoms, n_atoms))
+		gtk_clipboard_request_text (clipboard,
+					    (GtkClipboardTextReceivedFunc) brasero_audio_disc_clipboard_text_cb,
+					    disc);
 }
 
 static void
diff --git a/src/brasero-data-disc.c b/src/brasero-data-disc.c
index 66c8f52..e40e572 100644
--- a/src/brasero-data-disc.c
+++ b/src/brasero-data-disc.c
@@ -58,7 +58,7 @@
 #include "burn-track.h"
 #include "burn-session.h"
 #include "brasero-volume.h"
-
+#include "brasero-utils.h"
 
 typedef struct _BraseroDataDiscPrivate BraseroDataDiscPrivate;
 struct _BraseroDataDiscPrivate
@@ -367,12 +367,15 @@ brasero_data_disc_clipboard_text_cb (GtkClipboard *clipboard,
 	gchar **array;
 	gchar **item;
 
-	priv = BRASERO_DATA_DISC_PRIVATE (data->disc);
-
+ 	if (!text)
+ 		goto end;
+ 
+  	priv = BRASERO_DATA_DISC_PRIVATE (data->disc);
+  
 	if (data->reference)
 		parent = brasero_data_project_reference_get (priv->project, data->reference);
-
-	array = g_strsplit_set (text, "\n\r", 0);
+  
+	array = g_uri_list_extract_uris (text);
 	item = array;
 	while (*item) {
 		if (**item != '\0') {
@@ -396,6 +399,7 @@ brasero_data_disc_clipboard_text_cb (GtkClipboard *clipboard,
 	}
 	g_strfreev (array);
 
+end:
 	if (data->reference)
 		brasero_data_project_reference_free (priv->project, data->reference);
 
@@ -409,28 +413,14 @@ brasero_data_disc_clipboard_targets_cb (GtkClipboard *clipboard,
 					BraseroClipData *data)
 {
 	BraseroDataDiscPrivate *priv;
-	GdkAtom *iter;
-	gchar *target;
 
 	priv = BRASERO_DATA_DISC_PRIVATE (data->disc);
-
-	iter = atoms;
-	while (n_atoms) {
-		target = gdk_atom_name (*iter);
-
-		if (!strcmp (target, "x-special/gnome-copied-files")
-		||  !strcmp (target, "UTF8_STRING")) {
-			gtk_clipboard_request_text (clipboard,
-						    (GtkClipboardTextReceivedFunc)
-						    brasero_data_disc_clipboard_text_cb,
-						    data);
-			g_free (target);
-			return;
-		}
-
-		g_free (target);
-		iter++;
-		n_atoms--;
+	if (brasero_clipboard_selection_may_have_uri (atoms, n_atoms)) {
+		gtk_clipboard_request_text (clipboard,
+					    (GtkClipboardTextReceivedFunc)
+					    brasero_data_disc_clipboard_text_cb,
+					    data);
+		return;
 	}
 
 	if (data->reference)
diff --git a/src/brasero-file-monitor.c b/src/brasero-file-monitor.c
index 074d45a..eeeadbc 100644
--- a/src/brasero-file-monitor.c
+++ b/src/brasero-file-monitor.c
@@ -544,12 +544,12 @@ brasero_file_monitor_inotify_monitor_cb (GIOChannel *channel,
 								      &event);
 			}
 			else
-				g_warning ("Unknown (or already deleted) monitored directory = > ignored \n");
+				g_warning ("Unknown (or already deleted) monitored directory = > ignored");
 		}
 		else {
 			GSList *list;
 
-			/* This is an even happening on the top directory there*/
+			/* This is an event happening on the top directory there*/
 			list = callback_data;
 			brasero_file_monitor_inotify_file_event (self,
 								 list,
diff --git a/src/brasero-image-properties.c b/src/brasero-image-properties.c
index e8b5af2..6360c9a 100644
--- a/src/brasero-image-properties.c
+++ b/src/brasero-image-properties.c
@@ -172,6 +172,7 @@ brasero_image_properties_set_formats (BraseroImageProperties *self,
 				      BraseroImageFormat format)
 {
 	BraseroImagePropertiesPrivate *priv;
+	guint num;
 
 	priv = BRASERO_IMAGE_PROPERTIES_PRIVATE (self);
 
@@ -214,12 +215,15 @@ brasero_image_properties_set_formats (BraseroImageProperties *self,
 				  self);
 	}
 
-	brasero_image_type_chooser_set_formats (BRASERO_IMAGE_TYPE_CHOOSER (priv->format),
-					        formats);
+	num = brasero_image_type_chooser_set_formats (BRASERO_IMAGE_TYPE_CHOOSER (priv->format),
+						      formats);
 	brasero_image_type_chooser_set_format (BRASERO_IMAGE_TYPE_CHOOSER (priv->format),
 					       format);
 
-	gtk_widget_show (priv->format);
+	if (num > 1)
+		gtk_widget_show (priv->format);
+	else
+		gtk_widget_hide (priv->format);
 }
 
 static void
diff --git a/src/brasero-image-type-chooser.c b/src/brasero-image-type-chooser.c
index f21d83e..89f4e2c 100644
--- a/src/brasero-image-type-chooser.c
+++ b/src/brasero-image-type-chooser.c
@@ -65,10 +65,11 @@ struct _BraseroImageTypeChooserPrivate {
 
 static GtkHBoxClass *parent_class = NULL;
 
-void
+guint
 brasero_image_type_chooser_set_formats (BraseroImageTypeChooser *self,
 				        BraseroImageFormat formats)
 {
+	guint format_num;
 	GtkTreeIter iter;
 	GtkTreeModel *store;
 	BraseroImageTypeChooserPrivate *priv;
@@ -77,6 +78,8 @@ brasero_image_type_chooser_set_formats (BraseroImageTypeChooser *self,
 
 	priv->updating = TRUE;
 
+	format_num = 0;
+
 	/* clean */
 	store = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->combo));
 	gtk_list_store_clear (GTK_LIST_STORE (store));
@@ -89,6 +92,7 @@ brasero_image_type_chooser_set_formats (BraseroImageTypeChooser *self,
 			    -1);
 
 	if (formats & BRASERO_IMAGE_FORMAT_BIN) {
+		format_num ++;
 		gtk_list_store_append (GTK_LIST_STORE (store), &iter);
 		gtk_list_store_set (GTK_LIST_STORE (store), &iter,
 				    FORMAT_TEXT, _("*.iso image"),
@@ -97,6 +101,7 @@ brasero_image_type_chooser_set_formats (BraseroImageTypeChooser *self,
 	}
 
 	if (formats & BRASERO_IMAGE_FORMAT_CLONE) {
+		format_num ++;
 		gtk_list_store_append (GTK_LIST_STORE (store), &iter);
 		gtk_list_store_set (GTK_LIST_STORE (store), &iter,
 				    FORMAT_TEXT, _("*.raw image"),
@@ -105,6 +110,7 @@ brasero_image_type_chooser_set_formats (BraseroImageTypeChooser *self,
 	}
 
 	if (formats & BRASERO_IMAGE_FORMAT_CUE) {
+		format_num ++;
 		gtk_list_store_append (GTK_LIST_STORE (store), &iter);
 		gtk_list_store_set (GTK_LIST_STORE (store), &iter,
 				    FORMAT_TEXT, _("*.cue image"),
@@ -113,6 +119,7 @@ brasero_image_type_chooser_set_formats (BraseroImageTypeChooser *self,
 	}
 
 	if (formats & BRASERO_IMAGE_FORMAT_CDRDAO) {
+		format_num ++;
 		gtk_list_store_append (GTK_LIST_STORE (store), &iter);
 		gtk_list_store_set (GTK_LIST_STORE (store), &iter,
 				    FORMAT_TEXT, _("*.toc image (cdrdao)"),
@@ -127,6 +134,8 @@ brasero_image_type_chooser_set_formats (BraseroImageTypeChooser *self,
 		brasero_image_type_chooser_set_format (self, priv->format);
 	else
 		brasero_image_type_chooser_set_format (self, BRASERO_IMAGE_FORMAT_NONE);
+
+	return format_num;
 }
 
 void
diff --git a/src/brasero-image-type-chooser.h b/src/brasero-image-type-chooser.h
index ded3113..7935092 100644
--- a/src/brasero-image-type-chooser.h
+++ b/src/brasero-image-type-chooser.h
@@ -56,7 +56,7 @@ struct _BraseroImageTypeChooserClass {
 GType brasero_image_type_chooser_get_type ();
 GtkWidget *brasero_image_type_chooser_new ();
 
-void
+guint
 brasero_image_type_chooser_set_formats (BraseroImageTypeChooser *self,
 				        BraseroImageFormat formats);
 void
diff --git a/src/brasero-utils.c b/src/brasero-utils.c
index 6f5863c..a3b7ad2 100644
--- a/src/brasero-utils.c
+++ b/src/brasero-utils.c
@@ -380,3 +380,32 @@ brasero_utils_message_dialog (GtkWidget *parent,
 	gtk_dialog_run (GTK_DIALOG (message));
 	gtk_widget_destroy (message);
 }
+
+gboolean
+brasero_clipboard_selection_may_have_uri (GdkAtom *atoms,
+					  gint n_atoms)
+{
+	GdkAtom *iter;
+
+	/* Check for a text target */
+	if (gtk_targets_include_text (atoms, n_atoms))
+		return TRUE;
+
+	/* Check for special targets like nautilus' and its file copied */
+	iter = atoms;
+	while (n_atoms > 0) {
+		gchar *target;
+
+		target = gdk_atom_name (*iter);
+		if (!strcmp (target, "x-special/gnome-copied-files")) {
+			g_free (target);
+			return TRUE;
+		}
+		g_free (target);
+
+		iter++;
+		n_atoms--;
+	}
+
+	return FALSE;
+}
diff --git a/src/brasero-utils.h b/src/brasero-utils.h
index 38e6a23..c6f8bfd 100644
--- a/src/brasero-utils.h
+++ b/src/brasero-utils.h
@@ -90,6 +90,10 @@ brasero_utils_message_dialog (GtkWidget *parent,
 			      const gchar *secondary_message,
 			      GtkMessageType type);
 
+gboolean
+brasero_clipboard_selection_may_have_uri (GdkAtom *atoms,
+					  gint n_atoms);
+
 G_END_DECLS
 
 #endif				/* _UTILS_H */
diff --git a/src/brasero-video-disc.c b/src/brasero-video-disc.c
index ae2269d..13e0628 100644
--- a/src/brasero-video-disc.c
+++ b/src/brasero-video-disc.c
@@ -739,7 +739,10 @@ brasero_video_disc_clipboard_text_cb (GtkClipboard *clipboard,
 	gchar **array;
 	gchar **item;
 
-	array = g_strsplit_set (text, "\n\r", 0);
+	if (!text)
+		return;
+
+	array = g_uri_list_extract_uris (text);
 	item = array;
 	while (*item) {
 		if (**item != '\0') {
@@ -761,6 +764,7 @@ brasero_video_disc_clipboard_text_cb (GtkClipboard *clipboard,
 
 		item++;
 	}
+	g_strfreev (array);
 }
 
 static void
@@ -769,26 +773,10 @@ brasero_video_disc_clipboard_targets_cb (GtkClipboard *clipboard,
 					 gint n_atoms,
 					 BraseroVideoDisc *self)
 {
-	GdkAtom *iter;
-	gchar *target;
-
-	iter = atoms;
-	while (n_atoms) {
-		target = gdk_atom_name (*iter);
-
-		if (!strcmp (target, "x-special/gnome-copied-files")
-		||  !strcmp (target, "UTF8_STRING")) {
-			gtk_clipboard_request_text (clipboard,
-						    (GtkClipboardTextReceivedFunc) brasero_video_disc_clipboard_text_cb,
-						    self);
-			g_free (target);
-			return;
-		}
-
-		g_free (target);
-		iter++;
-		n_atoms--;
-	}
+	if (brasero_clipboard_selection_may_have_uri (atoms, n_atoms))
+		gtk_clipboard_request_text (clipboard,
+					    (GtkClipboardTextReceivedFunc) brasero_video_disc_clipboard_text_cb,
+					    self);
 }
 
 static void
diff --git a/src/plugins/cdrkit/burn-wodim.c b/src/plugins/cdrkit/burn-wodim.c
index 5921f8b..0253984 100644
--- a/src/plugins/cdrkit/burn-wodim.c
+++ b/src/plugins/cdrkit/burn-wodim.c
@@ -128,7 +128,13 @@ brasero_wodim_stderr_read (BraseroProcess *process, const gchar *line)
 						BRASERO_BURN_ERROR_DRIVE_BUSY,
 						_("The drive is busy")));
 	}
-
+	else if (strstr (line, "Probably trying to use ultra high speed+ medium on improper writer")) {
+		/* Set a deferred error as this message tends to indicate a failure */
+		brasero_process_deferred_error (process,
+						g_error_new (BRASERO_BURN_ERROR,
+							     BRASERO_BURN_ERROR_MEDIUM_INVALID,
+							     _("The disc is not supported")));
+	}
 	/* REMINDER: these should not be necessary as we checked that already */
 	/**
 	else if (strstr (line, "cannot write medium - incompatible format") != NULL) {
@@ -354,10 +360,18 @@ brasero_wodim_stdout_read (BraseroProcess *process, const gchar *line)
 	else if (g_str_has_prefix (line, "Last chance to quit, ")) {
 		brasero_job_set_dangerous (BRASERO_JOB (process), TRUE);
 	}
-	else if (g_str_has_prefix (line, "Blanking PMA, TOC, pregap")
+/*	else if (g_str_has_prefix (line, "Blanking PMA, TOC, pregap")
 	     ||  strstr (line, "Blanking entire disk")) {
 
 	}
+ */
+	else if (strstr (line, "Disk sub type: Ultra High speed+")) {
+		/* Set a deferred error as this message tends to indicate a failure */
+		brasero_process_deferred_error (process,
+						g_error_new (BRASERO_BURN_ERROR,
+							     BRASERO_BURN_ERROR_MEDIUM_INVALID,
+							     _("The disc is not supported")));
+	}
 	/* This should not happen */
 	/* else if (strstr (line, "Use tsize= option in SAO mode to specify track size")) */
 
diff --git a/src/plugins/cdrtools/burn-cdrecord.c b/src/plugins/cdrtools/burn-cdrecord.c
index 32b2448..b19caf6 100644
--- a/src/plugins/cdrtools/burn-cdrecord.c
+++ b/src/plugins/cdrtools/burn-cdrecord.c
@@ -128,6 +128,13 @@ brasero_cdrecord_stderr_read (BraseroProcess *process, const gchar *line)
 						BRASERO_BURN_ERROR_DRIVE_BUSY,
 						_("The drive is busy")));
 	}
+	else if (strstr (line, "Probably trying to use ultra high speed+ medium on improper writer")) {
+		/* Set a deferred error as this message tends to indicate a failure */
+		brasero_process_deferred_error (process,
+						g_error_new (BRASERO_BURN_ERROR,
+							     BRASERO_BURN_ERROR_MEDIUM_INVALID,
+							     _("The disc is not supported")));
+	}
 
 	/* REMINDER: these should not be necessary as we checked that already */
 	/**
@@ -338,10 +345,18 @@ brasero_cdrecord_stdout_read (BraseroProcess *process, const gchar *line)
 	else if (g_str_has_prefix (line, "Last chance to quit, ")) {
 		brasero_job_set_dangerous (BRASERO_JOB (process), TRUE);
 	}
-	else if (g_str_has_prefix (line, "Blanking PMA, TOC, pregap")
+/*	else if (g_str_has_prefix (line, "Blanking PMA, TOC, pregap")
 	     ||  strstr (line, "Blanking entire disk")) {
 
 	}
+*/
+	else if (strstr (line, "Disk sub type: Ultra High speed+")) {
+		/* Set a deferred error as this message tends to indicate a failure */
+		brasero_process_deferred_error (process,
+						g_error_new (BRASERO_BURN_ERROR,
+							     BRASERO_BURN_ERROR_MEDIUM_INVALID,
+							     _("The disc is not supported")));
+	}
 	/* This should not happen */
 	/* else if (strstr (line, "Use tsize= option in SAO mode to specify track size")) */
 



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