diff options
author | Jon Trowbridge <trow@ximian.com> | 2001-08-30 12:57:18 +0800 |
---|---|---|
committer | Jon Trowbridge <trow@src.gnome.org> | 2001-08-30 12:57:18 +0800 |
commit | 19ec5dbb3b419740b0a9e84ba4c6667cb48c5631 (patch) | |
tree | 67407ecf7fe44221aa6199ce962520db47821fdd /addressbook/gui/component | |
parent | 206e67a5a62ea3f142c6fb60998dbd3b435ddee4 (diff) | |
download | gsoc2013-evolution-19ec5dbb3b419740b0a9e84ba4c6667cb48c5631.tar gsoc2013-evolution-19ec5dbb3b419740b0a9e84ba4c6667cb48c5631.tar.gz gsoc2013-evolution-19ec5dbb3b419740b0a9e84ba4c6667cb48c5631.tar.bz2 gsoc2013-evolution-19ec5dbb3b419740b0a9e84ba4c6667cb48c5631.tar.lz gsoc2013-evolution-19ec5dbb3b419740b0a9e84ba4c6667cb48c5631.tar.xz gsoc2013-evolution-19ec5dbb3b419740b0a9e84ba4c6667cb48c5631.tar.zst gsoc2013-evolution-19ec5dbb3b419740b0a9e84ba4c6667cb48c5631.zip |
Use e_select_names_model_merge to combine the selected names with any
2001-08-29 Jon Trowbridge <trow@ximian.com>
* gui/component/select-names/e-select-names-manager.c
(e_select_names_clicked): Use e_select_names_model_merge to
combine the selected names with any existing ones. This causes
you to not lose addresses typed directly into the entry while the
SelectNames dialog is up. (Bug #8058)
* gui/component/select-names/e-select-names-model.c
(e_select_names_model_merge): Merge the contents of one
ESelectNamesModel into another, avoiding duplicates.
* backend/ebook/e-destination.c (e_destination_equal): Added.
Determines if two destinations appear to refer to the same
recipient.
* backend/ebook/e-card.c (e_card_list_send): Added cast to
g_free args to silence compiler warnings.
svn path=/trunk/; revision=12526
Diffstat (limited to 'addressbook/gui/component')
3 files changed, 39 insertions, 1 deletions
diff --git a/addressbook/gui/component/select-names/e-select-names-manager.c b/addressbook/gui/component/select-names/e-select-names-manager.c index 0bec7da416..3212242fbd 100644 --- a/addressbook/gui/component/select-names/e-select-names-manager.c +++ b/addressbook/gui/component/select-names/e-select-names-manager.c @@ -472,7 +472,7 @@ e_select_names_clicked(ESelectNames *dialog, gint button, ESelectNamesManager *m for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { ESelectNamesManagerSection *section = (void *) e_iterator_get(iterator); ESelectNamesModel *source = e_select_names_get_source(dialog, section->id); - e_select_names_model_overwrite_copy (section->model, source); + e_select_names_model_merge (section->model, source); gtk_object_unref (GTK_OBJECT (source)); } diff --git a/addressbook/gui/component/select-names/e-select-names-model.c b/addressbook/gui/component/select-names/e-select-names-model.c index 6e0482ade3..66d7e96bb4 100644 --- a/addressbook/gui/component/select-names/e-select-names-model.c +++ b/addressbook/gui/component/select-names/e-select-names-model.c @@ -465,6 +465,22 @@ disconnect_destination (ESelectNamesModel *model, EDestination *dest) gtk_signal_disconnect_by_func (GTK_OBJECT (dest), destination_changed_proxy, model); } +gboolean +e_select_names_model_contains (ESelectNamesModel *model, EDestination *dest) +{ + GList *iter; + + g_return_val_if_fail (E_IS_SELECT_NAMES_MODEL (model), FALSE); + g_return_val_if_fail (E_IS_DESTINATION (dest), FALSE); + + for (iter = model->priv->data; iter != NULL; iter = g_list_next (iter)) { + if (iter->data != NULL && e_destination_equal (dest, E_DESTINATION (iter->data))) + return TRUE; + } + + return FALSE; +} + void e_select_names_model_insert (ESelectNamesModel *model, gint index, EDestination *dest) { @@ -652,6 +668,25 @@ e_select_names_model_overwrite_copy (ESelectNamesModel *dest, ESelectNamesModel } void +e_select_names_model_merge (ESelectNamesModel *dest, ESelectNamesModel *src) +{ + gint i, len; + + g_return_if_fail (E_IS_SELECT_NAMES_MODEL (dest)); + g_return_if_fail (E_IS_SELECT_NAMES_MODEL (src)); + + if (src == dest) + return; + + len = e_select_names_model_count (src); + for (i = 0; i < len; ++i) { + const EDestination *d = e_select_names_model_get_destination (src, i); + if (d && !e_select_names_model_contains (dest, d)) + e_select_names_model_append (dest, e_destination_copy (d)); + } +} + +void e_select_names_model_name_pos (ESelectNamesModel *model, gint index, gint *pos, gint *length) { gint rp = 0, i, len = 0; diff --git a/addressbook/gui/component/select-names/e-select-names-model.h b/addressbook/gui/component/select-names/e-select-names-model.h index 9f89e91093..9fca3897db 100644 --- a/addressbook/gui/component/select-names/e-select-names-model.h +++ b/addressbook/gui/component/select-names/e-select-names-model.h @@ -61,12 +61,15 @@ void e_select_names_model_import_destinationv (ESelectNamesModel ECard *e_select_names_model_get_card (ESelectNamesModel *model, gint index); const gchar *e_select_names_model_get_string (ESelectNamesModel *model, gint index); +gboolean e_select_names_model_contains (ESelectNamesModel *model, EDestination *dest); + void e_select_names_model_insert (ESelectNamesModel *model, gint index, EDestination *dest); void e_select_names_model_append (ESelectNamesModel *model, EDestination *dest); void e_select_names_model_replace (ESelectNamesModel *model, gint index, EDestination *dest); void e_select_names_model_delete (ESelectNamesModel *model, gint index); void e_select_names_model_delete_all (ESelectNamesModel *model); void e_select_names_model_overwrite_copy (ESelectNamesModel *dest, ESelectNamesModel *src); +void e_select_names_model_merge (ESelectNamesModel *dest, ESelectNamesModel *src); void e_select_names_model_clean (ESelectNamesModel *model); |