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

David Mohr squisher at xfce.org
Fri Apr 18 07:56:31 CEST 2008


Author: squisher
Date: 2008-04-18 05:56:31 +0000 (Fri, 18 Apr 2008)
New Revision: 4613

Modified:
   xfburn/trunk/xfburn/xfburn-burn-data-composition-base-dialog.c
   xfburn/trunk/xfburn/xfburn-burn-image-dialog.c
   xfburn/trunk/xfburn/xfburn-device-box.c
   xfburn/trunk/xfburn/xfburn-device-list.c
   xfburn/trunk/xfburn/xfburn-device-list.h
   xfburn/trunk/xfburn/xfburn-utils.c
Log:
Cleaning up debugging statements.
Make disc status messages more precise.
Disable burn button in burn compilation dialog if the disc is not valid.
Try one more time to grab drive in the device list.


Modified: xfburn/trunk/xfburn/xfburn-burn-data-composition-base-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-burn-data-composition-base-dialog.c	2008-04-17 21:54:07 UTC (rev 4612)
+++ xfburn/trunk/xfburn/xfburn-burn-data-composition-base-dialog.c	2008-04-18 05:56:31 UTC (rev 4613)
@@ -57,6 +57,7 @@
   GtkWidget *hbox_iso;
   GtkWidget *entry_path_iso;
   GtkWidget *check_dummy;
+  GtkWidget *burn_button;
 } XfburnBurnDataCompositionBaseDialogPrivate;
 
 enum {
@@ -74,6 +75,7 @@
 
 static void cb_check_only_iso_toggled (GtkToggleButton * button, XfburnBurnDataCompositionBaseDialog * dialog);
 static void cb_browse_iso (GtkButton * button, XfburnBurnDataCompositionBaseDialog * dialog);
+static void cb_disc_refreshed (GtkWidget *device_box, XfburnDevice *device, XfburnBurnDataCompositionBaseDialog * dialog);
 static void cb_dialog_response (XfburnBurnDataCompositionBaseDialog * dialog, gint response_id,
                                 XfburnBurnDataCompositionBaseDialogPrivate * priv);
 
@@ -144,6 +146,7 @@
 
   /* burning devices list */
   priv->device_box = xfburn_device_box_new (SHOW_CD_WRITERS | SHOW_CDRW_WRITERS | SHOW_MODE_SELECTION | SHOW_SPEED_SELECTION);
+  g_signal_connect (G_OBJECT (priv->device_box), "disc-refreshed", G_CALLBACK (cb_disc_refreshed), obj);
   gtk_widget_show (priv->device_box);
 
   priv->frame_device = xfce_create_framebox_with_content (_("Burning device"), priv->device_box);
@@ -210,13 +213,14 @@
   gtk_widget_show (button);
   gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_CANCEL);
 
-  button = xfce_create_mixed_button ("xfburn-burn-cd", _("_Burn Composition"));
+  priv->burn_button = button = xfce_create_mixed_button ("xfburn-burn-cd", _("_Burn Composition"));
   gtk_widget_show (button);
   gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_OK);
   GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
   gtk_widget_grab_focus (button);
   gtk_widget_grab_default (button);
 
+  cb_disc_refreshed (priv->device_box, xfburn_device_box_get_selected_device (XFBURN_DEVICE_BOX (priv->device_box)), obj);
   g_signal_connect (G_OBJECT (obj), "response", G_CALLBACK (cb_dialog_response), priv);
 }
 
@@ -282,6 +286,16 @@
   xfburn_browse_for_file (GTK_ENTRY (priv->entry_path_iso), GTK_WINDOW (dialog));
 }
 
