[libgda] Signal handling corrections in GdaDataSelect
- From: Vivien Malerba <vivien src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda] Signal handling corrections in GdaDataSelect
- Date: Fri, 26 Feb 2010 21:46:34 +0000 (UTC)
commit 669f60f161fe73303db617dc18bd841cbe5da8cc
Author: Vivien Malerba <malerba gnome-db org>
Date: Fri Feb 26 18:31:28 2010 +0100
Signal handling corrections in GdaDataSelect
libgda/gda-data-select.c | 39 ++++++++++++++++++++++++++++++++++-----
1 files changed, 34 insertions(+), 5 deletions(-)
---
diff --git a/libgda/gda-data-select.c b/libgda/gda-data-select.c
index b214033..eb9c7cf 100644
--- a/libgda/gda-data-select.c
+++ b/libgda/gda-data-select.c
@@ -92,6 +92,7 @@ struct _GdaDataSelectPrivate {
GdaConnection *cnc;
GdaDataModelIter *iter;
PrivateShareable *sh;
+ gulong ext_params_changed_sig_id;
};
/* properties */
@@ -333,6 +334,7 @@ gda_data_select_init (GdaDataSelect *model, GdaDataSelectClass *klass)
model->priv->sh->reset_with_ext_params_change = FALSE;
model->priv->sh->iter_row = G_MININT;
+ model->priv->ext_params_changed_sig_id = 0;
model->priv->iter = NULL;
model->priv->sh->modif_internals = g_new0 (GdaDataSelectInternals, 1);
@@ -384,8 +386,12 @@ free_private_shared_data (GdaDataSelect *model)
}
if (model->priv->sh->ext_params) {
- g_signal_handlers_disconnect_by_func (model->priv->sh->ext_params,
- G_CALLBACK (ext_params_holder_changed_cb), model);
+ if (model->priv->ext_params_changed_sig_id) {
+ g_signal_handler_disconnect (model->priv->sh->ext_params,
+ model->priv->ext_params_changed_sig_id);
+ model->priv->ext_params_changed_sig_id = 0;
+ }
+
g_object_unref (model->priv->sh->ext_params);
model->priv->sh->ext_params = NULL;
}
@@ -447,6 +453,12 @@ gda_data_select_dispose (GObject *object)
g_object_unref (model->prep_stmt);
model->prep_stmt = NULL;
}
+ if (model->priv->ext_params_changed_sig_id) {
+ g_signal_handler_disconnect (model->priv->sh->ext_params,
+ model->priv->ext_params_changed_sig_id);
+ model->priv->ext_params_changed_sig_id = 0;
+ }
+
free_private_shared_data (model);
g_free (model->priv);
model->priv = NULL;
@@ -654,8 +666,9 @@ gda_data_select_set_property (GObject *object,
set = g_value_get_object (value);
if (set) {
model->priv->sh->ext_params = g_object_ref (set);
- g_signal_connect (model->priv->sh->ext_params, "holder-changed",
- G_CALLBACK (ext_params_holder_changed_cb), model);
+ model->priv->ext_params_changed_sig_id =
+ g_signal_connect (model->priv->sh->ext_params, "holder-changed",
+ G_CALLBACK (ext_params_holder_changed_cb), model);
model->priv->sh->modif_internals->exec_set = gda_set_copy (set);
}
break;
@@ -3358,6 +3371,18 @@ gda_data_select_rerun (GdaDataSelect *model, GError **error)
g_assert (G_OBJECT_TYPE (model) == G_OBJECT_TYPE (new_model));
/* Raw model and new_model contents swap (except for the GObject part) */
+ GdaDataSelect *old_model = new_model; /* renamed for code's readability */
+ if (old_model->priv->ext_params_changed_sig_id) {
+ g_signal_handler_disconnect (old_model->priv->sh->ext_params,
+ old_model->priv->ext_params_changed_sig_id);
+ old_model->priv->ext_params_changed_sig_id = 0;
+ }
+ if (model->priv->ext_params_changed_sig_id) {
+ g_signal_handler_disconnect (model->priv->sh->ext_params,
+ model->priv->ext_params_changed_sig_id);
+ model->priv->ext_params_changed_sig_id = 0;
+ }
+
GTypeQuery tq;
gpointer copy;
gint offset = sizeof (GObject);
@@ -3370,7 +3395,6 @@ gda_data_select_rerun (GdaDataSelect *model, GError **error)
memcpy ((gint8*) model + offset, copy, size);
/* we need to keep some data from the old model */
- GdaDataSelect *old_model = new_model; /* renamed for code's readability */
GdaDataSelectInternals *mi;
model->priv->sh->reset_with_ext_params_change = old_model->priv->sh->reset_with_ext_params_change;
@@ -3383,6 +3407,11 @@ gda_data_select_rerun (GdaDataSelect *model, GError **error)
old_model->priv->sh->sel_stmt = model->priv->sh->sel_stmt;
model->priv->sh->sel_stmt = (GdaStatement*) copy;
+ if (model->priv->sh->ext_params)
+ model->priv->ext_params_changed_sig_id =
+ g_signal_connect (model->priv->sh->ext_params, "holder-changed",
+ G_CALLBACK (ext_params_holder_changed_cb), model);
+
/* keep the same GdaColumn pointers */
GSList *l1, *l2;
l1 = old_model->priv->sh->columns;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]