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

David Mohr squisher at xfce.org
Wed Jul 9 20:45:08 CEST 2008


Author: squisher
Date: 2008-07-09 18:45:08 +0000 (Wed, 09 Jul 2008)
New Revision: 5039

Modified:
   xfburn/trunk/xfburn/xfburn-blank-dialog.c
   xfburn/trunk/xfburn/xfburn-blank-dialog.h
   xfburn/trunk/xfburn/xfburn-burn-data-composition-base-dialog.c
   xfburn/trunk/xfburn/xfburn-data-composition.c
   xfburn/trunk/xfburn/xfburn-device-box.c
   xfburn/trunk/xfburn/xfburn-hal-manager.c
   xfburn/trunk/xfburn/xfburn-hal-manager.h
   xfburn/trunk/xfburn/xfburn-utils.c
   xfburn/trunk/xfburn/xfburn-utils.h
Log:
Give option to blank disc if burn dialog comes up and a full but erasable disc is in the drive

Modified: xfburn/trunk/xfburn/xfburn-blank-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-blank-dialog.c	2008-07-09 16:29:27 UTC (rev 5038)
+++ xfburn/trunk/xfburn/xfburn-blank-dialog.c	2008-07-09 18:45:08 UTC (rev 5039)
@@ -30,11 +30,19 @@
 #include "xfburn-progress-dialog.h"
 #include "xfburn-device-box.h"
 #include "xfburn-stock.h"
+#include "xfburn-hal-manager.h"
 
 #include "xfburn-blank-dialog.h"
 
 #define XFBURN_BLANK_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), XFBURN_TYPE_BLANK_DIALOG, XfburnBlankDialogPrivate))
 
+#define XFBURN_BLANK_DIALOG_EJECT_DEFAULT TRUE
+
+enum {
+  PROP_0,
+  PROP_EJECT,
+};
+
 typedef struct
 {
   GtkWidget *device_box;
@@ -42,6 +50,7 @@
   GtkWidget *button_blank;
   
   GtkWidget *check_eject;
+  gboolean eject;
 } XfburnBlankDialogPrivate;
 
 /* FIXME: the 128MB comes from cdrskin, but why? Is this really complete? */
@@ -83,6 +92,8 @@
 
 static void xfburn_blank_dialog_class_init (XfburnBlankDialogClass * klass);
 static void xfburn_blank_dialog_init (XfburnBlankDialog * sp);
+static void xfburn_blank_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
+static void xfburn_blank_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
 
 static gboolean is_valid_blank_mode (XfburnDevice *device, XfburnBlankMode mode);
 static void fill_combo_mode (XfburnBlankDialog *dialog);
@@ -124,12 +135,51 @@
 static void
 xfburn_blank_dialog_class_init (XfburnBlankDialogClass * klass)
 {
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
   parent_class = g_type_class_peek_parent (klass);
+  object_class->set_property = xfburn_blank_dialog_set_property;
+  object_class->get_property = xfburn_blank_dialog_get_property;
   
   g_type_class_add_private (klass, sizeof (XfburnBlankDialogPrivate));
+
+  g_object_class_install_property (object_class, PROP_EJECT, 
+                                   g_param_spec_boolean ("eject", _("Eject the disc"),
+                                                        _("Default value for eject checkbox"), XFBURN_BLANK_DIALOG_EJECT_DEFAULT, G_PARAM_READWRITE));
 }
 
 static void
