diff options
-rw-r--r-- | addressbook/ChangeLog | 16 | ||||
-rw-r--r-- | addressbook/gui/component/select-names/e-select-names.c | 31 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-model.c | 42 |
3 files changed, 65 insertions, 24 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index 41427aebcb..68ba8f5300 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,5 +1,21 @@ 2002-02-13 Christopher James Lahey <clahey@ximian.com> + * gui/component/select-names/e-select-names.c (set_book): Make + sure to only set the query once when creating a new book and not + at all on addressbook model creation. This prevents an accidental + pair of changes from making the addressbook model load a remote + addressbook. + + * gui/widgets/e-addressbook-model.c (get_view): If this is the + first_get_view and the addressbook is remote, empty the view + instead of leaving it in the state it used to be in. This only + occurs if you set the book after the model has existed for a + while. + (e_addressbook_model_set_arg): When setting the book, set + first_get_view to TRUE. + +2002-02-13 Christopher James Lahey <clahey@ximian.com> + * gui/widgets/e-addressbook-view.c (display_view): Attach to the emvw instead of the emv here. diff --git a/addressbook/gui/component/select-names/e-select-names.c b/addressbook/gui/component/select-names/e-select-names.c index 095d928a41..9a0d9f6805 100644 --- a/addressbook/gui/component/select-names/e-select-names.c +++ b/addressbook/gui/component/select-names/e-select-names.c @@ -53,6 +53,7 @@ static void e_select_names_class_init (ESelectNamesClass *klass); static void e_select_names_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); static void e_select_names_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); static void e_select_names_destroy (GtkObject *object); +static void update_query (GtkWidget *button, ESelectNames *e_select_names); static GnomeDialogClass *parent_class = NULL; #define PARENT_TYPE gnome_dialog_get_type() @@ -128,17 +129,29 @@ e_select_names_class_init (ESelectNamesClass *klass) GtkWidget *e_addressbook_create_ebook_table(char *name, char *string1, char *string2, int num1, int num2); static void -set_book(EBook *book, EBookStatus status, EAddressbookModel *model) +set_book(EBook *book, EBookStatus status, ESelectNames *esn) +{ + gtk_object_set(GTK_OBJECT(esn->model), + "book", book, + NULL); + update_query (NULL, esn); + gtk_object_unref(GTK_OBJECT(book)); + gtk_object_unref(GTK_OBJECT(esn)); +} + +static void +set_book_with_model_data(EBook *book, EBookStatus status, EAddressbookModel *model) { gtk_object_set(GTK_OBJECT(model), "book", book, + "query", "(contains \"email\" \"\")", NULL); gtk_object_unref(GTK_OBJECT(book)); gtk_object_unref(GTK_OBJECT(model)); } static void -addressbook_model_set_uri(EAddressbookModel *model, char *uri) +addressbook_model_set_uri(ESelectNames *e_select_names, EAddressbookModel *model, char *uri) { EBook *book; @@ -151,8 +164,13 @@ addressbook_model_set_uri(EAddressbookModel *model, char *uri) } book = e_book_new(); - gtk_object_ref(GTK_OBJECT(model)); - addressbook_load_uri(book, uri, (EBookCallback) set_book, model); + if (e_select_names) { + gtk_object_ref(GTK_OBJECT(e_select_names)); + addressbook_load_uri(book, uri, (EBookCallback) set_book, e_select_names); + } else { + gtk_object_ref(GTK_OBJECT(model)); + addressbook_load_uri(book, uri, (EBookCallback) set_book_with_model_data, model); + } } static void * @@ -288,14 +306,13 @@ e_addressbook_create_ebook_table(char *name, char *string1, char *string2, int n filename = gnome_util_prepend_user_home("evolution/local/Contacts/addressbook.db"); uri = g_strdup_printf("file://%s", filename); - addressbook_model_set_uri(model, uri); + addressbook_model_set_uri(NULL, model, uri); g_free(uri); g_free(filename); gtk_object_set(GTK_OBJECT(model), "editable", FALSE, - "query", "(contains \"email\" \"\")", NULL); without = e_table_without_new (adapter, @@ -339,7 +356,7 @@ e_select_names_option_activated(GtkWidget *widget, ESelectNames *e_select_names) { ESelectNamesFolder *e_folder = gtk_object_get_data (GTK_OBJECT (widget), "EsnChoiceFolder"); - addressbook_model_set_uri(e_select_names->model, e_folder->uri); + addressbook_model_set_uri(e_select_names, e_select_names->model, e_folder->uri); } typedef struct { 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), |