diff -dur xfburn-0.4.2.orig/xfburn/xfburn-burn-image-dialog.c xfburn-0.4.2/xfburn/xfburn-burn-image-dialog.c
--- xfburn-0.4.2.orig/xfburn/xfburn-burn-image-dialog.c 2009-07-13 05:24:06.000000000 +0200
+++ xfburn-0.4.2/xfburn/xfburn-burn-image-dialog.c 2009-10-29 23:27:12.000000000 +0100
@@ -66,12 +66,16 @@
GtkWidget *burn_button;
+ XfburnDeviceList *devlist;
+ gulong handler_volchange;
+
ThreadBurnIsoParams *params;
} XfburnBurnImageDialogPrivate;
/* prototypes */
static void xfburn_burn_image_dialog_class_init (XfburnBurnImageDialogClass * klass);
static void xfburn_burn_image_dialog_init (XfburnBurnImageDialog * sp);
+static void xfburn_burn_image_dialog_finalize (GObject *object);
void burn_image_dialog_error (XfburnBurnImageDialog * dialog, const gchar * msg_error);
static void cb_volume_change_end (XfburnDeviceList *devlist, gboolean device_changed, XfburnDevice *device, XfburnBurnImageDialog * dialog);
@@ -115,8 +119,13 @@
static void
xfburn_burn_image_dialog_class_init (XfburnBurnImageDialogClass * klass)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
g_type_class_add_private (klass, sizeof (XfburnBurnImageDialogPrivate));
+
parent_class = g_type_class_peek_parent (klass);
+
+ object_class->finalize = xfburn_burn_image_dialog_finalize;
}
static void
@@ -130,7 +139,6 @@
GtkWidget *frame;
GtkWidget *vbox;
GtkWidget *button;
- XfburnDeviceList *devlist;
XfburnDevice *device;
gtk_window_set_title (GTK_WINDOW (obj), _("Burn image"));
@@ -208,19 +216,28 @@
gtk_widget_grab_focus (priv->burn_button);
gtk_widget_grab_default (priv->burn_button);
- devlist = xfburn_device_list_new ();
+ priv->devlist = xfburn_device_list_new ();
- g_signal_connect (G_OBJECT (devlist), "volume-change-end", G_CALLBACK (cb_volume_change_end), obj);
+ priv->handler_volchange = g_signal_connect (G_OBJECT (priv->devlist), "volume-change-end", G_CALLBACK (cb_volume_change_end), obj);
g_signal_connect (G_OBJECT (obj), "response", G_CALLBACK (cb_dialog_response), obj);
- device = xfburn_device_list_get_current_device (devlist);
+ device = xfburn_device_list_get_current_device (priv->devlist);
- cb_volume_change_end (devlist, TRUE, device, obj);
+ cb_volume_change_end (priv->devlist, TRUE, device, obj);
if (device)
gtk_widget_set_sensitive (priv->check_dummy, xfburn_device_can_dummy_write (device));
+}
- g_object_unref (G_OBJECT (devlist));
+static void
+xfburn_burn_image_dialog_finalize (GObject *object)
+{
+ XfburnBurnImageDialog *dialog = XFBURN_BURN_IMAGE_DIALOG (object);
+ XfburnBurnImageDialogPrivate *priv = XFBURN_BURN_IMAGE_DIALOG_GET_PRIVATE (dialog);
+ g_signal_handler_disconnect (priv->devlist, priv->handler_volchange);
+ g_object_unref (priv->devlist);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
}
/*************/