+xfburn_blank_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+  XfburnBlankDialogPrivate *priv = XFBURN_BLANK_DIALOG_GET_PRIVATE (object);
+
+  switch (prop_id) {
+    case PROP_EJECT:
+      g_value_set_boolean (value, priv->eject);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+xfburn_blank_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+  XfburnBlankDialogPrivate *priv = XFBURN_BLANK_DIALOG_GET_PRIVATE (object);
+  
+  switch (prop_id) {
+    case PROP_EJECT:
+      priv->eject = g_value_get_boolean (value);
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->check_eject), priv->eject);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
 xfburn_blank_dialog_init (XfburnBlankDialog * obj)
 {
   XfburnBlankDialogPrivate *priv = XFBURN_BLANK_DIALOG_GET_PRIVATE (obj);
@@ -180,7 +230,7 @@
   gtk_box_pack_start (box, frame, FALSE, FALSE, BORDER);
 
   priv->check_eject = gtk_check_button_new_with_mnemonic (_("E_ject disk"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->check_eject), TRUE);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->check_eject), XFBURN_BLANK_DIALOG_EJECT_DEFAULT);
   gtk_widget_show (priv->check_eject);
   gtk_box_pack_start (GTK_BOX (vbox), priv->check_eject, FALSE, FALSE, BORDER);
 
@@ -414,6 +464,10 @@
  
   burn_finish ();
   g_free (params);
+
+  gdk_threads_enter ();
+  xfburn_hal_manager_send_volume_changed ();
+  gdk_threads_leave ();
 }
 
 static XfburnBlankMode
@@ -480,3 +534,15 @@
 
   return obj;
 }
+
+GtkWidget *
+xfburn_blank_dialog_new_eject (gboolean eject)
+{
+  GtkWidget *obj;
+
+  obj = xfburn_blank_dialog_new ();
+
+  g_object_set (G_OBJECT (obj), "eject", eject, NULL);
+
+  return obj;
+}

Modified: xfburn/trunk/xfburn/xfburn-blank-dialog.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-blank-dialog.h	2008-07-09 16:29:27 UTC (rev 5038)
+++ xfburn/trunk/xfburn/xfburn-blank-dialog.h	2008-07-09 18:45:08 UTC (rev 5039)
@@ -49,6 +49,7 @@
 
 GtkType xfburn_blank_dialog_get_type ();
 GtkWidget *xfburn_blank_dialog_new ();
+GtkWidget * xfburn_blank_dialog_new_eject (gboolean eject);
 
 G_END_DECLS
 #endif /* XFBURN_BLANK_DIALOG_H */

Modified: xfburn/trunk/xfburn/xfburn-burn-data-composition-base-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-burn-data-composition-base-dialog.c	2008-07-09 16:29:27 UTC (rev 5038)
+++ xfburn/trunk/xfburn/xfburn-burn-data-composition-base-dialog.c	2008-07-09 18:45:08 UTC (rev 5039)
@@ -96,11 +96,12 @@
 static void xfburn_burn_data_composition_base_dialog_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec);
 
 /*
+ * Disabled: change button_proceed functionality
 GtkWidget * create_proceed_button (XfburnBurnDataCompositionBaseDialog * dialog, const gchar *stock, const gchar *text);
 void update_proceed_button (XfburnBurnDataCompositionBaseDialog * dialog);
+static void cb_proceed_clicked (GtkButton * button, XfburnBurnDataCompositionBaseDialog * dialog);
 */
 static void cb_check_only_iso_toggled (GtkToggleButton * button, XfburnBurnDataCompositionBaseDialog * dialog);
-static void cb_proceed_clicked (GtkButton * 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,
@@ -275,12 +276,15 @@
   gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_CANCEL);
 
   priv->button_proceed = button = xfce_create_mixed_button ("xfburn-burn-cd", _("Burn Composition"));
-  //button = create_proceed_button (obj, "xfburn-burn-cd", "");
+  /*
+   * Disabled: change button_proceed functionality
+  button = create_proceed_button (obj, "xfburn-burn-cd", "");
   g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_proceed_clicked), obj);
+  */
 
   gtk_widget_show (button);
-  //gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_OK);
-  gtk_box_pack_start (GTK_BOX (GTK_DIALOG(obj)->action_area), button, TRUE, TRUE, 0);
+  gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_OK);
+  //gtk_box_pack_start (GTK_BOX (GTK_DIALOG(obj)->action_area), button, TRUE, TRUE, 0);
   GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
   gtk_widget_grab_focus (button);
   gtk_widget_grab_default (button);
