[libgda/LIBGDA_4.2] GdaDataModel: better handle the model's "reset" signal
- From: Vivien Malerba <vivien src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda/LIBGDA_4.2] GdaDataModel: better handle the model's "reset" signal
- Date: Wed, 26 Oct 2011 18:42:12 +0000 (UTC)
commit b5c317d76527ebdb26cb2365125d5a580f7bb29c
Author: Vivien Malerba <malerba gnome-db org>
Date: Tue Oct 25 20:43:40 2011 +0200
GdaDataModel: better handle the model's "reset" signal
libgda/gda-data-model-iter.c | 29 +++++++++++++++++++++++------
1 files changed, 23 insertions(+), 6 deletions(-)
---
diff --git a/libgda/gda-data-model-iter.c b/libgda/gda-data-model-iter.c
index 188c3b4..8e28d39 100644
--- a/libgda/gda-data-model-iter.c
+++ b/libgda/gda-data-model-iter.c
@@ -247,9 +247,9 @@ model_row_removed_cb (G_GNUC_UNUSED GdaDataModel *model, gint row, GdaDataModelI
static void
model_reset_cb (GdaDataModel *model, GdaDataModelIter *iter)
{
- /* reset the iter to before the 1st row */
- gda_data_model_iter_invalidate_contents (iter);
- gda_data_model_iter_move_to_row (iter, -1);
+ gint row;
+
+ row = gda_data_model_iter_get_row (iter);
/* adjust GdaHolder's type if a column's type has changed from GDA_TYPE_NULL
* to something else */
@@ -266,6 +266,13 @@ model_reset_cb (GdaDataModel *model, GdaDataModelIter *iter)
gda_column_get_g_type (col), NULL);
}
}
+
+ gda_data_model_iter_invalidate_contents (iter);
+ if (row >= 0)
+ gda_data_model_iter_move_to_row (iter, row);
+ else
+ /* reset the iter to before the 1st row */
+ gda_data_model_iter_move_to_row (iter, -1);
}
/*
@@ -597,8 +604,18 @@ gda_data_model_iter_move_to_row (GdaDataModelIter *iter, gint row)
g_return_val_if_fail (iter->priv, FALSE);
if ((gda_data_model_iter_get_row (iter) >= 0) &&
- (gda_data_model_iter_get_row (iter) == row))
- return TRUE; /* nothing to do! */
+ (gda_data_model_iter_get_row (iter) == row)) {
+ /* refresh @iter's contents */
+ GdaDataModel *model;
+ model = iter->priv->data_model;
+ g_return_val_if_fail (model, FALSE);
+
+ if (GDA_DATA_MODEL_GET_CLASS (model)->i_iter_at_row)
+ return (GDA_DATA_MODEL_GET_CLASS (model)->i_iter_at_row) (model, iter,
+ row);
+ else
+ return gda_data_model_iter_move_to_row_default (model, iter, row);
+ }
if (row < 0) {
if (gda_data_model_iter_get_row (iter) >= 0) {
@@ -615,7 +632,7 @@ gda_data_model_iter_move_to_row (GdaDataModelIter *iter, gint row)
else {
GdaDataModel *model;
model = iter->priv->data_model;
- g_return_val_if_fail (iter->priv->data_model, FALSE);
+ g_return_val_if_fail (model, FALSE);
if (GDA_DATA_MODEL_GET_CLASS (model)->i_iter_at_row) {
if ((gda_data_model_iter_get_row (iter) >= 0) &&
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]