From f0b16735709dfa6d7a4bbdc53dfb120b5d1ee13d Mon Sep 17 00:00:00 2001 From: Jon Trowbridge Date: Sat, 18 Aug 2001 00:30:30 +0000 Subject: If we get the "sequence_complete" signal when we aren't searching, it 2001-08-17 Jon Trowbridge * gui/component/select-names/e-select-names-completion.c (e_select_names_completion_seq_complete_cb): If we get the "sequence_complete" signal when we aren't searching, it means the addressbook changed out from under us. Clear the search cache, so that future completion requests won't use the out-of-date cached data. Also, don't unref book_view... we leave the EBookView open so that we can catch these addressbook changes. (e_select_names_completion_do_query): Don't use the book_view being non-NULL as a sign that another query is still running. (e_select_names_completion_got_book_view_cb): Properly unref any previous value in book_view. svn path=/trunk/; revision=12184 --- addressbook/ChangeLog | 14 +++++++ .../select-names/e-select-names-completion.c | 43 +++++++++++++--------- 2 files changed, 39 insertions(+), 18 deletions(-) (limited to 'addressbook') diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index 997c8a480b..a0a006be3f 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,3 +1,17 @@ +2001-08-17 Jon Trowbridge + + * gui/component/select-names/e-select-names-completion.c + (e_select_names_completion_seq_complete_cb): If we get the + "sequence_complete" signal when we aren't searching, it means the + addressbook changed out from under us. Clear the search cache, so + that future completion requests won't use the out-of-date cached + data. Also, don't unref book_view... we leave the EBookView open + so that we can catch these addressbook changes. + (e_select_names_completion_do_query): Don't use the book_view + being non-NULL as a sign that another query is still running. + (e_select_names_completion_got_book_view_cb): Properly unref any + previous value in book_view. + 2001-08-17 Christopher James Lahey * gui/widgets/e-addressbook-reflow-adapter.c 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 e0568311ae..d8a8d69ea7 100644 --- a/addressbook/gui/component/select-names/e-select-names-completion.c +++ b/addressbook/gui/component/select-names/e-select-names-completion.c @@ -782,7 +782,9 @@ e_select_names_completion_got_book_view_cb (EBook *book, EBookStatus status, EBo comp->priv->cancelled = FALSE; comp->priv->book_view_tag = 0; - + + if (comp->priv->book_view) + gtk_object_unref (GTK_OBJECT (comp->priv->book_view)); comp->priv->book_view = view; gtk_object_ref (GTK_OBJECT (view)); @@ -790,6 +792,7 @@ e_select_names_completion_got_book_view_cb (EBook *book, EBookStatus status, EBo "card_added", GTK_SIGNAL_FUNC (e_select_names_completion_card_added_cb), comp); + gtk_signal_connect (GTK_OBJECT (view), "sequence_complete", GTK_SIGNAL_FUNC (e_select_names_completion_seq_complete_cb), @@ -801,14 +804,16 @@ e_select_names_completion_card_added_cb (EBookView *book_view, const GList *card { ESelectNamesCompletion *comp = E_SELECT_NAMES_COMPLETION (user_data); - if (! comp->priv->cancelled) + + if (! comp->priv->cancelled) { book_query_process_card_list (comp, cards); - /* Save the list of matching cards. */ - while (cards) { - comp->priv->cached_cards = g_list_prepend (comp->priv->cached_cards, cards->data); - gtk_object_ref (GTK_OBJECT (cards->data)); - cards = g_list_next (cards); + /* Save the list of matching cards. */ + while (cards) { + comp->priv->cached_cards = g_list_prepend (comp->priv->cached_cards, cards->data); + gtk_object_ref (GTK_OBJECT (cards->data)); + cards = g_list_next (cards); + } } } @@ -817,19 +822,21 @@ e_select_names_completion_seq_complete_cb (EBookView *book_view, gpointer user_d { ESelectNamesCompletion *comp = E_SELECT_NAMES_COMPLETION (user_data); - gtk_object_unref (GTK_OBJECT (comp->priv->book_view)); - - comp->priv->book_view = NULL; + /* + * We aren't searching, but the addressbook has changed -- clear our card cache so that + * future completion requests will take the changes into account. + */ + if (! e_completion_searching (E_COMPLETION (comp))) { + e_select_names_completion_clear_cache (comp); + return; + } g_free (comp->priv->query_text); comp->priv->query_text = NULL; if (out) - fprintf (out, "ending search "); - if (out && !e_completion_searching (E_COMPLETION (comp))) - fprintf (out, "while not searching!"); - if (out) - fprintf (out, "\n"); + fprintf (out, "ending search\n"); + e_completion_end_search (E_COMPLETION (comp)); /* That's all folks! */ /* Need to launch a new completion if another one is pending. */ @@ -936,7 +943,7 @@ e_select_names_completion_do_query (ESelectNamesCompletion *comp, const gchar *q return; } - query_is_still_running = comp->priv->book_view_tag || comp->priv->book_view; + query_is_still_running = comp->priv->book_view_tag; if (out) { fprintf (out, "do_query: %s => %s\n", query_text, clean); @@ -1094,9 +1101,7 @@ e_select_names_completion_book_ready (EBook *book, EBookStatus status, ESelectNa { comp->priv->book_ready = TRUE; - g_return_if_fail (book != NULL); g_return_if_fail (E_IS_BOOK (book)); - g_return_if_fail (comp != NULL); g_return_if_fail (E_IS_SELECT_NAMES_COMPLETION (comp)); /* If waiting_query is non-NULL, someone tried to start a query before the book was ready. @@ -1139,9 +1144,11 @@ e_select_names_completion_new (EBook *book, ESelectNamesModel *model) e_book_load_local_address_book (comp->priv->book, (EBookCallback) e_select_names_completion_book_ready, comp); } else { + comp->priv->book = book; gtk_object_ref (GTK_OBJECT (comp->priv->book)); comp->priv->book_ready = TRUE; + } comp->priv->model = model; -- cgit v1.2.3