+static void
+psppire_val_labs_dialog_finalize (GObject *obj)
+{
+ PsppireValLabsDialog *dialog = PSPPIRE_VAL_LABS_DIALOG (obj);
+
+ val_labs_destroy (dialog->labs);
+ g_free (dialog->encoding);
+
+ G_OBJECT_CLASS (psppire_val_labs_dialog_parent_class)->finalize (obj);
+}
+
+PsppireValLabsDialog *
+psppire_val_labs_dialog_new (const struct variable *var)
+{
+ PsppireValLabsDialog *obj
+ = PSPPIRE_VAL_LABS_DIALOG (g_object_new (PSPPIRE_TYPE_VAL_LABS_DIALOG,
+ "variable", var,
+ NULL));
+
+ return obj;
+}
+
+struct val_labs *
+psppire_val_labs_dialog_run (GtkWindow *parent_window,
+ const struct variable *var)
+{
+ PsppireValLabsDialog *dialog;
+ struct val_labs *labs;
+
+ dialog = psppire_val_labs_dialog_new (var);
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), parent_window);
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ gtk_widget_show (GTK_WIDGET (dialog));
+
+ gint response = psppire_dialog_run (PSPPIRE_DIALOG (dialog));
+ switch (response)
+ {
+ case GTK_RESPONSE_OK:
+ labs = val_labs_clone (psppire_val_labs_dialog_get_value_labels (dialog));
+ break;
+ default:
+ labs = NULL;
+ break;
+ }
+
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+
+ return labs;
+}