diff options
-rw-r--r-- | addressbook/ChangeLog | 10 | ||||
-rw-r--r-- | addressbook/gui/component/select-names/e-select-names-completion.c | 37 |
2 files changed, 30 insertions, 17 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index 1358d51184..de932c1d76 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,3 +1,13 @@ +2004-03-04 Not Zed <NotZed@Ximian.com> + + ** See #54991. + + * gui/component/select-names/e-select-names-completion.c + (e_select_names_completion_start_query): dont try to unref a null + query. + (name_style_query): use a GString to build the query, so we can + use e_sexp_encode_string to properly encode the sub terms. + 2004-03-03 Hans Petter Jansson <hpj@ximian.com> * gui/component/addressbook-component.c (delete_addressbook_cb): diff --git a/addressbook/gui/component/select-names/e-select-names-completion.c b/addressbook/gui/component/select-names/e-select-names-completion.c index b80611b9ff..e3fa256dc8 100644 --- a/addressbook/gui/component/select-names/e-select-names-completion.c +++ b/addressbook/gui/component/select-names/e-select-names-completion.c @@ -39,6 +39,8 @@ #include <addressbook/util/eab-destination.h> #include <addressbook/gui/merging/eab-contact-compare.h> +#include <e-util/e-sexp.h> + typedef struct { EBook *book; guint book_view_tag; @@ -261,7 +263,8 @@ name_style_query (ESelectNamesCompletion *comp, const gchar *field) gchar *cpy = g_strdup (comp->priv->query_text), *c; gchar **strv; gchar *query; - gint i, count=0; + gint i; + GString *out = g_string_new(""); for (c = cpy; *c; ++c) { if (*c == ',') @@ -269,23 +272,23 @@ name_style_query (ESelectNamesCompletion *comp, const gchar *field) } strv = g_strsplit (cpy, " ", 0); + if (strv[0] && strv[1]) + g_string_append(out, "(and "); for (i=0; strv[i]; ++i) { - gchar *old; - ++count; - g_strstrip (strv[i]); - old = strv[i]; - strv[i] = g_strdup_printf ("(beginswith \"%s\" \"%s\")", field, old); - g_free (old); + if (i==0) + g_string_append(out, "(beginswith "); + else + g_string_append(out, " (beginswith "); + e_sexp_encode_string(out, field); + g_strstrip(strv[i]); + e_sexp_encode_string(out, strv[i]); + g_string_append(out, ")"); } + if (strv[0] && strv[1]) + g_string_append(out, ")"); - if (count == 1) { - query = strv[0]; - strv[0] = NULL; - } else { - gchar *joined = g_strjoinv (" ", strv); - query = g_strdup_printf ("(and %s)", joined); - g_free (joined); - } + query = out->str; + g_string_free(out, FALSE); g_free (cpy); g_strfreev (strv); @@ -1025,12 +1028,12 @@ e_select_names_completion_start_query (ESelectNamesCompletion *comp, const gchar that the search is over. */ if (!comp->priv->pending_completion_seq) e_select_names_completion_done (E_SELECT_NAMES_COMPLETION (comp)); + + e_book_query_unref (query); } else { g_free (comp->priv->query_text); comp->priv->query_text = NULL; } - e_book_query_unref (query); - } else { comp->priv->waiting_query = g_strdup (query_text); |