summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuman Manjunath <msuman@src.gnome.org>2009-01-19 03:41:58 +0000
committerSuman Manjunath <msuman@src.gnome.org>2009-01-19 03:41:58 +0000
commit0e07556a73d079729d1b8a871ac77965922e8337 (patch)
tree9e6b64f5f50a57686285373920d36595b6ddc7ee
parenta5ada7c256e7b66aa2123a41f22cb23ff63482fc (diff)
downloadevolution-data-server-0e07556a73d079729d1b8a871ac77965922e8337.tar.gz
Fix for bug #448349 (bugzilla.novell.com) - Avoid spurious signal emissions.
svn path=/branches/gnome-2-24/; revision=9949
-rw-r--r--libedataserverui/ChangeLog8
-rw-r--r--libedataserverui/e-source-combo-box.c19
2 files changed, 21 insertions, 6 deletions
diff --git a/libedataserverui/ChangeLog b/libedataserverui/ChangeLog
index 4cf34066b..ad8518afe 100644
--- a/libedataserverui/ChangeLog
+++ b/libedataserverui/ChangeLog
@@ -1,3 +1,11 @@
+2009-01-19 Suman Manjunath <msuman@novell.com>
+
+ ** Fix for bug #448349 (bugzilla.novell.com)
+
+ * e-source-combo-box.c (source_list_changed_cb): Avoid erroneous signal
+ emissions by not clearing the list-store in order to re-fill it.
+ Instead, replace the original entries with new ones.
+
2009-01-09 Milan Crha <mcrha@redhat.com>
** Fix for bug #562200
diff --git a/libedataserverui/e-source-combo-box.c b/libedataserverui/e-source-combo-box.c
index f96dbae39..a50c949ab 100644
--- a/libedataserverui/e-source-combo-box.c
+++ b/libedataserverui/e-source-combo-box.c
@@ -108,14 +108,13 @@ source_list_changed_cb (ESourceList *source_list,
gboolean iter_valid;
priv = source_combo_box->priv;
- g_hash_table_remove_all (priv->uid_index);
combo_box = GTK_COMBO_BOX (source_combo_box);
- gtk_combo_box_set_active (combo_box, -1);
model = gtk_combo_box_get_model (combo_box);
store = GTK_LIST_STORE (model);
- gtk_list_store_clear (store);
+
+ gtk_tree_model_get_iter_first (model, &iter);
for (groups = e_source_list_peek_groups (source_list);
groups != NULL; groups = groups->next) {
@@ -125,7 +124,8 @@ source_list_changed_cb (ESourceList *source_list,
continue;
name = e_source_group_peek_name (groups->data);
- gtk_list_store_append (store, &iter);
+ if (!gtk_list_store_iter_is_valid (store, &iter))
+ gtk_list_store_append (store, &iter);
gtk_list_store_set (
store, &iter,
COLUMN_COLOR, NULL,
@@ -133,6 +133,7 @@ source_list_changed_cb (ESourceList *source_list,
COLUMN_SENSITIVE, FALSE,
COLUMN_SOURCE, groups->data,
-1);
+ gtk_tree_model_iter_next (model, &iter);
sources = get_sorted_sources (e_source_group_peek_sources (groups->data));
for (s = sources; s != NULL; s = s->next) {
@@ -148,7 +149,8 @@ source_list_changed_cb (ESourceList *source_list,
visible = TRUE;
}
- gtk_list_store_append (store, &iter);
+ if (!gtk_list_store_iter_is_valid (store, &iter))
+ gtk_list_store_append (store, &iter);
gtk_list_store_set (
store, &iter,
COLUMN_COLOR, color_spec ? &color : NULL,
@@ -159,16 +161,21 @@ source_list_changed_cb (ESourceList *source_list,
uid = e_source_peek_uid (s->data);
path = gtk_tree_model_get_path (model, &iter);
- g_hash_table_insert (
+ g_hash_table_replace (
priv->uid_index, g_strdup (uid),
gtk_tree_row_reference_new (model, path));
gtk_tree_path_free (path);
+ gtk_tree_model_iter_next (model, &iter);
g_free (indented_name);
}
g_slist_free (sources);
}
+ /* Remove any extra references that might be leftover from the original model */
+ while (gtk_list_store_iter_is_valid (store, &iter))
+ gtk_list_store_remove (store, &iter);
+
/* Set the visible column based on whether we've seen a color. */
iter_valid = gtk_tree_model_get_iter_first (model, &iter);
while (iter_valid) {