[evolution-data-server] Bug #600527 - Do not use space-and-comma as a category delimiter
- From: Milan Crha <mcrha src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Bug #600527 - Do not use space-and-comma as a category delimiter
- Date: Mon, 9 Nov 2009 17:27:49 +0000 (UTC)
commit 029000f6f01196db3d84a48152c5174c379c2cad
Author: Milan Crha <mcrha redhat com>
Date: Mon Nov 9 18:26:37 2009 +0100
Bug #600527 - Do not use space-and-comma as a category delimiter
libedataserverui/e-categories-dialog.c | 24 ++++++++++++++++++++-
libedataserverui/e-category-completion.c | 33 +++++++++++++++++++++++++++++-
2 files changed, 54 insertions(+), 3 deletions(-)
---
diff --git a/libedataserverui/e-categories-dialog.c b/libedataserverui/e-categories-dialog.c
index 1f1866e..a066a4c 100644
--- a/libedataserverui/e-categories-dialog.c
+++ b/libedataserverui/e-categories-dialog.c
@@ -233,7 +233,7 @@ add_comma_sep_categories (gpointer key, gpointer value, gpointer user_data)
GString **str = user_data;
if (strlen ((*str)->str) > 0)
- *str = g_string_append (*str, ", ");
+ *str = g_string_append (*str, ",");
*str = g_string_append (*str, (const gchar *) key);
}
@@ -716,11 +716,28 @@ const gchar *
e_categories_dialog_get_categories (ECategoriesDialog *dialog)
{
GtkEntry *entry;
+ const gchar *text;
g_return_val_if_fail (E_IS_CATEGORIES_DIALOG (dialog), NULL);
entry = GTK_ENTRY (dialog->priv->categories_entry);
+ text = gtk_entry_get_text (entry);
+ if (text) {
+ gint len = strlen (text), old_len = len;
+
+ while (len > 0 && (text [len -1] == ' ' || text [len - 1] == ','))
+ len--;
+
+ if (old_len != len) {
+ gchar *tmp = g_strndup (text, len);
+
+ gtk_entry_set_text (entry, tmp);
+
+ g_free (tmp);
+ }
+ }
+
return gtk_entry_get_text (entry);
}
@@ -751,7 +768,10 @@ e_categories_dialog_set_categories (ECategoriesDialog *dialog,
if (arr) {
gint i = 0;
while (arr[i] != NULL) {
- g_hash_table_insert (priv->selected_categories, g_strdup (arr[i]), g_strdup (arr[i]));
+ arr[i] = g_strstrip (arr[i]);
+
+ if (arr[i][0])
+ g_hash_table_insert (priv->selected_categories, g_strdup (arr[i]), g_strdup (arr[i]));
i++;
}
diff --git a/libedataserverui/e-category-completion.c b/libedataserverui/e-category-completion.c
index 4a1ffb8..e0ce6fd 100644
--- a/libedataserverui/e-category-completion.c
+++ b/libedataserverui/e-category-completion.c
@@ -154,7 +154,7 @@ category_completion_complete (GtkEntryCompletion *completion,
/* Complete the partially typed category. */
gtk_editable_delete_text (editable, start_pos, end_pos);
gtk_editable_insert_text (editable, category, -1, &start_pos);
- gtk_editable_insert_text (editable, ", ", 2, &start_pos);
+ gtk_editable_insert_text (editable, ",", 1, &start_pos);
gtk_editable_set_position (editable, start_pos);
}
@@ -292,6 +292,33 @@ category_completion_update_prefix (GtkEntryCompletion *completion)
g_free (input);
}
+static gboolean
+category_completion_sanitize_suffix (GtkEntry *entry, GdkEventFocus *event, GtkEntryCompletion *completion)
+{
+ const gchar *text;
+
+ g_return_val_if_fail (entry != NULL, FALSE);
+ g_return_val_if_fail (completion != NULL, FALSE);
+
+ text = gtk_entry_get_text (entry);
+ if (text) {
+ gint len = strlen (text), old_len = len;
+
+ while (len > 0 && (text [len -1] == ' ' || text [len - 1] == ','))
+ len--;
+
+ if (old_len != len) {
+ gchar *tmp = g_strndup (text, len);
+
+ gtk_entry_set_text (entry, tmp);
+
+ g_free (tmp);
+ }
+ }
+
+ return FALSE;
+}
+
static void
category_completion_track_entry (GtkEntryCompletion *completion)
{
@@ -323,6 +350,10 @@ category_completion_track_entry (GtkEntryCompletion *completion)
priv->last_known_entry, "notify::text",
G_CALLBACK (category_completion_update_prefix), completion);
+ g_signal_connect (
+ priv->last_known_entry, "focus-out-event",
+ G_CALLBACK (category_completion_sanitize_suffix), completion);
+
category_completion_update_prefix (completion);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]