+static void
+cb_disc_refreshed (GtkWidget *device_box, XfburnDevice *device, XfburnBurnDataCompositionBaseDialog * dialog)
+{
+  XfburnBurnDataCompositionBaseDialogPrivate *priv = XFBURN_BURN_DATA_COMPOSITION_BASE_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);
+}
+
 typedef struct {
   GtkWidget *dialog_progress;
   struct burn_source *src;

Modified: xfburn/trunk/xfburn/xfburn-burn-image-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-burn-image-dialog.c	2008-04-17 21:54:07 UTC (rev 4612)
+++ xfburn/trunk/xfburn/xfburn-burn-image-dialog.c	2008-04-18 05:56:31 UTC (rev 4613)
@@ -141,8 +141,6 @@
   GtkWidget *image_label;
   XfburnDevice *device;
 
-  gboolean valid_disc;
-
   gtk_window_set_title (GTK_WINDOW (obj), _("Burn image"));
   gtk_window_set_destroy_with_parent (GTK_WINDOW (obj), TRUE);
   icon = gtk_widget_render_icon (GTK_WIDGET (obj), XFBURN_STOCK_BURN_CD, GTK_ICON_SIZE_DIALOG, NULL);
@@ -213,8 +211,6 @@
   gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_CANCEL);
 
   priv->burn_button = xfce_create_mixed_button ("xfburn-burn-cd", _("_Burn image"));
-  g_object_get (G_OBJECT (priv->device_box), "get-disc-status", &valid_disc, NULL);
-  gtk_widget_set_sensitive (priv->burn_button, valid_disc);
   gtk_widget_show (priv->burn_button);
   g_signal_connect (G_OBJECT (priv->burn_button), "clicked", G_CALLBACK (cb_clicked_ok), obj);
   gtk_container_add (GTK_CONTAINER( GTK_DIALOG(obj)->action_area), priv->burn_button);
@@ -226,6 +222,7 @@
   g_signal_connect (G_OBJECT (priv->device_box), "device-changed", G_CALLBACK (cb_device_changed), obj);
   g_signal_connect (G_OBJECT (priv->device_box), "disc-refreshed", G_CALLBACK (cb_disc_refreshed), obj);
   g_signal_connect (G_OBJECT (obj), "response", G_CALLBACK (cb_dialog_response), obj);
+  cb_disc_refreshed (XFBURN_DEVICE_BOX (priv->device_box), xfburn_device_box_get_selected_device (XFBURN_DEVICE_BOX (priv->device_box)), obj);
 
   device = xfburn_device_box_get_selected_device (XFBURN_DEVICE_BOX (priv->device_box));
   if (device)
@@ -393,7 +390,7 @@
   XfburnBurnImageDialogPrivate *priv = XFBURN_BURN_IMAGE_DIALOG_GET_PRIVATE (dialog);
   gboolean valid_disc;
 
-  g_object_get (G_OBJECT (priv->device_box), "get-disc-status", &valid_disc, NULL);
+  g_object_get (G_OBJECT (priv->device_box), "valid", &valid_disc, NULL);
   gtk_widget_set_sensitive (priv->burn_button, valid_disc);
 }
 

Modified: xfburn/trunk/xfburn/xfburn-device-box.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-device-box.c	2008-04-17 21:54:07 UTC (rev 4612)
+++ xfburn/trunk/xfburn/xfburn-device-box.c	2008-04-18 05:56:31 UTC (rev 4613)
@@ -40,7 +40,8 @@
   PROP_SHOW_WRITERS_ONLY,
   PROP_SHOW_SPEED_SELECTION,
   PROP_SHOW_MODE_SELECTION,
-  PROP_GET_DISC_STATUS,
+  PROP_DISC_STATUS,
+  PROP_VALID,
 };
 
 enum {
@@ -155,9 +156,13 @@
                                    g_param_spec_boolean ("show-mode-selection", _("Show mode selection"),
                                                         _("Show mode selection combo"), 
                                                         FALSE, G_PARAM_READWRITE));
