}
+static void
+remove_notify_handlers (PsppireDialog *dialog, GObject *sel)
+{
+ g_signal_handlers_disconnect_by_data (sel, dialog);
+}
+
+
/* Descend the widget tree, connecting appropriate signals to the
psppire_dialog_notify_change callback */
static void
if ( model)
{
- g_signal_connect_swapped (model, "row-changed",
- G_CALLBACK (psppire_dialog_notify_change),
- dialog);
+ g_signal_connect_swapped (model, "row-changed",
+ G_CALLBACK (psppire_dialog_notify_change),
+ dialog);
- g_signal_connect_swapped (model, "row-deleted",
- G_CALLBACK (psppire_dialog_notify_change),
- dialog);
+ g_signal_connect_swapped (model, "row-deleted",
+ G_CALLBACK (psppire_dialog_notify_change),
+ dialog);
- g_signal_connect_swapped (model, "row-inserted",
- G_CALLBACK (psppire_dialog_notify_change),
- dialog);
- }
+ g_signal_connect_swapped (model, "row-inserted",
+ G_CALLBACK (psppire_dialog_notify_change),
+ dialog);
+ g_signal_connect (dialog, "destroy", G_CALLBACK (remove_notify_handlers),
+ model);
+ }
+
g_signal_connect_swapped (selection, "changed",
G_CALLBACK (psppire_dialog_notify_change),
dialog);
}
+static void
+remove_selector_handlers (PsppireSelector *selector, GObject *sel)
+{
+ g_signal_handlers_disconnect_by_data (sel, selector);
+}
+
static void
on_dest_model_changed (PsppireSelector *selector)
{
g_signal_connect (model, "row-deleted", G_CALLBACK (on_dest_data_delete),
selector);
+
+ g_signal_connect (selector, "destroy", G_CALLBACK (remove_selector_handlers), model);
if ( selector->selecting ) return;