X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-dialog.c;h=d89b3b4ec288f8d9f00fd812a15f72f9d4b49202;hb=876da2249715aa8495343d8a9b1dd9b4a08fc91d;hp=547ff2a4da25c155411b177fbc8ded3ce8ff943b;hpb=f481fd69631024bcdc7dc2369bbc1592d7a43ac7;p=pspp diff --git a/src/ui/gui/psppire-dialog.c b/src/ui/gui/psppire-dialog.c index 547ff2a4da..d89b3b4ec2 100644 --- a/src/ui/gui/psppire-dialog.c +++ b/src/ui/gui/psppire-dialog.c @@ -86,22 +86,6 @@ psppire_dialog_get_type (void) static GObjectClass *parent_class = NULL; -static void -psppire_dialog_finalize (GObject *object) -{ - PsppireDialog *dialog ; - - g_return_if_fail (object != NULL); - g_return_if_fail (PSPPIRE_IS_DIALOG (object)); - - dialog = PSPPIRE_DIALOG (object); - - if (G_OBJECT_CLASS (parent_class)->finalize) - G_OBJECT_CLASS (parent_class)->finalize (object); -} - - - /* Properties */ enum { @@ -286,8 +270,6 @@ psppire_dialog_class_init (PsppireDialogClass *class) G_TYPE_STRING); - object_class->finalize = psppire_dialog_finalize; - parent_class = g_type_class_peek_parent (class); } @@ -371,6 +353,13 @@ psppire_dialog_notify_change (PsppireDialog *dialog) } +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 @@ -445,19 +434,22 @@ connect_notify_signal (GtkWidget *w, gpointer data) 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); @@ -482,6 +474,12 @@ connect_notify_signal (GtkWidget *w, gpointer data) gint psppire_dialog_run (PsppireDialog *dialog) { + gchar *title = NULL; + g_object_get (dialog, "title", &title, NULL); + + if (title == NULL) + g_warning ("PsppireDialog %s has no title", gtk_widget_get_name (GTK_WIDGET (dialog))); + if ( dialog->contents_are_valid != NULL ) gtk_container_foreach (GTK_CONTAINER (dialog->box), connect_notify_signal,