Revision: 1636
http://geeqie.svn.sourceforge.net/geeqie/?rev=1636&view=rev
Author: mow
Date: 2009-04-11 19:51:03 +0000 (Sat, 11 Apr 2009)
Log Message:
-----------
Allow to configure case handling of keywords
Sometimes I use just different case for keywords. This should be
chooseable.
Modified Paths:
--------------
trunk/src/metadata.c
trunk/src/options.c
trunk/src/options.h
trunk/src/preferences.c
trunk/src/rcfile.c
Modified: trunk/src/metadata.c
===================================================================
--- trunk/src/metadata.c 2009-04-11 19:35:03 UTC (rev 1635)
+++ trunk/src/metadata.c 2009-04-11 19:51:03 UTC (rev 1636)
@@ -854,9 +854,18 @@
{
if (!(exclude_sibling && sibling &&
keyword_compare(keyword_tree, &iter, sibling) == 0))
{
- gchar *iter_casefold =
keyword_get_casefold(keyword_tree, &iter);
- ret = strcmp(casefold, iter_casefold) == 0;
- g_free(iter_casefold);
+ if (options->metadata.tags_case_sensitive)
+ {
+ gchar *iter_name =
keyword_get_name(keyword_tree, &iter);
+ ret = strcmp(name, iter_name) == 0;
+ g_free(iter_name);
+ }
+ else
+ {
+ gchar *iter_casefold =
keyword_get_casefold(keyword_tree, &iter);
+ ret = strcmp(casefold, iter_casefold) == 0;
+ g_free(iter_casefold);
+ } // if (options->metadata.tags_cas...
}
if (ret)
{
@@ -1005,24 +1014,79 @@
}
}
+static gboolean keyword_tree_is_set_casefull(GtkTreeModel *keyword_tree,
GtkTreeIter iter, GList *kw_list)
+{
+ if (!kw_list) return FALSE;
+
+ if (!keyword_get_is_keyword(keyword_tree, &iter))
+ {
+ /* for the purpose of expanding and hiding, a helper is set if
it has any children set */
+ GtkTreeIter child;
+ if (!gtk_tree_model_iter_children(keyword_tree, &child, &iter))
+ return FALSE; /* this should happen only on empty
helpers */
+
+ while (TRUE)
+ {
+ if (keyword_tree_is_set_casefull(keyword_tree, child,
kw_list)) return TRUE;
+ if (!gtk_tree_model_iter_next(keyword_tree, &child))
return FALSE;
+ }
+ }
+
+ while (TRUE)
+ {
+ GtkTreeIter parent;
+
+ if (keyword_get_is_keyword(keyword_tree, &iter))
+ {
+ GList *work = kw_list;
+ gboolean found = FALSE;
+ gchar *iter_name = keyword_get_name(keyword_tree,
&iter);
+ while (work)
+ {
+ const gchar *name = work->data;
+ work = work->next;
+
+ if (strcmp(iter_name, name) == 0)
+ {
+ found = TRUE;
+ break;
+ }
+ }
+ g_free(iter_name);
+ if (!found) return FALSE;
+ }
+
+ if (!gtk_tree_model_iter_parent(keyword_tree, &parent, &iter))
return TRUE;
+ iter = parent;
+ }
+}
+
gboolean keyword_tree_is_set(GtkTreeModel *keyword_tree, GtkTreeIter *iter,
GList *kw_list)
{
gboolean ret;
GList *casefold_list = NULL;
GList *work;
- work = kw_list;
- while (work)
+ if (options->metadata.tags_case_sensitive)
{
- const gchar *kw = work->data;
- work = work->next;
+ ret = keyword_tree_is_set_casefull(keyword_tree, *iter,
kw_list);
+ }
+ else
+ {
+ work = kw_list;
+ while (work)
+ {
+ const gchar *kw = work->data;
+ work = work->next;
- casefold_list = g_list_prepend(casefold_list,
g_utf8_casefold(kw, -1));
+ casefold_list = g_list_prepend(casefold_list,
g_utf8_casefold(kw, -1));
+ }
+
+ ret = keyword_tree_is_set_casefold(keyword_tree, *iter,
casefold_list);
+
+ string_list_free(casefold_list);
}
-
- ret = keyword_tree_is_set_casefold(keyword_tree, *iter, casefold_list);
-
- string_list_free(casefold_list);
+
return ret;
}
Modified: trunk/src/options.c
===================================================================
--- trunk/src/options.c 2009-04-11 19:35:03 UTC (rev 1635)
+++ trunk/src/options.c 2009-04-11 19:51:03 UTC (rev 1636)
@@ -103,6 +103,7 @@
options->metadata.confirm_timeout = 10;
options->metadata.confirm_on_image_change = FALSE;
options->metadata.confirm_on_dir_change = TRUE;
+ options->metadata.tags_case_sensitive = FALSE;
options->show_icon_names = TRUE;
Modified: trunk/src/options.h
===================================================================
--- trunk/src/options.h 2009-04-11 19:35:03 UTC (rev 1635)
+++ trunk/src/options.h 2009-04-11 19:51:03 UTC (rev 1636)
@@ -177,6 +177,7 @@
gboolean confirm_after_timeout;
gboolean confirm_on_image_change;
gboolean confirm_on_dir_change;
+ gboolean tags_case_sensitive;
} metadata;
};
Modified: trunk/src/preferences.c
===================================================================
--- trunk/src/preferences.c 2009-04-11 19:35:03 UTC (rev 1635)
+++ trunk/src/preferences.c 2009-04-11 19:51:03 UTC (rev 1636)
@@ -324,6 +324,7 @@
options->metadata.confirm_after_timeout =
c_options->metadata.confirm_after_timeout;
options->metadata.confirm_on_image_change =
c_options->metadata.confirm_on_image_change;
options->metadata.confirm_on_dir_change =
c_options->metadata.confirm_on_dir_change;
+ options->metadata.tags_case_sensitive =
c_options->metadata.tags_case_sensitive;
#ifdef DEBUG
set_debug_level(debug_c);
@@ -1364,6 +1365,9 @@
pref_checkbox_new_int(group, _("Write metadata on directory change"),
options->metadata.confirm_on_dir_change,
&c_options->metadata.confirm_on_dir_change);
+
+ pref_checkbox_new_int(group, _("Allow keywords to differ only in case"),
+ options->metadata.tags_case_sensitive,
&c_options->metadata.tags_case_sensitive);
}
/* metadata tab */
Modified: trunk/src/rcfile.c
===================================================================
--- trunk/src/rcfile.c 2009-04-11 19:35:03 UTC (rev 1635)
+++ trunk/src/rcfile.c 2009-04-11 19:51:03 UTC (rev 1636)
@@ -437,6 +437,7 @@
WRITE_NL(); WRITE_BOOL(*options, metadata.confirm_after_timeout);
WRITE_NL(); WRITE_BOOL(*options, metadata.confirm_on_image_change);
WRITE_NL(); WRITE_BOOL(*options, metadata.confirm_on_dir_change);
+ WRITE_NL(); WRITE_BOOL(*options, metadata.tags_case_sensitive);
}
@@ -695,6 +696,7 @@
if (READ_INT(*options, metadata.confirm_timeout)) continue;
if (READ_BOOL(*options, metadata.confirm_on_image_change))
continue;
if (READ_BOOL(*options, metadata.confirm_on_dir_change))
continue;
+ if (READ_BOOL(*options, metadata.tags_case_sensitive)) continue;
log_printf("unknown attribute %s = %s\n", option, value);
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
_______________________________________________
Geeqie-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geeqie-svn