diff options
-rw-r--r-- | addressbook/ChangeLog | 11 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-model.c | 41 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-model.h | 2 |
3 files changed, 44 insertions, 10 deletions
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 <toshok@ximian.com> + + * 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 <hpj@ximian.com> 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; |