Destroy datasheet, but not if we've made a reader of it
authorJohn Darrington <john@darrington.wattle.id.au>
Tue, 2 Dec 2008 01:58:52 +0000 (10:58 +0900)
committerJohn Darrington <john@darrington.wattle.id.au>
Tue, 2 Dec 2008 01:58:52 +0000 (10:58 +0900)
src/ui/gui/psppire-data-store.c
src/ui/gui/psppire-data-store.h

index 36d1af78b7569fe2527aec97911972e34c80f4df..2907f5fc09de4f1617a6f87efc6497210913912a 100644 (file)
 #include "xalloc.h"
 #include "xmalloca.h"
 
+
+enum cf_signal_handler {
+  CASES_DELETED,
+  CASE_INSERTED,
+  CASE_CHANGED,
+  n_cf_signals
+};
+
+
 static void psppire_data_store_init            (PsppireDataStore      *data_store);
 static void psppire_data_store_class_init      (PsppireDataStoreClass *class);
 static void psppire_data_store_sheet_model_init (GSheetModelIface *iface);
@@ -405,6 +414,9 @@ psppire_data_store_set_reader (PsppireDataStore *ds,
 {
   gint i;
 
+  if ( ds->datasheet)
+    datasheet_destroy (ds->datasheet);
+
   ds->datasheet = datasheet_create (reader);
 
   g_sheet_model_range_changed (G_SHEET_MODEL (ds),
@@ -750,7 +762,12 @@ psppire_data_store_get_reader (PsppireDataStore *ds)
                                ds->dict_handler_id[i]);
       }
 
-  return  datasheet_make_reader (ds->datasheet);
+  reader =   datasheet_make_reader (ds->datasheet);
+
+  /* We must not reference this again */
+  ds->datasheet = NULL;
+
+  return reader;
 }
 
 
@@ -907,6 +924,7 @@ psppire_data_store_insert_case (PsppireDataStore *ds,
   case_clone (&tmp, cc);
   result = datasheet_insert_rows (ds->datasheet, posn, &tmp, 1);
 
+  g_debug ("Result %d.  Inserted case at posn %ld", result, posn);
   if ( result )
     g_signal_emit (ds, signals [CASE_INSERTED], 0, posn);
   else
index 0e9886337c51c00e1a0200f3dbe68239428d8053..44b11725babd667a32bb561a00bc3c6e896f78a7 100644 (file)
@@ -53,14 +53,6 @@ typedef struct _PsppireDataStoreClass  PsppireDataStoreClass;
 struct dictionary;
 
 
-enum cf_signal_handler {
-  CASES_DELETED,
-  CASE_INSERTED,
-  CASE_CHANGED,
-  n_cf_signals
-};
-
-
 enum dict_signal_handler {
   VARIABLE_INSERTED,
   VARIABLE_CHANGED,
@@ -84,7 +76,7 @@ struct _PsppireDataStore
 
   gboolean show_labels;
 
-  gint cf_handler_id [n_cf_signals];
+  //  gint cf_handler_id [n_cf_signals];
   gint dict_handler_id [n_dict_signals];
 };