@@ -390,10 +394,13 @@
   }
 }
 
+/*
+ * Disabled: change button_proceed functionality
 static void
 cb_proceed_clicked (GtkButton * button, XfburnBurnDataCompositionBaseDialog * dialog)
 {
 }
+*/
 
 static void
 cb_browse_iso (GtkButton * button, XfburnBurnDataCompositionBaseDialog * dialog)

Modified: xfburn/trunk/xfburn/xfburn-data-composition.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-data-composition.c	2008-07-09 16:29:27 UTC (rev 5038)
+++ xfburn/trunk/xfburn/xfburn-data-composition.c	2008-07-09 18:45:08 UTC (rev 5039)
@@ -1213,28 +1213,15 @@
 static gboolean
 show_add_home_question_dialog ()
 {
-  GtkMessageDialog *dialog;
-  gint ret;
   gboolean ok = TRUE;
 
   gdk_threads_enter ();
   DBG ("Adding home directory");
-  dialog = (GtkMessageDialog *) gtk_message_dialog_new (NULL,
-                                  GTK_DIALOG_DESTROY_WITH_PARENT,
-                                  GTK_MESSAGE_WARNING,
-                                  GTK_BUTTONS_YES_NO,
-                                  ((const gchar *) _("Adding home directory")));
-  gtk_message_dialog_format_secondary_text (dialog,
-                                  _("You are about to add your home directory to the composition. This is likely to take a very long time, and also to be too big to fit on one disc.\n\nAre you sure you want to proceed?"));
-  ret = gtk_dialog_run (GTK_DIALOG (dialog));
-  switch (ret) {
-    case GTK_RESPONSE_YES:
-      break;
-    default:
-      ok = FALSE;
-  }
-  xfburn_busy_cursor (GTK_DIALOG (dialog)->vbox);
-  gtk_widget_destroy (GTK_WIDGET (dialog));
+  ok = xfburn_ask_yes_no (GTK_MESSAGE_WARNING, ((const gchar *) _("Adding home directory")),
+                          _("You are about to add your home directory to the composition. " \
+                            "This is likely to take a very long time, and also to be too big to fit on one disc.\n\n" \
+                            "Are you sure you want to proceed?")
+                         );
 
   gdk_threads_leave ();
 

Modified: xfburn/trunk/xfburn/xfburn-device-box.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-device-box.c	2008-07-09 16:29:27 UTC (rev 5038)
+++ xfburn/trunk/xfburn/xfburn-device-box.c	2008-07-09 18:45:08 UTC (rev 5039)
@@ -34,6 +34,7 @@
 #include "xfburn-hal-manager.h"
 #include "xfburn-settings.h"
 #include "xfburn-utils.h"
+#include "xfburn-blank-dialog.h"
 
 #define XFBURN_DEVICE_BOX_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), XFBURN_TYPE_DEVICE_BOX, XfburnDeviceBoxPrivate))
 
@@ -94,9 +95,14 @@
   GtkWidget *hbox_mode_selection;
   GtkWidget *combo_mode;
 
+  gboolean have_asked_for_blanking;
 #ifdef HAVE_THUNAR_VFS
   ThunarVfsVolumeManager *thunar_volman;
 #endif
+
+#ifdef HAVE_HAL
+  gulong volume_changed_handlerid;
+#endif
 } XfburnDeviceBoxPrivate;
 
 /* prototypes */
@@ -106,6 +112,7 @@
 static void xfburn_device_box_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 static void xfburn_device_box_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
 
+static guint ask_for_blanking (XfburnDeviceBoxPrivate *priv);
 static void status_label_update (XfburnDeviceBoxPrivate *priv);
 static void update_status_label_visibility ();
 static XfburnDevice * get_selected_device (XfburnDeviceBoxPrivate *priv);
@@ -306,12 +313,11 @@
   gtk_widget_show (priv->status_label);
   gtk_box_pack_start (GTK_BOX (box), priv->status_label, FALSE, FALSE, 0);
 
