pspp-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pspp-cvs] pspp/src/ui/gui ChangeLog helper.c psppire-case...


From: John Darrington
Subject: [Pspp-cvs] pspp/src/ui/gui ChangeLog helper.c psppire-case...
Date: Tue, 07 Aug 2007 00:56:59 +0000

CVSROOT:        /sources/pspp
Module name:    pspp
Changes by:     John Darrington <jmd>   07/08/07 00:56:59

Modified files:
        src/ui/gui     : ChangeLog helper.c psppire-case-file.c 
                         psppire-data-store.c psppire-data-store.h 

Log message:
        Fixed the two biggest sources of GtkCritical errors.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/ChangeLog?cvsroot=pspp&r1=1.75&r2=1.76
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/helper.c?cvsroot=pspp&r1=1.23&r2=1.24
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-case-file.c?cvsroot=pspp&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-data-store.c?cvsroot=pspp&r1=1.51&r2=1.52
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-data-store.h?cvsroot=pspp&r1=1.19&r2=1.20

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/ChangeLog,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -b -r1.75 -r1.76
--- ChangeLog   6 Aug 2007 02:09:01 -0000       1.75
+++ ChangeLog   7 Aug 2007 00:56:59 -0000       1.76
@@ -1,3 +1,16 @@
+2007-08-07  John Darrington <address@hidden>
+
+       * helper.c (execute_syntax): Set the active file data to NULL at the 
+       end of the procedure.  Thanks to Ben for suggesting this.
+
+       * psppire-case-file.c: Added assertions to the remaining functions 
+       on inaccessible objects.
+
+       * psppire-data-store.c psppire-data-store.h: Disconnect or block 
+       signals on dictionary and case_file, when make_reader has been called. 
+       Reconnect or unblock them when a new datasheet has been set for the 
+       data_store.
+       
 2007-08-06  John Darrington <address@hidden>
 
        * syntax-editor.glade: Changed some properties to be less annoying.

Index: helper.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/helper.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- helper.c    30 Jul 2007 09:28:36 -0000      1.23
+++ helper.c    7 Aug 2007 00:56:59 -0000       1.24
@@ -201,6 +201,8 @@
     psppire_data_store_set_case_file (the_data_store, pcf);
   }
 
+  proc_set_active_file_data (the_dataset, NULL);
+
   som_flush ();
 }
 

