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:
committed by
Chris Lahey
parent
32a1a69f13
commit
2cacdc5d41
@ -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
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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),
|
||||
|
||||
Reference in New Issue
Block a user