[Goodies-commits] r4637 - xfburn/trunk/xfburn

David Mohr squisher at xfce.org
Sun Apr 20 18:45:17 CEST 2008


Author: squisher
Date: 2008-04-20 16:45:17 +0000 (Sun, 20 Apr 2008)
New Revision: 4637

Modified:
   xfburn/trunk/xfburn/xfburn-burn-image-dialog.c
   xfburn/trunk/xfburn/xfburn-device-list.c
Log:
Improving feedback when no speed list can be retrieved

Modified: xfburn/trunk/xfburn/xfburn-burn-image-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-burn-image-dialog.c	2008-04-19 23:35:38 UTC (rev 4636)
+++ xfburn/trunk/xfburn/xfburn-burn-image-dialog.c	2008-04-20 16:45:17 UTC (rev 4637)
@@ -54,6 +54,7 @@
 typedef struct
 {
   GtkWidget *chooser_image;
+  GtkWidget *image_label;
   
   GtkWidget *device_box;
 
@@ -69,12 +70,14 @@
 /* prototypes */
 static void xfburn_burn_image_dialog_class_init (XfburnBurnImageDialogClass * klass);
 static void xfburn_burn_image_dialog_init (XfburnBurnImageDialog * sp);
-static void update_image_label (GtkWidget *file_chooser, GtkWidget *image_label);
 
 void burn_image_dialog_error (XfburnBurnImageDialog * dialog, const gchar * msg_error);
 static void cb_device_changed (XfburnDeviceBox *box, XfburnDevice *device, XfburnBurnImageDialog * dialog);
 static void cb_disc_refreshed (XfburnDeviceBox *box, XfburnDevice *device, XfburnBurnImageDialog * dialog);
 static void cb_dialog_response (XfburnBurnImageDialog * dialog, gint response_id, gpointer user_data);
+
+static void update_image_label (GtkFileChooser *chooser, XfburnBurnImageDialog * dialog);
+static void check_burn_button (XfburnBurnImageDialog * dialog);
 static gboolean check_media (XfburnBurnImageDialog * dialog, ThreadBurnIsoParams *params, struct burn_drive *drive, struct burn_write_opts * burn_options);
 static void cb_clicked_ok (GtkButton * button, gpointer user_data);
 
@@ -114,19 +117,6 @@
   parent_class = g_type_class_peek_parent (klass);
 }
 
