Blob Blame History Raw
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);
 }
 
 /*************/