[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