From 5ce3f210b969c3e0ab6020911a6bb4b887e46d0a Mon Sep 17 00:00:00 2001 From: Chris Toshok Date: Tue, 8 Jun 2004 22:11:48 +0000 Subject: new function. do the get_view in an idle handler. 2004-06-08 Chris Toshok * gui/widgets/e-addressbook-model.c (get_view_idle): new function. do the get_view in an idle handler. (eab_model_set_property): don't call get_view directly from any setter block. instead just add the idle handler (if it's not already added.) This keeps us from duplicating queries when both "book" and "query" are set using the same g_object_set. svn path=/trunk/; revision=26264 --- addressbook/ChangeLog | 11 +++++++ addressbook/gui/widgets/e-addressbook-model.c | 41 ++++++++++++++++++++------- addressbook/gui/widgets/e-addressbook-model.h | 2 ++ 3 files changed, 44 insertions(+), 10 deletions(-) (limited to 'addressbook') diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index e61ebf1e97..c42cfb50d5 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,3 +1,14 @@ +2004-06-08 Chris Toshok + + * gui/widgets/e-addressbook-model.c (get_view_idle): new + function. do the get_view in an idle handler. + (eab_model_set_property): don't call get_view directly from any + setter block. instead just add the idle handler (if it's not + already added.) This keeps us from duplicating queries when both + "book" and "query" are set using the same g_object_set. + + * gui/widgets/e-addressbook-model.h: add book_view_idle_id. + 2004-06-07 Hans Petter Jansson Fixes #58921. diff --git a/addressbook/gui/widgets/e-addressbook-model.c b/addressbook/gui/widgets/e-addressbook-model.c index 9630c83ff8..244c37cb0c 100644 --- a/addressbook/gui/widgets/e-addressbook-model.c +++ b/addressbook/gui/widgets/e-addressbook-model.c @@ -522,6 +522,16 @@ get_view (EABModel *model) } } +static gboolean +get_view_idle (EABModel *model) +{ + model->book_view_idle_id = 0; + get_view (model); + g_object_unref (model); + return FALSE; +} + + EContact * eab_model_get_contact(EABModel *model, int row) @@ -536,6 +546,7 @@ static void eab_model_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { EABModel *model; + gboolean need_get_book_view = FALSE; model = EAB_MODEL (object); @@ -556,6 +567,15 @@ eab_model_set_property (GObject *object, guint prop_id, const GValue *value, GPa } model->book = E_BOOK(g_value_get_object (value)); if (model->book) { + model->writable_status_id = + g_signal_connect (model->book, + "writable_status", + G_CALLBACK (writable_status), model); + model->backend_died_id = + g_signal_connect (model->book, + "backend_died", + G_CALLBACK (backend_died), model); + if (!model->editable_set) { model->editable = e_book_is_writable (model->book); @@ -563,24 +583,17 @@ eab_model_set_property (GObject *object, guint prop_id, const GValue *value, GPa eab_model_signals [WRITABLE_STATUS], 0, model->editable); } + model->first_get_view = TRUE; g_object_ref (model->book); - get_view (model); - model->writable_status_id = - g_signal_connect (model->book, - "writable_status", - G_CALLBACK (writable_status), model); - model->backend_died_id = - g_signal_connect (model->book, - "backend_died", - G_CALLBACK (backend_died), model); + need_get_book_view = TRUE; } break; case PROP_QUERY: if (model->query) e_book_query_unref (model->query); model->query = e_book_query_from_string (g_value_get_string (value)); - get_view (model); + need_get_book_view = TRUE; break; case PROP_EDITABLE: model->editable = g_value_get_boolean (value); @@ -590,6 +603,14 @@ eab_model_set_property (GObject *object, guint prop_id, const GValue *value, GPa G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } + + if (need_get_book_view) { + if (!model->book_view_idle_id) { + g_object_ref (model); + model->book_view_idle_id = g_idle_add ((GSourceFunc)get_view_idle, model); + } + } + } static void diff --git a/addressbook/gui/widgets/e-addressbook-model.h b/addressbook/gui/widgets/e-addressbook-model.h index 64ce6c3845..e83477ff93 100644 --- a/addressbook/gui/widgets/e-addressbook-model.h +++ b/addressbook/gui/widgets/e-addressbook-model.h @@ -24,6 +24,8 @@ struct _EABModel { EBookQuery *query; EBookView *book_view; + int book_view_idle_id; + EContact **data; int data_count; int allocated_count; -- cgit