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

Reply via email to