-  g_object_class_install_property (object_class, PROP_GET_DISC_STATUS,
-                                   g_param_spec_boolean ("get-disc-status", _("Get disc status"),
-                                                        _("Get the status of the disc in the drive"), 
+  g_object_class_install_property (object_class, PROP_DISC_STATUS,
+                                   g_param_spec_int ("disc-status", _("Disc status"),
+                                                      _("The status of the disc in the drive"), 
+                                                      0, BURN_DISC_UNSUITABLE, 0, G_PARAM_READABLE));
+  g_object_class_install_property (object_class, PROP_VALID, 
+                                   g_param_spec_boolean ("valid", _("Is it a valid combination"),
+                                                        _("Is the combination of hardware and disc valid to burn the composition?"), 
                                                         FALSE, G_PARAM_READABLE));
 }
 
@@ -266,7 +271,10 @@
     case PROP_SHOW_MODE_SELECTION:
       g_value_set_boolean (value, priv->show_mode_selection);
       break;
-    case PROP_GET_DISC_STATUS:
+    case PROP_DISC_STATUS:
+      g_value_set_int (value, xfburn_device_list_get_disc_status());
+      break;
+    case PROP_VALID:
       g_value_set_boolean (value, priv->valid_disc);
       break;
     default:
@@ -313,14 +321,28 @@
   XfburnDeviceBoxPrivate *priv = XFBURN_DEVICE_BOX_GET_PRIVATE (box);
   GtkTreeModel *model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->combo_speed));
   GSList *el = device->supported_cdr_speeds;
+  enum burn_disc_status disc_status = xfburn_device_list_get_disc_status ();
 
   gtk_list_store_clear (GTK_LIST_STORE (model));
 
-  priv->valid_disc = (el != NULL);
+  priv->valid_disc = (disc_status == BURN_DISC_BLANK) || (disc_status == BURN_DISC_APPENDABLE);
   gtk_widget_set_sensitive (priv->combo_speed, priv->valid_disc);
 
-  if (el == NULL) {
-    gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Please insert a writeable disc!</span>"));
+  if (!priv->valid_disc) {
+    switch (disc_status) {
+      case BURN_DISC_EMPTY:
+        gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Drive is empty!</span>"));
+        break;
+      case BURN_DISC_FULL:
+        gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Inserted disc is full!</span>"));
+        break;
+      case BURN_DISC_UNSUITABLE:
+        gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Inserted disc is unsuitable!</span>"));
+        break;
+      default:
+        gtk_label_set_markup (GTK_LABEL(priv->status_label), _("<span weight=\"bold\" foreground=\"darkred\" stretch=\"semiexpanded\">Error determining disc!</span>"));
+        DBG ("weird disc_status = %d", disc_status);
+    }
     return;
   } else {
     gtk_label_set_text (GTK_LABEL(priv->status_label), "");
@@ -392,6 +414,7 @@
   xfburn_device_refresh_supported_speeds (device);
 
   fill_combo_speed (box, device);
+
   g_signal_emit (G_OBJECT (box), signals[DISC_REFRESHED], 0, device);
 }
 

Modified: xfburn/trunk/xfburn/xfburn-device-list.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-device-list.c	2008-04-17 21:54:07 UTC (rev 4612)
+++ xfburn/trunk/xfburn/xfburn-device-list.c	2008-04-18 05:56:31 UTC (rev 4613)
@@ -37,6 +37,7 @@
 #include "xfburn-global.h"
 
 static GList *devices = NULL;
+static enum burn_disc_status disc_status;
 
 /*************/
 /* internals */
@@ -82,7 +83,6 @@
   int media_no;
   int factor;
   gint ret;
-  enum burn_disc_status disc_status;
   //int i;
 
   /* empty previous list */
@@ -104,7 +104,7 @@
 
   if (!(disc_status == BURN_DISC_BLANK || disc_status == BURN_DISC_APPENDABLE)) {
     DBG ("disc_status = %d", disc_status);
-    g_warning ("no suitable disc found in drive");
+    g_warning ("no writable / appendable disc found in drive");
     return;
   }
 
@@ -130,12 +130,11 @@
     while (el) {
       gint speed = -1;
       
-      DBG ("libburn speed in kb/s: %d\n", el->write_speed);
       speed = el->write_speed / factor;
       /* FIXME: why do we need no_speed_duplicate? */
       if (speed > 0 && no_speed_duplicate (device->supported_cdr_speeds, speed)) {
-	      device->supported_cdr_speeds = g_slist_prepend (device->supported_cdr_speeds, GINT_TO_POINTER (speed));
-	      DBG ("added speed: %d\n", speed);
+          device->supported_cdr_speeds = g_slist_prepend (device->supported_cdr_speeds, GINT_TO_POINTER (speed));
+        DBG ("added speed: %d kb/s => %d x", el->write_speed, speed);
       } 
 
       el = el->next;
@@ -159,6 +158,12 @@
   return devices;
 }
 
+enum burn_disc_status
+xfburn_device_list_get_disc_status ()
+{
+  return disc_status;
+}
+
 void
 xfburn_device_refresh_supported_speeds (XfburnDevice * device)
 {
@@ -213,6 +218,9 @@
     device->cdr = drives[i].write_cdr;
     device->cdrw = drives[i].write_cdrw;
 
+    device->dvdr = drives[i].write_dvdr;
+    device->dvdram = drives[i].write_dvdram;
+    
     device->buffer_size = drives[i].buffer_size;
     device->dummy_write = drives[i].write_simulate;
 
@@ -222,20 +230,10 @@
     device->raw_block_types = drives[i].raw_block_types;
     device->packet_block_types = drives[i].packet_block_types;
 
-    device->dvdr = drives[i].write_dvdr;
-    device->dvdram = drives[i].write_dvdram;
+    can_burn = device->cdr || device->cdrw || device->dvdr || device->dvdram;
     
-    DBG ("Can burn cdr: %d", device->cdr);
-    DBG ("Can burn cdrw: %d", device->cdrw);
-    DBG ("Can burn dvd: %d", device->dvdr);
-    DBG ("Can burn dvdram: %d", device->dvdram);
+    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);
     
-    if (!(device->cdr || device->cdrw || device->dvdr || device->dvdram))
-      can_burn = FALSE;
-    else can_burn = TRUE;
-    
-    DBG ("Can burn: %d", can_burn);
-    
     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);
