Fixed crash when trying to get the label of a non-existant variable.
[pspp-builds.git] / src / ui / gui / compute-dialog.c
index 553d55fffbb61b8d41a4ed4628b103d9ecd559a4..9eafc2c2b84e3be47dab73660a088fbc9c4e17e7 100644 (file)
@@ -34,12 +34,14 @@ static void function_list_populate (GtkTreeView *tv);
 
 static void insert_function_into_syntax_area (GtkTreeIter iter,
                                              GtkWidget *text_view,
-                                             GtkTreeModel *model
+                                             GtkTreeModel *model,
+                                             gpointer data
                                              );
 
 static void insert_source_row_into_text_view (GtkTreeIter iter,
                                              GtkWidget *dest,
-                                             GtkTreeModel *model
+                                             GtkTreeModel *model,
+                                             gpointer data
                                              );
 
 
@@ -151,7 +153,7 @@ generate_syntax (const struct compute_dialog *cd)
   gchar *text;
   GString *string ;
   const gchar *target_name ;
-  const gchar *expression;
+  gchar *expression;
   const gchar *label;
   GtkTextIter start, end;
   GtkWidget *target = get_widget_assert   (cd->xml, "compute-entry1");
@@ -206,6 +208,9 @@ generate_syntax (const struct compute_dialog *cd)
 
   g_string_append (string, "EXECUTE.\n");
 
+
+  g_free (expression);
+
   text = string->str;
 
   g_string_free (string, FALSE);
@@ -320,10 +325,15 @@ on_expression_toggle (GtkToggleButton *button, gpointer data)
        (GTK_ENTRY (get_widget_assert (cd->xml, "compute-entry1")));
 
       target_var = psppire_dict_lookup_var (cd->dict, target_name);
-      label = var_get_label (target_var);
+      if ( target_var )
+       {
+         label = var_get_label (target_var);
 
-      if ( label )
-       gtk_entry_set_text (GTK_ENTRY (entry), label);
+         if ( label )
+           gtk_entry_set_text (GTK_ENTRY (entry), label);
+       }
+      else
+       gtk_entry_set_text (GTK_ENTRY (entry), "");
 
       gtk_widget_set_sensitive (entry, TRUE);
     }
@@ -401,6 +411,7 @@ compute_dialog (GObject *o, gpointer data)
   psppire_selector_set_subjects (PSPPIRE_SELECTOR (var_selector),
                                 dict_view, syntax_area,
                                 insert_source_row_into_text_view,
+                                NULL,
                                 NULL);
 
 
@@ -409,6 +420,7 @@ compute_dialog (GObject *o, gpointer data)
   psppire_selector_set_subjects (PSPPIRE_SELECTOR (func_selector),
                                 functions, syntax_area,
                                 insert_function_into_syntax_area,
+                                NULL,
                                 NULL);
 
 
@@ -527,7 +539,8 @@ function_list_populate (GtkTreeView *tv)
 static void
 insert_function_into_syntax_area (GtkTreeIter iter,
                                  GtkWidget *text_view,
-                                 GtkTreeModel *model
+                                 GtkTreeModel *model,
+                                 gpointer data
                                  )
 {
   GString *string;
@@ -590,7 +603,8 @@ insert_function_into_syntax_area (GtkTreeIter iter,
 static void
 insert_source_row_into_text_view (GtkTreeIter iter,
                                  GtkWidget *dest,
-                                 GtkTreeModel *model
+                                 GtkTreeModel *model,
+                                 gpointer data
                                  )
 {
   GtkTreePath *path;