[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