From 4e44f02d8bb654f08777f0986289032f67962f75 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 17 Aug 2010 16:11:10 -0400 Subject: [PATCH] [#3854] Make possible to select search type in addresbook (contains, begin with ...) --- .../src/contacts/addressbook/eds.c | 28 ++++++++--- .../src/contacts/addressbook/eds.h | 7 +++ .../src/contacts/searchbar.c | 49 ++++++++++--------- 3 files changed, 56 insertions(+), 28 deletions(-) diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.c b/sflphone-client-gnome/src/contacts/addressbook/eds.c index 86e814879d..0c7fd77eea 100644 --- a/sflphone-client-gnome/src/contacts/addressbook/eds.c +++ b/sflphone-client-gnome/src/contacts/addressbook/eds.c @@ -1,6 +1,7 @@ /* * Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc. * Author: Julien Bonjean <julien.bonjean@savoirfairelinux.com> + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> * * File originally copied from evolution module of deskbar-applet 2.24.1 * Authors : @@ -70,6 +71,8 @@ static gchar *current_uri = NULL; static gchar *current_uid = NULL; static gchar *current_name = "Default"; +static EBookQueryTest current_test = E_BOOK_QUERY_BEGINS_WITH; + /** * Freeing a hit instance */ @@ -146,7 +149,7 @@ books_get_book_data_by_uid (gchar *uid) * nick name. */ static EBookQuery* -create_query (const char* s) +create_query (const char* s, EBookQueryTest test) { EBookQuery *equery; @@ -156,10 +159,10 @@ create_query (const char* s) int cpt = 0; // We could also use E_BOOK_QUERY_IS or E_BOOK_QUERY_BEGINS_WITH instead of E_BOOK_QUERY_CONTAINS - queries[cpt++] = e_book_query_field_test (E_CONTACT_FULL_NAME, E_BOOK_QUERY_BEGINS_WITH, s); - queries[cpt++] = e_book_query_field_test (E_CONTACT_PHONE_HOME, E_BOOK_QUERY_BEGINS_WITH, s); - queries[cpt++] = e_book_query_field_test (E_CONTACT_PHONE_BUSINESS, E_BOOK_QUERY_BEGINS_WITH, s); - queries[cpt++] = e_book_query_field_test (E_CONTACT_PHONE_MOBILE, E_BOOK_QUERY_BEGINS_WITH, s); + queries[cpt++] = e_book_query_field_test (E_CONTACT_FULL_NAME, test, s); + queries[cpt++] = e_book_query_field_test (E_CONTACT_PHONE_HOME, test, s); + queries[cpt++] = e_book_query_field_test (E_CONTACT_PHONE_BUSINESS, test, s); + queries[cpt++] = e_book_query_field_test (E_CONTACT_PHONE_MOBILE, test, s); equery = e_book_query_or (cpt, queries, TRUE); @@ -585,7 +588,7 @@ search_async_by_contacts (const char *query, int max_results, SearchAsyncHandler had->user_data = user_data; had->hits = NULL; had->max_results_remaining = max_results; - had->equery = create_query (query); + had->equery = create_query (query, current_test); if (!current_uri) ERROR ("Addressbook: Error: Current addressbook uri not specified uri"); @@ -659,3 +662,16 @@ get_current_addressbook (void) { return current_name; } + + +void +set_current_addressbook_test (EBookQueryTest test) +{ + current_test = test; +} + +EBookQueryTest +get_current_addressbook_test (void) +{ + return current_test; +} diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.h b/sflphone-client-gnome/src/contacts/addressbook/eds.h index 2f4e47be8c..2140184b8c 100644 --- a/sflphone-client-gnome/src/contacts/addressbook/eds.h +++ b/sflphone-client-gnome/src/contacts/addressbook/eds.h @@ -158,6 +158,13 @@ set_current_addressbook (const gchar *name); const gchar * get_current_addressbook (void); +void +set_current_addressbook_test (EBookQueryTest test); + +EBookQueryTest +get_current_addressbook_test (void); + + G_END_DECLS #endif /* __EDS_H__ */ diff --git a/sflphone-client-gnome/src/contacts/searchbar.c b/sflphone-client-gnome/src/contacts/searchbar.c index 1188148d9d..3d9d83441e 100644 --- a/sflphone-client-gnome/src/contacts/searchbar.c +++ b/sflphone-client-gnome/src/contacts/searchbar.c @@ -80,21 +80,26 @@ static void cbox_changed_cb (GtkWidget *widget, gpointer user_data) addressbook_search (GTK_ENTRY (addressbookentry)); } -static void select_addressbook (GtkWidget *item, GtkEntry *entry) +static void select_search_type (GtkWidget *item, GtkEntry *entry) { - DEBUG ("Searchbar: Selected item label %s", gtk_menu_item_get_label (item)); + DEBUG ("Searchbar: %s", gtk_menu_item_get_label (item)); - set_current_addressbook (gtk_menu_item_get_label (item)); - gchar *name = get_current_addressbook(); - gchar *searching = g_strjoin ("", "Click to select addressbook\n Searching in ", name, NULL); gtk_entry_set_icon_tooltip_text (GTK_ENTRY (addressbookentry), GTK_ENTRY_ICON_PRIMARY, - searching); + gtk_menu_item_get_label (item)); + + + if (strcmp ("Search is", gtk_menu_item_get_label (item)) == 0) + set_current_addressbook_test (E_BOOK_QUERY_IS); + else if (strcmp ("Search begins with", gtk_menu_item_get_label (item)) == 0) + set_current_addressbook_test (E_BOOK_QUERY_BEGINS_WITH); + else if (strcmp ("Search contains", gtk_menu_item_get_label (item)) == 0) + set_current_addressbook_test (E_BOOK_QUERY_CONTAINS); addressbook_search (GTK_ENTRY (addressbookentry)); - g_free (searching); + } static void search_all (GtkWidget *item UNUSED, GtkEntry *entry) @@ -154,9 +159,9 @@ static void icon_press_cb (GtkEntry *entry, gint position, GdkEventButton *event gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, event->button, event->time); else if (position == GTK_ENTRY_ICON_PRIMARY && active_calltree == contacts) { - //GtkWidget *addrbook_menu = addressbook_menu_new(); - //gtk_menu_popup (GTK_MENU (addrbook_menu), NULL, NULL, NULL, NULL, - // event->button, event->time); + GtkWidget *addrbook_menu = addressbook_menu_new(); + gtk_menu_popup (GTK_MENU (addrbook_menu), NULL, NULL, NULL, NULL, + event->button, event->time); } else gtk_entry_set_text (entry, ""); } @@ -176,22 +181,22 @@ GtkWidget *addressbook_menu_new (void) GtkWidget *menu, *item; - GSList *book_list_iterator; - book_data_t *book_data; - GSList *books_data = addressbook_get_books_data(); - // Create the menu menu = gtk_menu_new (); gtk_menu_attach_to_widget (GTK_MENU (menu), contacts->searchbar, NULL); // Populate menu - for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator - = book_list_iterator->next) { - book_data = (book_data_t *) book_list_iterator->data; - item = gtk_menu_item_new_with_label (book_data->name); - g_signal_connect (item, "activate", G_CALLBACK (select_addressbook), searchbox); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); - } + item = gtk_menu_item_new_with_label ("Search is"); + g_signal_connect (item, "activate", G_CALLBACK (select_search_type), searchbox); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + + item = gtk_menu_item_new_with_label ("Search begins with"); + g_signal_connect (item, "activate", G_CALLBACK (select_search_type), searchbox); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + + item = gtk_menu_item_new_with_label ("Search contains"); + g_signal_connect (item, "activate", G_CALLBACK (select_search_type), searchbox); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show_all (menu); @@ -336,7 +341,7 @@ GtkWidget* contacts_searchbar_new () GdkPixbuf *pixbuf; gchar *current_addressbook = get_current_addressbook(); - gchar *tooltip_text = g_strjoin ("", "Click to select addressbook\n Searching in ", current_addressbook, NULL); + gchar *tooltip_text = g_strdup ("Search is"); addressbookentry = gtk_entry_new(); gtk_entry_set_icon_from_stock (GTK_ENTRY (addressbookentry), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR); -- GitLab