diff options
-rw-r--r-- | addressbook/ChangeLog | 24 | ||||
-rw-r--r-- | addressbook/backend/pas/pas-backend-card-sexp.c | 23 | ||||
-rw-r--r-- | addressbook/gui/component/addressbook.c | 12 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-view.c | 16 |
4 files changed, 53 insertions, 22 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index 310d5add60..ab1eb8eb3d 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,4 +1,26 @@ -2002-03-07 Chris Toshok <toshok@ximian.com> +2002-03-09 Chris Toshok <toshok@ximian.com> + + * gui/widgets/e-addressbook-view.c (jump_to_letter): since I've + gone ahead and made the file backend (by way of + pas-backend-card-sexp.c) use case insensitive searches for + beginswith, there's no need to list upper and lower case here. + + * gui/component/addressbook.c (addressbook_search_option_items): + reorder things to put "Any field contains" at the end, since it's + the least efficient search. Also reorder the enum to the same + ordering. Change "Name contains" to "Name begins with" and change + "Email contains" to "Email is". + (addressbook_search_activated): change FULL_NAME to beginswith, + and change EMAIL to is to match the labels. + + * backend/pas/pas-backend-card-sexp.c (compare_name): new + function, so we can compare both full and family names (so + beginswith can operate on them both.) + (endswith_helper): use e_utf8_strstrcase here, since all the + backends backends use case insensitive searching. + (func_endswith): same. + +2002-03-06 Chris Toshok <toshok@ximian.com> * backend/pas/pas-book.c (pas_book_queue_create_card): track union/struct change. diff --git a/addressbook/backend/pas/pas-backend-card-sexp.c b/addressbook/backend/pas/pas-backend-card-sexp.c index 8b531d5ede..ea217fa052 100644 --- a/addressbook/backend/pas/pas-backend-card-sexp.c +++ b/addressbook/backend/pas/pas-backend-card-sexp.c @@ -71,6 +71,23 @@ compare_phone (ECardSimple *card, const char *str, } static gboolean +compare_name (ECardSimple *card, const char *str, + char *(*compare)(const char*, const char*)) +{ + const char *name; + + name = e_card_simple_get_const (card, E_CARD_SIMPLE_FIELD_FULL_NAME); + if (name && compare (name, str)) + return TRUE; + + name = e_card_simple_get_const (card, E_CARD_SIMPLE_FIELD_FAMILY_NAME); + if (name && compare (name, str)) + return TRUE; + + return FALSE; +} + +static gboolean compare_address (ECardSimple *card, const char *str, char *(*compare)(const char*, const char*)) { @@ -157,7 +174,7 @@ static struct prop_info { /* query prop, ecard prop, type, list compare function */ NORMAL_PROP ( E_CARD_SIMPLE_FIELD_FILE_AS, "file_as", "file_as" ), - NORMAL_PROP ( E_CARD_SIMPLE_FIELD_FULL_NAME, "full_name", "full_name" ), + LIST_PROP ( "full_name", "full_name", compare_name), /* not really a list, but we need to compare both full and surname */ NORMAL_PROP ( E_CARD_SIMPLE_FIELD_URL, "url", "url" ), NORMAL_PROP ( E_CARD_SIMPLE_FIELD_MAILER, "mailer", "mailer"), NORMAL_PROP ( E_CARD_SIMPLE_FIELD_ORG, "org", "org"), @@ -280,7 +297,7 @@ static char * endswith_helper (const char *s1, const char *s2) { char *p; - if ((p = strstr(s1, s2)) + if ((p = (char*)e_utf8_strstrcase(s1, s2)) && (strlen(p) == strlen(s2))) return p; else @@ -299,7 +316,7 @@ static char * beginswith_helper (const char *s1, const char *s2) { char *p; - if ((p = strstr(s1, s2)) + if ((p = (char*)e_utf8_strstrcase(s1, s2)) && (p == s1)) return p; else diff --git a/addressbook/gui/component/addressbook.c b/addressbook/gui/component/addressbook.c index 73cb71abff..72cf16cdeb 100644 --- a/addressbook/gui/component/addressbook.c +++ b/addressbook/gui/component/addressbook.c @@ -825,18 +825,18 @@ static ESearchBarItem addressbook_search_menu_items[] = { }; enum { - ESB_ANY, ESB_FULL_NAME, ESB_EMAIL, ESB_CATEGORY, + ESB_ANY, ESB_ADVANCED }; static ESearchBarItem addressbook_search_option_items[] = { - { N_("Any field contains"), ESB_ANY, NULL }, - { N_("Name contains"), ESB_FULL_NAME, NULL }, - { N_("Email contains"), ESB_EMAIL, NULL }, + { N_("Name begins with"), ESB_FULL_NAME, NULL }, + { N_("Email is"), ESB_EMAIL, NULL }, { N_("Category is"), ESB_CATEGORY, NULL }, /* We attach subitems below */ + { N_("Any field contains"), ESB_ANY, NULL }, { N_("Advanced..."), ESB_ADVANCED, NULL }, { NULL, -1, NULL } }; @@ -898,11 +898,11 @@ addressbook_search_activated (ESearchBar *esb, AddressbookView *view) s->str); break; case ESB_FULL_NAME: - search_query = g_strdup_printf ("(contains \"full_name\" %s)", + search_query = g_strdup_printf ("(beginswith \"full_name\" %s)", s->str); break; case ESB_EMAIL: - search_query = g_strdup_printf ("(contains \"email\" %s)", + search_query = g_strdup_printf ("(is \"email\" %s)", s->str); break; case ESB_CATEGORY: diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c index 1679c95392..6a78cf13eb 100644 --- a/addressbook/gui/widgets/e-addressbook-view.c +++ b/addressbook/gui/widgets/e-addressbook-view.c @@ -649,25 +649,17 @@ jump_to_letter(EAddressbookView *view, gunichar letter) g_assert (letter_v != NULL && letter_v[0] != NULL); gstr = g_string_new ("(not (or "); for (p = letter_v + 1; *p != NULL; p++) { - char s[7]; - g_string_sprintfa (gstr, "(beginswith \"file_as\" \"%s\")", *p); - s[g_unichar_to_utf8 (g_unichar_toupper (g_utf8_get_char (*p)), s)] = '\0'; - g_string_sprintfa (gstr, "(beginswith \"file_as\" \"%s\")", s); } g_string_append (gstr, "))"); query = gstr->str; g_strfreev (letter_v); g_string_free (gstr, FALSE); } else { - char s1[6 + 1], s2[6 + 1]; - - s1 [g_unichar_to_utf8 (letter, s1)] = '\0'; - s2 [g_unichar_to_utf8 (g_unichar_toupper (letter), s2)] = '\0'; - query = g_strdup_printf ("(or " - "(beginswith \"file_as\" \"%s\")" - "(beginswith \"file_as\" \"%s\")" - ")", s1, s2); + char s[6 + 1]; + + s [g_unichar_to_utf8 (letter, s)] = '\0'; + query = g_strdup_printf ("(beginswith \"file_as\" \"%s\")", s); } gtk_object_set (GTK_OBJECT (view), "query", query, |