Make sure to only set the query once when creating a new book and not at

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.

svn path=/trunk/; revision=15715
This commit is contained in:
Christopher James Lahey
2002-02-13 21:39:05 +00:00
committed by Chris Lahey
parent 32a1a69f13
commit 2cacdc5d41
3 changed files with 65 additions and 24 deletions

View File

@ -1,3 +1,19 @@
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

View File

@ -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 {

View File

@ -48,6 +48,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)
{
@ -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),