aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/component/select-names/e-select-names-completion.c
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/gui/component/select-names/e-select-names-completion.c')
-rw-r--r--addressbook/gui/component/select-names/e-select-names-completion.c54
1 files changed, 29 insertions, 25 deletions
diff --git a/addressbook/gui/component/select-names/e-select-names-completion.c b/addressbook/gui/component/select-names/e-select-names-completion.c
index cbfc1d56c6..7b29cd2472 100644
--- a/addressbook/gui/component/select-names/e-select-names-completion.c
+++ b/addressbook/gui/component/select-names/e-select-names-completion.c
@@ -734,14 +734,10 @@ e_select_names_completion_init (ESelectNamesCompletion *comp)
}
static void
-e_select_names_completion_destroy (GtkObject *object)
+e_select_names_completion_clear_book_data (ESelectNamesCompletion *comp)
{
- ESelectNamesCompletion *comp = E_SELECT_NAMES_COMPLETION (object);
GList *l;
- if (comp->priv->text_model)
- gtk_object_unref (GTK_OBJECT (comp->priv->text_model));
-
for (l = comp->priv->book_data; l; l = l->next) {
ESelectNamesCompletionBookData *book_data = l->data;
@@ -763,6 +759,17 @@ e_select_names_completion_destroy (GtkObject *object)
g_free (book_data);
}
g_list_free (comp->priv->book_data);
+}
+
+static void
+e_select_names_completion_destroy (GtkObject *object)
+{
+ ESelectNamesCompletion *comp = E_SELECT_NAMES_COMPLETION (object);
+
+ if (comp->priv->text_model)
+ gtk_object_unref (GTK_OBJECT (comp->priv->text_model));
+
+ e_select_names_completion_clear_book_data (comp);
g_free (comp->priv->waiting_query);
g_free (comp->priv->query_text);
@@ -1227,33 +1234,14 @@ e_select_names_completion_book_ready (EBook *book, EBookStatus status, ESelectNa
*/
ECompletion *
-e_select_names_completion_new (EBook *book, ESelectNamesTextModel *text_model)
+e_select_names_completion_new (ESelectNamesTextModel *text_model)
{
ESelectNamesCompletion *comp;
- g_return_val_if_fail (book == NULL || E_IS_BOOK (book), NULL);
g_return_val_if_fail (E_IS_SELECT_NAMES_TEXT_MODEL (text_model), NULL);
comp = (ESelectNamesCompletion *) gtk_type_new (e_select_names_completion_get_type ());
- if (book == NULL) {
- ESelectNamesCompletionBookData *book_data = g_new0 (ESelectNamesCompletionBookData, 1);
-
- book_data->book = e_book_new ();
- book_data->comp = comp;
- gtk_object_ref (GTK_OBJECT (book_data->book));
- gtk_object_sink (GTK_OBJECT (book_data->book));
-
- comp->priv->book_data = g_list_append (comp->priv->book_data, book_data);
- comp->priv->books_not_ready++;
-
- gtk_object_ref (GTK_OBJECT (comp)); /* ref ourself before our async call */
- e_book_load_local_address_book (book_data->book, (EBookCallback) e_select_names_completion_book_ready, comp);
-
- } else {
- e_select_names_completion_add_book (comp, book);
- }
-
comp->priv->text_model = text_model;
gtk_object_ref (GTK_OBJECT (text_model));
@@ -1273,6 +1261,22 @@ e_select_names_completion_add_book (ESelectNamesCompletion *comp, EBook *book)
check_capabilities (comp, book);
gtk_object_ref (GTK_OBJECT (book_data->book));
comp->priv->book_data = g_list_append (comp->priv->book_data, book_data);
+
+ /* if the user is typing as we're adding books, restart the
+ query after the new book has been added */
+ if (comp->priv->query_text && *comp->priv->query_text) {
+ char *query_text = g_strdup (comp->priv->query_text);
+ e_select_names_completion_stop_query (comp);
+ e_select_names_completion_start_query (comp, query_text);
+ g_free (query_text);
+ }
+}
+
+void
+e_select_names_completion_clear_books (ESelectNamesCompletion *comp)
+{
+ e_select_names_completion_stop_query (comp);
+ e_select_names_completion_clear_book_data (comp);
}
gboolean