X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-spreadsheet-model.c;h=83a82d44fdd772cdf40ab3112288b8a6ae247263;hb=8ccde6b2cb998a1acb9d8074b25088d839cf658f;hp=d02c1c558c94bcc937ea16881849e95bac4a17f3;hpb=0df9cdd3df66caf4353128feff3008289cda8115;p=pspp diff --git a/src/ui/gui/psppire-spreadsheet-model.c b/src/ui/gui/psppire-spreadsheet-model.c index d02c1c558c..83a82d44fd 100644 --- a/src/ui/gui/psppire-spreadsheet-model.c +++ b/src/ui/gui/psppire-spreadsheet-model.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -/* This file implements a GtkTreeModel. It allows GtkComboBox and +/* This file implements a GtkTreeModel. It allows GtkComboBox and GtkTreeView to display the names and non-empty cell ranges of the sheets aka "Tables" of spreadsheet files. It doesn't take any notice of the spreadsheet data itself. @@ -99,13 +99,14 @@ psppire_spreadsheet_model_set_property (GObject * object, const GValue * value, GParamSpec * pspec) { - PsppireSpreadsheetModel *spreadsheetModel = + PsppireSpreadsheetModel *spreadsheetModel = PSPPIRE_SPREADSHEET_MODEL (object); switch (prop_id) { case PROP_SPREADSHEET: spreadsheetModel->spreadsheet = g_value_get_pointer (value); + spreadsheet_ref (spreadsheetModel->spreadsheet); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -117,6 +118,14 @@ psppire_spreadsheet_model_set_property (GObject * object, static void psppire_spreadsheet_model_dispose (GObject * object) { + PsppireSpreadsheetModel *spreadsheetModel = PSPPIRE_SPREADSHEET_MODEL (object); + + if (!spreadsheetModel->dispose_has_run) + { + spreadsheet_unref (spreadsheetModel->spreadsheet); + + spreadsheetModel->dispose_has_run = TRUE; + } } static void @@ -220,13 +229,10 @@ tree_model_get_iter (GtkTreeModel * model, GtkTreeIter * iter, static gboolean tree_model_iter_next (GtkTreeModel *model, GtkTreeIter *iter) { - PsppireSpreadsheetModel *spreadsheetModel = - PSPPIRE_SPREADSHEET_MODEL (model); + PsppireSpreadsheetModel *spreadsheetModel = PSPPIRE_SPREADSHEET_MODEL (model); + g_assert (iter); g_return_val_if_fail (iter->stamp == spreadsheetModel->stamp, FALSE); - if (iter == NULL) - return FALSE; - if ((intptr_t) iter->user_data >= spreadsheetModel->spreadsheet->n_sheets - 1) { iter->user_data = NULL; @@ -257,7 +263,7 @@ tree_model_get_value (GtkTreeModel * model, GtkTreeIter * iter, const char *x = spreadsheet_get_sheet_name (spreadsheetModel->spreadsheet, (intptr_t) iter->user_data); - + g_value_set_string (value, x); } break; @@ -343,7 +349,7 @@ tree_model_children (GtkTreeModel *model, GtkTreeIter *iter, GtkTreeIter *parent iter->stamp = spreadsheetModel->stamp; iter->user_data = 0; - + return TRUE; }