-
+  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_device), 0);
   g_signal_connect (G_OBJECT (priv->combo_device), "changed", G_CALLBACK (cb_combo_device_changed), box);
-  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_device), 0);
 
 #ifdef HAVE_HAL
-  g_signal_connect (G_OBJECT (xfburn_hal_manager_get_instance ()), "volume-changed", G_CALLBACK (cb_volumes_changed), box);
+  priv->volume_changed_handlerid = g_signal_connect (G_OBJECT (xfburn_hal_manager_get_instance ()), "volume-changed", G_CALLBACK (cb_volumes_changed), box);
 #endif
 #ifdef HAVE_THUNAR_VFS
   priv->thunar_volman = thunar_vfs_volume_manager_get_default ();
@@ -324,6 +330,8 @@
     g_warning ("Error trying to access the thunar-vfs-volume-manager!");
   }
 #endif
+
+  priv->have_asked_for_blanking = FALSE;
 }
 
 static void
@@ -334,11 +342,10 @@
 #ifdef HAVE_THUNAR_VFS
   g_object_unref (priv->thunar_volman);
 #endif
-/*
 #ifdef HAVE_HAL
-  g_object_unref (priv->hal_manager);
+  //g_object_unref (priv->hal_manager);
+  g_signal_handler_disconnect (xfburn_hal_manager_get_instance (), priv->volume_changed_handlerid);
 #endif
-*/
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
@@ -550,6 +557,29 @@
   g_free (text);
 }
 
+static guint
+ask_for_blanking (XfburnDeviceBoxPrivate *priv)
+{
+  gboolean do_blank;
+
+  if (priv->have_asked_for_blanking)
+    return FALSE;
+
+  gdk_threads_enter ();
+  priv->have_asked_for_blanking = TRUE;
+  do_blank = xfburn_ask_yes_no (GTK_MESSAGE_QUESTION, "A full, but erasable disc is in the drive",
+                                         "Do you want to blank the disc, so that it can be used for the upcoming burn process?");
+
+  if (do_blank) {
+    GtkDialog *blank_dialog = GTK_DIALOG (xfburn_blank_dialog_new_eject (FALSE));
+    gtk_dialog_run (blank_dialog);
+    gtk_widget_destroy (GTK_WIDGET (blank_dialog));
+  }
+  gdk_threads_leave ();
+  DBG ("done asking to blank");
+  return FALSE;
+}
+
 static gboolean
 check_disc_validity (XfburnDeviceBoxPrivate *priv)
 {
@@ -561,6 +591,7 @@
   gtk_label_set_text (GTK_LABEL (priv->disc_label), xfburn_device_list_get_profile_name ());
 
   if (!priv->blank_mode) {
+    /* for burning */
     switch (profile_no) {
       case XFBURN_PROFILE_NONE:
         /* empty drive is caught later,
@@ -619,7 +650,12 @@
         }
       }
     }
+
+    if (!priv->valid_disc && disc_status == BURN_DISC_FULL && is_erasable) {
+      g_idle_add ((GSourceFunc) ask_for_blanking, priv);
+    }
   } else {
+    /* for blanking */
     priv->valid_disc = is_erasable; // (disc_status == BURN_DISC_FULL) || (disc_status == BURN_DISC_APPENDABLE);
 
     if (!priv->valid_disc) {
@@ -732,7 +768,7 @@
   xfburn_busy_cursor (priv->combo_device);
 
   device = xfburn_device_box_get_selected_device (box);
-  if (xfburn_device_refresh_supported_speeds (device))
+  if (priv->show_speed_selection && xfburn_device_refresh_supported_speeds (device))
     fill_combo_speed (box, device);
 
   xfburn_default_cursor (priv->combo_device);
@@ -782,6 +818,15 @@
 //(ThunarVfsVolumeManager *volman, gpointer volumes, XfburnDeviceBox *box)
 #endif
 
+static void
+refresh (GtkWidget *widget)
+{
+  XfburnDeviceBox *box = XFBURN_DEVICE_BOX (widget);
+  XfburnDeviceBoxPrivate *priv = XFBURN_DEVICE_BOX_GET_PRIVATE (box);
+
+  cb_combo_device_changed (GTK_COMBO_BOX (priv->combo_device), box);
+}
+
 /******************/
 /* public methods */
 /******************/
@@ -796,6 +841,8 @@
 		      "show-mode-selection", ((flags & SHOW_MODE_SELECTION) != 0),
 		      "blank-mode", ((flags & BLANK_MODE) != 0),
                       NULL);
+  
+  refresh (obj);
 
   return obj;
 }

Modified: xfburn/trunk/xfburn/xfburn-hal-manager.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-hal-manager.c	2008-07-09 16:29:27 UTC (rev 5038)
+++ xfburn/trunk/xfburn/xfburn-hal-manager.c	2008-07-09 18:45:08 UTC (rev 5039)
@@ -254,4 +254,12 @@
   halman = NULL;
 }
 
+void
+xfburn_hal_manager_send_volume_changed ()
+{
+  //gdk_threads_enter ();
+  g_signal_emit (halman, signals[VOLUME_CHANGED], 0);
+  //gdk_threads_leave ();
+}
+
 #endif /* HAVE_HAL */

Modified: xfburn/trunk/xfburn/xfburn-hal-manager.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-hal-manager.h	2008-07-09 16:29:27 UTC (rev 5038)
+++ xfburn/trunk/xfburn/xfburn-hal-manager.h	2008-07-09 18:45:08 UTC (rev 5039)
@@ -57,6 +57,7 @@
 void xfburn_hal_manager_create_global ();
 XfburnHalManager * xfburn_hal_manager_get_instance ();
 void xfburn_hal_manager_shutdown ();
+void xfburn_hal_manager_send_volume_changed ();
 
 G_END_DECLS
 

Modified: xfburn/trunk/xfburn/xfburn-utils.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-utils.c	2008-07-09 16:29:27 UTC (rev 5038)
+++ xfburn/trunk/xfburn/xfburn-utils.c	2008-07-09 18:45:08 UTC (rev 5039)
@@ -142,3 +142,29 @@
   gtk_widget_destroy (dialog);
 }
 
