From 223c2f4a75c5423db244430ca3630717e2735a52 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 10 Dec 2009 21:12:48 +0100 Subject: Bug #602998 - Contacts searches are supposed to be per address book --- addressbook/gui/widgets/e-addressbook-view.c | 61 ++++++++++++++++++++++++++++ addressbook/gui/widgets/e-addressbook-view.h | 13 ++++++ 2 files changed, 74 insertions(+) (limited to 'addressbook/gui/widgets') diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c index afa8bc0c1e..a48ea8c351 100644 --- a/addressbook/gui/widgets/e-addressbook-view.c +++ b/addressbook/gui/widgets/e-addressbook-view.c @@ -84,6 +84,12 @@ struct _EAddressbookViewPrivate { GObject *object; GalViewInstance *view_instance; + + /* stored search setup for this view */ + gint filter_id; + gchar *search_text; + gint search_id; + EFilterRule *advanced_search; }; enum { @@ -492,6 +498,19 @@ addressbook_view_dispose (GObject *object) priv->view_instance = NULL; } + priv->filter_id = 0; + priv->search_id = 0; + + if (priv->search_text) { + g_free (priv->search_text); + priv->search_text = NULL; + } + + if (priv->advanced_search) { + g_object_unref (priv->advanced_search); + priv->advanced_search = NULL; + } + /* Chain up to parent's dispose() method. */ G_OBJECT_CLASS (parent_class)->dispose (object); } @@ -1344,3 +1363,45 @@ e_addressbook_view_move_to_folder (EAddressbookView *view, gboolean all) { view_transfer_contacts (view, TRUE, all); } + +void +e_addressbook_view_set_search (EAddressbookView *view, gint filter_id, gint search_id, const gchar *search_text, EFilterRule *advanced_search) +{ + EAddressbookViewPrivate *priv; + + g_return_if_fail (view != NULL); + g_return_if_fail (E_IS_ADDRESSBOOK_VIEW (view)); + + priv = view->priv; + + if (priv->search_text) + g_free (priv->search_text); + if (priv->advanced_search) + g_object_unref (priv->advanced_search); + + priv->filter_id = filter_id; + priv->search_id = search_id; + priv->search_text = g_strdup (search_text); + priv->advanced_search = advanced_search ? e_filter_rule_clone (advanced_search) : NULL; +} + +/* free returned values for search_text and advanced_search, if not NULL, as these are new copies */ +void +e_addressbook_view_get_search (EAddressbookView *view, gint *filter_id, gint *search_id, gchar **search_text, EFilterRule **advanced_search) +{ + EAddressbookViewPrivate *priv; + + g_return_if_fail (view != NULL); + g_return_if_fail (E_IS_ADDRESSBOOK_VIEW (view)); + g_return_if_fail (filter_id != NULL); + g_return_if_fail (search_id != NULL); + g_return_if_fail (search_text != NULL); + g_return_if_fail (advanced_search != NULL); + + priv = view->priv; + + *filter_id = priv->filter_id; + *search_id = priv->search_id; + *search_text = g_strdup (priv->search_text); + *advanced_search = priv->advanced_search ? e_filter_rule_clone (priv->advanced_search) : NULL; +} diff --git a/addressbook/gui/widgets/e-addressbook-view.h b/addressbook/gui/widgets/e-addressbook-view.h index 6abab6bf7a..319d060b89 100644 --- a/addressbook/gui/widgets/e-addressbook-view.h +++ b/addressbook/gui/widgets/e-addressbook-view.h @@ -29,6 +29,7 @@ #include #include #include +#include #include "e-addressbook-model.h" #include "eab-contact-display.h" @@ -117,6 +118,18 @@ void e_addressbook_view_move_to_folder gboolean e_addressbook_view_can_create (EAddressbookView *view); +void e_addressbook_view_set_search (EAddressbookView *view, + gint filter_id, + gint search_id, + const gchar *search_text, + EFilterRule *advanced_search); + +void e_addressbook_view_get_search (EAddressbookView *view, + gint *filter_id, + gint *search_id, + gchar **search_text, + EFilterRule **advanced_search); + G_END_DECLS #endif /* E_ADDRESSBOOK_VIEW_H */ -- cgit v1.2.3