diff options
Diffstat (limited to 'addressbook/gui/widgets')
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-model.c | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/addressbook/gui/widgets/e-addressbook-model.c b/addressbook/gui/widgets/e-addressbook-model.c index cd7688ba51..901ec22a0b 100644 --- a/addressbook/gui/widgets/e-addressbook-model.c +++ b/addressbook/gui/widgets/e-addressbook-model.c @@ -49,6 +49,21 @@ enum { static guint e_addressbook_model_signals [LAST_SIGNAL] = {0, }; static void +free_data (EAddressbookModel *model) +{ + int i; + + for ( i = 0; i < model->data_count; i++ ) { + gtk_object_unref(GTK_OBJECT(model->data[i])); + } + + g_free(model->data); + model->data = NULL; + model->data_count = 0; + model->allocated_count = 0; +} + +static void remove_book_view(EAddressbookModel *model) { if (model->book_view && model->create_card_id) @@ -86,7 +101,6 @@ static void addressbook_destroy(GtkObject *object) { EAddressbookModel *model = E_ADDRESSBOOK_MODEL(object); - int i; if (model->get_view_idle) { g_source_remove(model->get_view_idle); @@ -94,6 +108,7 @@ addressbook_destroy(GtkObject *object) } remove_book_view(model); + free_data (model); if (model->book) { if (model->writable_status_id) @@ -105,13 +120,6 @@ addressbook_destroy(GtkObject *object) gtk_object_unref(GTK_OBJECT(model->book)); model->book = NULL; } - - for ( i = 0; i < model->data_count; i++ ) { - gtk_object_unref(GTK_OBJECT(model->data[i])); - } - - g_free(model->data); - model->data = NULL; } static void @@ -358,7 +366,6 @@ static void book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, gpointer closure) { EAddressbookModel *model = closure; - int i; remove_book_view(model); model->book_view = book_view; if (model->book_view) @@ -384,14 +391,8 @@ book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, gpointe GTK_SIGNAL_FUNC(sequence_complete), model); - for ( i = 0; i < model->data_count; i++ ) { - gtk_object_unref(GTK_OBJECT(model->data[i])); - } + free_data (model); - g_free(model->data); - model->data = NULL; - model->data_count = 0; - model->allocated_count = 0; model->search_in_progress = TRUE; gtk_signal_emit (GTK_OBJECT (model), e_addressbook_model_signals [MODEL_CHANGED]); @@ -408,6 +409,13 @@ get_view (EAddressbookModel *model) capabilities = e_book_get_static_capabilities (model->book); if (capabilities && strstr (capabilities, "local")) { e_book_get_book_view (model->book, model->query, book_view_loaded, model); + } else { + remove_book_view(model); + free_data (model); + gtk_signal_emit (GTK_OBJECT (model), + e_addressbook_model_signals [MODEL_CHANGED]); + gtk_signal_emit (GTK_OBJECT (model), + e_addressbook_model_signals [STOP_STATE_CHANGED]); } model->first_get_view = FALSE; g_free (capabilities); @@ -452,6 +460,7 @@ e_addressbook_model_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) } model->book = E_BOOK(GTK_VALUE_OBJECT (*arg)); if (model->book) { + model->first_get_view = TRUE; gtk_object_ref(GTK_OBJECT(model->book)); if (model->get_view_idle == 0) model->get_view_idle = g_idle_add((GSourceFunc)get_view, model); @@ -533,7 +542,6 @@ e_addressbook_model_new (void) void e_addressbook_model_stop (EAddressbookModel *model) { remove_book_view(model); - model->search_in_progress = FALSE; gtk_signal_emit (GTK_OBJECT (model), e_addressbook_model_signals [STOP_STATE_CHANGED]); gtk_signal_emit (GTK_OBJECT (model), |