+
+gboolean
+xfburn_ask_yes_no (GtkMessageType type, const gchar *primary_text, const gchar *secondary_text)
+{
+  GtkMessageDialog *dialog;
+  gint ret;
+  gboolean ok = TRUE;
+
+  dialog = (GtkMessageDialog *) gtk_message_dialog_new (NULL,
+                                  GTK_DIALOG_DESTROY_WITH_PARENT,
+                                  type,
+                                  GTK_BUTTONS_YES_NO,
+                                  primary_text);
+  gtk_message_dialog_format_secondary_text (dialog, secondary_text);
+  ret = gtk_dialog_run (GTK_DIALOG (dialog));
+  switch (ret) {
+    case GTK_RESPONSE_YES:
+      break;
+    default:
+      ok = FALSE;
+  }
+  xfburn_busy_cursor (GTK_DIALOG (dialog)->vbox);
+  gtk_widget_destroy (GTK_WIDGET (dialog));
+
+  return ok;
+}

Modified: xfburn/trunk/xfburn/xfburn-utils.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-utils.h	2008-07-09 16:29:27 UTC (rev 5038)
+++ xfburn/trunk/xfburn/xfburn-utils.h	2008-07-09 18:45:08 UTC (rev 5039)
@@ -35,4 +35,6 @@
 guint64 xfburn_calc_dirsize (const gchar *);
 
 void xfburn_browse_for_file (GtkEntry *entry, GtkWindow *parent);
+
+gboolean xfburn_ask_yes_no (GtkMessageType type, const gchar *primary_text, const gchar *secondary_text);
 #endif




More information about the Goodies-commits mailing list