-static void update_image_label (GtkWidget *image_label, GtkWidget *file_chooser)
-{
-  if (gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_chooser)) == NULL)
-  {
-  	gtk_label_set_markup (GTK_LABEL(image_label),
-  	                      _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Please select an image to burn!</span>"));   
-  }
-  else
-  {
-    gtk_label_set_text (GTK_LABEL(image_label), "");
-  }
-}
-
 static void
 xfburn_burn_image_dialog_init (XfburnBurnImageDialog * obj)
 {
@@ -138,7 +128,6 @@
   GtkWidget *frame;
   GtkWidget *vbox;
   GtkWidget *button;
-  GtkWidget *image_label;
   XfburnDevice *device;
 
   gtk_window_set_title (GTK_WINDOW (obj), _("Burn image"));
@@ -166,14 +155,12 @@
   gtk_box_pack_start (box, frame, FALSE, FALSE, BORDER);
   
   /* red label for image */
-  image_label = gtk_label_new ("");
-  gtk_widget_show (image_label);
-  gtk_box_pack_start (GTK_BOX (box), image_label, FALSE, FALSE, 0);
-  gtk_label_set_markup (GTK_LABEL(image_label),
-  	                      _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Please select an image to burn!</span>"));
-  g_signal_connect_swapped (G_OBJECT (priv->chooser_image), "selection-changed", 
-  	                		G_CALLBACK (update_image_label),
-  	                		G_OBJECT (image_label));
+  priv->image_label = gtk_label_new ("");
+  gtk_widget_show (priv->image_label);
+  gtk_box_pack_start (GTK_BOX (box), priv->image_label, FALSE, FALSE, 0);
+  gtk_label_set_markup (GTK_LABEL(priv->image_label),
+  	                _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Please select an image to burn!</span>"));
+  g_signal_connect (G_OBJECT (priv->chooser_image), "selection-changed", G_CALLBACK (update_image_label), obj);
     
   /* devices list */
   priv->device_box = xfburn_device_box_new (SHOW_CD_WRITERS | SHOW_CDRW_WRITERS | SHOW_DVD_WRITERS | SHOW_MODE_SELECTION | SHOW_SPEED_SELECTION);
@@ -387,11 +374,7 @@
 static void
 cb_disc_refreshed (XfburnDeviceBox *box, XfburnDevice *device, XfburnBurnImageDialog * dialog) 
 {
-  XfburnBurnImageDialogPrivate *priv = XFBURN_BURN_IMAGE_DIALOG_GET_PRIVATE (dialog);
-  gboolean valid_disc;
-
-  g_object_get (G_OBJECT (priv->device_box), "valid", &valid_disc, NULL);
-  gtk_widget_set_sensitive (priv->burn_button, valid_disc);
+  check_burn_button (dialog);
 }
 
 static void
@@ -414,6 +397,37 @@
   }
 }
 
+static void
+update_image_label (GtkFileChooser *chooser, XfburnBurnImageDialog * dialog)
+{
+  XfburnBurnImageDialogPrivate *priv = XFBURN_BURN_IMAGE_DIALOG_GET_PRIVATE (dialog);
+
+  if (gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser)) == NULL) {
+    gtk_label_set_markup (GTK_LABEL(priv->image_label),
+                          _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Please select an image to burn!</span>"));   
+  } else {
+    gtk_label_set_text (GTK_LABEL(priv->image_label), "");
+    check_burn_button (dialog);
+  }
+}
+
+static void
+check_burn_button (XfburnBurnImageDialog * dialog)
+{
+  XfburnBurnImageDialogPrivate *priv = XFBURN_BURN_IMAGE_DIALOG_GET_PRIVATE (dialog);
+  gboolean valid_disc;
+  gchar *filename;
+
+  g_object_get (G_OBJECT (priv->device_box), "valid", &valid_disc, NULL);
+  filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (priv->chooser_image));
+  if (filename != NULL) {
+    gtk_widget_set_sensitive (priv->burn_button, valid_disc);
+    g_free (filename);
+  } else {
+    gtk_widget_set_sensitive (priv->burn_button, FALSE);
+  }
+}
+
 static gboolean 
 check_media (XfburnBurnImageDialog * dialog, ThreadBurnIsoParams *params, struct burn_drive *drive, struct burn_write_opts * burn_options)
 {

Modified: xfburn/trunk/xfburn/xfburn-device-list.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-device-list.c	2008-04-19 23:35:38 UTC (rev 4636)
+++ xfburn/trunk/xfburn/xfburn-device-list.c	2008-04-20 16:45:17 UTC (rev 4637)
@@ -27,6 +27,7 @@
 
 #include <glib.h>
 #include <libxfce4util/libxfce4util.h>
+#include <libxfcegui4/libxfcegui4.h>
 
 #include <stdlib.h>
 #include <unistd.h>
@@ -39,6 +40,9 @@
 static GList *devices = NULL;
 static enum burn_disc_status disc_status;
 
+#define CAN_BURN_CONDITION device->cdr || device->cdrw || device->dvdr || device->dvdram
+#define DEVICE_INFO_PRINTF "%s can burn: %d [cdr: %d, cdrw: %d, dvdr: %d, dvdram: %d]", device->name, CAN_BURN_CONDITION, device->cdr, device->cdrw, device->dvdr, device->dvdram
+
 /*************/
 /* internals */
 /*************/
@@ -104,14 +108,15 @@
 
   DBG ("disc_status = %d", disc_status);
   if (!(disc_status == BURN_DISC_BLANK || disc_status == BURN_DISC_APPENDABLE)) {
-    g_warning ("no writable / appendable disc found in drive");
+    g_warning ("no writable / appendable disc found in drive, speed list not updated");
     return;
   }
 
   /* fill new list */
   ret = burn_drive_get_speedlist (drive_info->drive, &speed_list);
+  /* speed_list = NULL; DEBUG */ 
 
-  if (ret > 0) {
+  if (ret > 0 && speed_list != NULL) {
     struct burn_speed_descriptor *el = speed_list;
     /* retrieve media type, so we can convert from 'kb/s' into 'x' rating */
     if (burn_disc_get_profile(drive_info->drive, &media_no, media_name) == 1) {
@@ -142,8 +147,10 @@
 
     burn_drive_free_speedlist (&speed_list); 
     device->supported_cdr_speeds = g_slist_sort (device->supported_cdr_speeds, &cmp_ints);
-  } else if (ret == 0) {
-    g_warning ("reported speed list is empty");
+  } else if (ret == 0 || speed_list == NULL) {
+    g_warning ("reported speed list is empty for device:");
+    g_warning (DEVICE_INFO_PRINTF);
+    xfce_err (_("Unable to retrieve the speed list for the drive. This is a bug, please report it to xfburn at xfce.org together with the console output.\nBurning should still work, but if there were problems anyways, please let us know.\nThank you!"));
   } else {
     g_error ("severe error while retrieving speed list");
   }
@@ -230,19 +237,22 @@
     device->raw_block_types = drives[i].raw_block_types;
     device->packet_block_types = drives[i].packet_block_types;
 
-    can_burn = device->cdr || device->cdrw || device->dvdr || device->dvdram;
+    can_burn = CAN_BURN_CONDITION;
     
-    DBG ("%s can burn: %d [cdr: %d, cdrw: %d, dvdr: %d, dvdram: %d]", device->name, can_burn, device->cdr, device->cdrw, device->dvdr, device->dvdram);
+    DBG (DEVICE_INFO_PRINTF);
     
     ret = burn_drive_get_adr (&(drives[i]), device->addr);
     if (ret <= 0)
       g_error ("Unable to get drive %s address (ret=%d). Please report this problem to libburn-hackers at pykix.org", device->name, ret);
 
+    /*
+     * refresh_supported_speeds now gets called when the device box gets initialized
     if (burn_drive_grab (drives[i].drive, 1) == 1) {
       refresh_supported_speeds (device, &(drives[i]));
       burn_drive_release (drives[i].drive, 0);
     } else
       g_warning ("Failed to grab drive %s, did not refresh speed list", device->name);
+    */
     
     if (can_burn)
       devices = g_list_append (devices, device);




More information about the Goodies-commits mailing list