diff options
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.c | 54 |
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 |