aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addressbook/ChangeLog16
-rw-r--r--addressbook/gui/component/select-names/e-select-names.c31
-rw-r--r--addressbook/gui/widgets/e-addressbook-model.c42
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),