[gthumb] tags dialog: simplify the addition of tags
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] tags dialog: simplify the addition of tags
- Date: Thu, 2 Nov 2017 09:26:18 +0000 (UTC)
commit 69deab6e09bfd5acaa8f0b3707f8fab164df6b4f
Author: Paolo Bacchilega <paobac src gnome org>
Date: Thu Nov 2 09:55:15 2017 +0100
tags dialog: simplify the addition of tags
add a comma at the end of the tags entry to simplify the
addition of a new tag
[bug #777234]
gthumb/gth-tags-entry.c | 101 +++++++++++++++++++++++++++++-----------------
1 files changed, 64 insertions(+), 37 deletions(-)
---
diff --git a/gthumb/gth-tags-entry.c b/gthumb/gth-tags-entry.c
index 034f711..b2df2c4 100644
--- a/gthumb/gth-tags-entry.c
+++ b/gthumb/gth-tags-entry.c
@@ -317,44 +317,59 @@ sort_tag_data (gconstpointer a,
}
+static gboolean
+_tag_is_valid (const char *tag)
+{
+ if (tag == NULL)
+ return FALSE;
+ if (_g_utf8_all_spaces (tag))
+ return FALSE;
+ return TRUE;
+}
+
+
static void
update_expanded_list_from_entry (GthTagsEntry *self)
{
char **all_tags;
char **used_tags;
TagData **tag_data;
- int i;
+ int i, t;
GtkTreeIter iter;
gboolean separator_required;
all_tags = g_strdupv (self->priv->tags);
used_tags = gth_tags_entry_get_tags (GTH_TAGS_ENTRY (self), FALSE);
- tag_data = g_new (TagData *, g_strv_length (all_tags) + 1);
- for (i = 0; all_tags[i] != NULL; i++) {
+ tag_data = g_new0 (TagData *, g_strv_length (all_tags) + 1);
+ for (i = 0, t = 0; all_tags[i] != NULL; i++) {
int j;
- tag_data[i] = g_new0 (TagData, 1);
- tag_data[i]->name = g_strdup (all_tags[i]);
- tag_data[i]->used = FALSE;
- tag_data[i]->inconsistent = (g_hash_table_lookup (self->priv->inconsistent,
tag_data[i]->name) != NULL);
- tag_data[i]->suggested = tag_data[i]->inconsistent;
- for (j = 0; ! tag_data[i]->used && (used_tags[j] != NULL); j++)
- if (g_utf8_collate (tag_data[i]->name, used_tags[j]) == 0) {
- tag_data[i]->used = TRUE;
- tag_data[i]->inconsistent = FALSE;
- tag_data[i]->suggested = FALSE;
+ if (! _tag_is_valid (all_tags[i]))
+ continue;
+
+ tag_data[t] = g_new0 (TagData, 1);
+ tag_data[t]->name = g_strdup (all_tags[i]);
+ tag_data[t]->used = FALSE;
+ tag_data[t]->inconsistent = (g_hash_table_lookup (self->priv->inconsistent,
tag_data[t]->name) != NULL);
+ tag_data[t]->suggested = tag_data[t]->inconsistent;
+ for (j = 0; ! tag_data[t]->used && (used_tags[j] != NULL); j++)
+ if (g_utf8_collate (tag_data[t]->name, used_tags[j]) == 0) {
+ tag_data[t]->used = TRUE;
+ tag_data[t]->inconsistent = FALSE;
+ tag_data[t]->suggested = FALSE;
}
- if (! tag_data[i]->used)
- for (j = 0; ! tag_data[i]->suggested && (self->priv->expanded_list.last_used[j] !=
NULL); j++)
- if (g_utf8_collate (tag_data[i]->name,
self->priv->expanded_list.last_used[j]) == 0)
- tag_data[i]->suggested = TRUE;
+ if (! tag_data[t]->used)
+ for (j = 0; ! tag_data[t]->suggested && (self->priv->expanded_list.last_used[j] !=
NULL); j++)
+ if (g_utf8_collate (tag_data[t]->name,
self->priv->expanded_list.last_used[j]) == 0)
+ tag_data[t]->suggested = TRUE;
+
+ t++;
}
- tag_data[i] = NULL;
g_qsort_with_data (tag_data,
- g_strv_length (all_tags),
+ g_strv_length (tag_data),
sizeof (TagData *),
sort_tag_data,
NULL);
@@ -1304,25 +1319,31 @@ gth_tags_entry_set_tags (GthTagsEntry *self,
char **tags)
{
GthTagsFile *tags_file;
+ GString *valid_tags;
int i;
gboolean global_tags_changed = FALSE;
- char *s;
if ((tags == NULL) || (tags[0] == NULL)) {
gtk_entry_set_text (GTK_ENTRY (self->priv->entry), "");
return;
}
+ valid_tags = g_string_new ("");
tags_file = gth_main_get_default_tag_file ();
- for (i = 0; tags[i] != NULL; i++)
+ for (i = 0; tags[i] != NULL; i++) {
+ if (! _tag_is_valid (tags[i]))
+ continue;
+ g_string_append (valid_tags, tags[i]);
+ g_string_append (valid_tags, ", ");
if (gth_tags_file_add (tags_file, tags[i]))
global_tags_changed = TRUE;
+ }
if (global_tags_changed)
gth_main_tags_changed ();
- s = g_strjoinv (", ", tags);
- gtk_entry_set_text (GTK_ENTRY (self->priv->entry), s);
- g_free (s);
+ gtk_entry_set_text (GTK_ENTRY (self->priv->entry), valid_tags->str);
+
+ g_string_free (valid_tags, TRUE);
}
@@ -1362,13 +1383,12 @@ gth_tags_entry_get_tags (GthTagsEntry *self,
all_tags = g_strsplit (gtk_entry_get_text (GTK_ENTRY (self->priv->entry)), ",", -1);
tags = g_new0 (char *, g_strv_length (all_tags) + 1);
for (i = 0, j = 0; all_tags[i] != NULL; i++) {
- all_tags[i] = g_strstrip (all_tags[i]);
- if (all_tags[i][0] != '\0') {
- tags[j] = g_strdup (g_strstrip (all_tags[i]));
- if (update_globals)
- gth_tags_file_add (tags_file, tags[j]);
- j++;
- }
+ if (! _tag_is_valid (all_tags[i]))
+ continue;
+ tags[j] = g_strdup (g_strstrip (all_tags[i]));
+ if (update_globals)
+ gth_tags_file_add (tags_file, tags[j]);
+ j++;
}
g_strfreev (all_tags);
@@ -1391,14 +1411,20 @@ gth_tags_entry_set_tag_list (GthTagsEntry *self,
GList *scan;
g_hash_table_remove_all (self->priv->inconsistent);
- for (scan = inconsistent; scan; scan = scan->next)
- g_hash_table_insert (self->priv->inconsistent, g_strdup (scan->data), GINT_TO_POINTER (1));
+ for (scan = inconsistent; scan; scan = scan->next) {
+ char *tag = scan->data;
+ if (! _tag_is_valid (tag))
+ continue;
+ g_hash_table_insert (self->priv->inconsistent, g_strdup (tag), GINT_TO_POINTER (1));
+ }
str = g_string_new ("");
for (scan = checked; scan; scan = scan->next) {
- if (scan != checked)
- g_string_append (str, ", ");
- g_string_append (str, (char *) scan->data);
+ char *tag = scan->data;
+ if (! _tag_is_valid (tag))
+ continue;
+ g_string_append (str, tag);
+ g_string_append (str, ", ");
}
gth_tags_entry_set_tags_from_text (self, str->str);
@@ -1422,7 +1448,8 @@ gth_tags_entry_get_tag_list (GthTagsEntry *self,
tags_v = gth_tags_entry_get_tags (self, update_globals);
*checked = NULL;
for (i = 0; tags_v[i] != NULL; i++)
- *checked = g_list_prepend (*checked, g_strdup (tags_v[i]));
+ if (_tag_is_valid(tags_v[i]))
+ *checked = g_list_prepend (*checked, g_strdup (tags_v[i]));
*checked = g_list_reverse (*checked);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]