Index: psppire-case-file.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-case-file.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- psppire-case-file.c 18 Jul 2007 05:32:22 -0000      1.28
+++ psppire-case-file.c 7 Aug 2007 00:56:59 -0000       1.29
@@ -168,6 +168,7 @@
 {
   g_return_val_if_fail (cf, FALSE);
   g_return_val_if_fail (cf->datasheet, FALSE);
+  g_return_val_if_fail (cf->accessible, FALSE);
 
   g_return_val_if_fail (first + n_cases <=
                        psppire_case_file_get_case_count (cf), FALSE);
@@ -190,6 +191,7 @@
 
   g_return_val_if_fail (cf, FALSE);
   g_return_val_if_fail (cf->datasheet, FALSE);
+  g_return_val_if_fail (cf->accessible, FALSE);
 
   case_clone (&tmp, cc);
   result = datasheet_insert_rows (cf->datasheet, posn, &tmp, 1);
@@ -204,7 +206,7 @@
 
 
 /* Append a case to the case file */
-gboolean
+static gboolean
 psppire_case_file_append_case (PsppireCaseFile *cf,
                              struct ccase *c)
 {
@@ -214,6 +216,7 @@
 
   g_return_val_if_fail (cf, FALSE);
   g_return_val_if_fail (cf->datasheet, FALSE);
+  g_return_val_if_fail (cf->accessible, FALSE);
 
   posn = datasheet_get_row_cnt (cf->datasheet);
 

Index: psppire-data-store.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-data-store.c,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -b -r1.51 -r1.52
--- psppire-data-store.c        29 Jul 2007 07:56:53 -0000      1.51
+++ psppire-data-store.c        7 Aug 2007 00:56:59 -0000       1.52
@@ -178,6 +178,8 @@
   data_store->dict = 0;
   data_store->case_file = 0;
   data_store->width_of_m = 10;
+
+
 }
 
 const PangoFontDescription *
@@ -384,36 +386,55 @@
 
 
 void
-psppire_data_store_set_case_file (PsppireDataStore *data_store,
+psppire_data_store_set_case_file (PsppireDataStore *ds,
                                  PsppireCaseFile *cf)
 {
-  if ( data_store->case_file)
+  gint i;
+  if ( ds->case_file)
     {
-      g_object_unref (data_store->case_file);
+      g_object_unref (ds->case_file);
     }
 
-  data_store->case_file = cf;
+  ds->case_file = cf;
 
-  g_sheet_model_range_changed (G_SHEET_MODEL (data_store),
+  g_sheet_model_range_changed (G_SHEET_MODEL (ds),
                               -1, -1, -1, -1);
 
+  for (i = 0 ; i < n_cf_signals ; ++i )
+    {
+      if ( ds->cf_handler_id [i] > 0 )
+       g_signal_handler_disconnect (ds->case_file,
+                                    ds->cf_handler_id[i]);
+    }
+
+
+  if ( ds->dict )
+    for (i = 0 ; i < n_dict_signals; ++i )
+      {
+       if ( ds->dict_handler_id [i] > 0)
+         {
+           g_signal_handler_unblock (ds->dict,
+                                     ds->dict_handler_id[i]);
+         }
+      }
 
-  g_signal_connect (data_store->case_file, "cases-deleted",
+  ds->cf_handler_id [CASES_DELETED] =
+    g_signal_connect (ds->case_file, "cases-deleted",
                   G_CALLBACK (delete_cases_callback),
-                  data_store);
+                     ds);
 
-  g_signal_connect (data_store->case_file, "case-inserted",
+  ds->cf_handler_id [CASE_INSERTED] =
+    g_signal_connect (ds->case_file, "case-inserted",
                   G_CALLBACK (insert_case_callback),
-                  data_store);
+                     ds);
 
-
-  g_signal_connect (data_store->case_file, "case-changed",
+  ds->cf_handler_id [CASE_CHANGED] =
+    g_signal_connect (ds->case_file, "case-changed",
                   G_CALLBACK (changed_case_callback),
-                  data_store);
+                     ds);
 }
 
 
-
 /**
  * psppire_data_store_replace_set_dictionary:
  * @data_store: The variable store
@@ -425,28 +446,59 @@
 void
 psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict 
*dict)
 {
+  int i;
+
+  /* Disconnect any existing handlers */
+  if ( data_store->dict )
+    for (i = 0 ; i < n_dict_signals; ++i )
+      {
+       g_signal_handler_disconnect (data_store->dict,
+                                    data_store->dict_handler_id[i]);
+      }
+
   data_store->dict = dict;
 
+  if ( dict != NULL)
+    {
+
+      data_store->dict_handler_id [VARIABLE_INSERTED] =
   g_signal_connect (dict, "variable-inserted",
                   G_CALLBACK (insert_variable_callback),
                   data_store);
 
+      data_store->dict_handler_id [VARIABLE_DELETED] =
   g_signal_connect (dict, "variable-deleted",
                   G_CALLBACK (delete_variable_callback),
                   data_store);
 
+      data_store->dict_handler_id [VARIABLE_CHANGED] =
   g_signal_connect (dict, "variable-changed",
                   G_CALLBACK (variable_changed_callback),
                   data_store);
 
+      data_store->dict_handler_id [SIZE_CHANGED] =
   g_signal_connect (dict, "dict-size-changed",
                    G_CALLBACK (dict_size_change_callback),
                    data_store);
+    }
+
+
 
   /* The entire model has changed */
   g_sheet_model_range_changed (G_SHEET_MODEL (data_store), -1, -1, -1, -1);
 
   g_sheet_column_columns_changed (G_SHEET_COLUMN (data_store), 0, -1);
+
+
+  if ( data_store->dict )
+    for (i = 0 ; i < n_dict_signals; ++i )
+      {
+       if ( data_store->dict_handler_id [i] > 0)
+         {
+           g_signal_handler_block (data_store->dict,
+                                   data_store->dict_handler_id[i]);
+         }
+      }
 }
 
 static void
@@ -673,8 +725,22 @@
 struct casereader *
 psppire_data_store_get_reader (PsppireDataStore *ds)
 {
+  int i;
   struct casereader *reader ;
 
+  for (i = 0 ; i < n_cf_signals ; ++i )
+    {
+      g_signal_handler_disconnect (ds->case_file, ds->cf_handler_id[i]);
+      ds->cf_handler_id[i] = 0 ;
+    }
+
+  if ( ds->dict )
+    for (i = 0 ; i < n_dict_signals; ++i )
+      {
+       g_signal_handler_block (ds->dict,
+                               ds->dict_handler_id[i]);
+      }
+
   reader = psppire_case_file_make_reader (ds->case_file);
 
   return reader;
@@ -835,7 +901,7 @@
   glong row  = pixel / ROW_HEIGHT;
 
   if (row >= geometry_get_row_count (geo, data))
-    row = geometry_get_row_count (geo, data) -1;
+    row = geometry_get_row_count (geo, data) - 1;
 
   return row;
 }

Index: psppire-data-store.h
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-data-store.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- psppire-data-store.h        29 Jul 2007 07:56:53 -0000      1.19
+++ psppire-data-store.h        7 Aug 2007 00:56:59 -0000       1.20
@@ -56,6 +56,26 @@
 
 struct dictionary;
 
+
+enum cf_signal_handler {
+  CASES_DELETED,
+  CASE_INSERTED,
+  CASE_CHANGED,
+  n_cf_signals
+};
+
+
+enum dict_signal_handler {
+  VARIABLE_INSERTED,
+  VARIABLE_CHANGED,
+  VARIABLE_DELETED,
+  SIZE_CHANGED,
+  n_dict_signals
+};
+
+void do_this_thing (PsppireDict *, struct dictionary *, void *);
+
+
 struct _PsppireDataStore
 {
   GObject parent;
@@ -72,6 +92,9 @@
 
   /* Geometry */
   gint margin_width;
+
+  gint cf_handler_id [n_cf_signals];
+  gint dict_handler_id [n_dict_signals];
 };
 
 struct _PsppireDataStoreClass




reply via email to

[Prev in Thread] Current Thread [Next in Thread]