aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/widgets/e-addressbook-model.c
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/gui/widgets/e-addressbook-model.c')
-rw-r--r--addressbook/gui/widgets/e-addressbook-model.c42
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),