@@ -259,8 +257,10 @@
 gboolean
 xfburn_device_grab (XfburnDevice * device, struct burn_drive_info **drive_info)
 {
-  gint ret;
+  int ret = 0;
   gchar drive_addr[BURN_DRIVE_ADR_LEN];
+  int i;
+  const int max_checks = 2;
 
   ret = burn_drive_convert_fs_adr (device->addr, drive_addr);
   if (ret <= 0) {
@@ -268,7 +268,14 @@
     return FALSE;
   }
 
-  ret = burn_drive_scan_and_grab (drive_info, drive_addr, 1);
+  for (i=0; i<max_checks; i++) {
+    ret = burn_drive_scan_and_grab (drive_info, drive_addr, 1);
+    if (ret > 0)
+      break;
+    else if  (i < (max_checks-1))
+      usleep(100001);
+  }
+
   if (ret <= 0) {
     g_error ("Unable to grab drive at path '%s' (ret=%d).", device->addr, ret);
     return FALSE;

Modified: xfburn/trunk/xfburn/xfburn-device-list.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-device-list.h	2008-04-17 21:54:07 UTC (rev 4612)
+++ xfburn/trunk/xfburn/xfburn-device-list.h	2008-04-18 05:56:31 UTC (rev 4613)
@@ -51,6 +51,7 @@
 gint xfburn_device_list_init ();
 XfburnDevice * xfburn_device_lookup_by_name (const gchar * name);
 GList * xfburn_device_list_get_list ();
+enum burn_disc_status xfburn_device_list_get_disc_status ();
 void xfburn_device_list_free ();
 
 void xfburn_device_refresh_supported_speeds (XfburnDevice * device);

Modified: xfburn/trunk/xfburn/xfburn-utils.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-utils.c	2008-04-17 21:54:07 UTC (rev 4612)
+++ xfburn/trunk/xfburn/xfburn-utils.c	2008-04-18 05:56:31 UTC (rev 4613)
@@ -141,3 +141,4 @@
 
   gtk_widget_destroy (dialog);
 }
+




More information about the Goodies-commits mailing list