[dia] Find&Replace: also search in dictionaries (match values from meta)



commit 7fc755eeafee8f8457b9fe957b9fa2bb08aead43
Author: Hans Breuer <hans breuer org>
Date:   Sun Sep 30 23:30:29 2012 +0200

    Find&Replace: also search in dictionaries (match values from meta)

 app/find-and-replace.c |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)
---
diff --git a/app/find-and-replace.c b/app/find-and-replace.c
index 2123fdc..3961ee5 100644
--- a/app/find-and-replace.c
+++ b/app/find-and-replace.c
@@ -143,6 +143,26 @@ _match_name_prop (DiaObject *obj, const SearchData *sd, const gchar *replacement
   return plist;
 }
 
+/*! GHRFunc : match SearchData against value in the hashtable */
+static gboolean
+_match_value (gpointer  key,
+	      gpointer  value,
+	      gpointer  user_data)
+{
+  const SearchData *sd = (SearchData *)user_data;
+
+  if (sd->flags & MATCH_CASE) {
+    return strstr ((char *)value, sd->key) != NULL;
+  } else {
+    gchar *s1 = g_utf8_casefold ((char *)value, -1);
+    gchar *s2 = g_utf8_casefold (sd->key, -1);
+    gboolean matched = strstr (s1, s2) != NULL;
+    g_free (s1);
+    g_free (s2);
+    return matched;
+  }
+}
+
 /*! Match and possibly modify one property in an object. */
 static gboolean
 _match_prop (DiaObject *obj, const SearchData *sd, const gchar *replacement, Property *prop)
@@ -185,6 +205,12 @@ _match_prop (DiaObject *obj, const SearchData *sd, const gchar *replacement, Pro
     /* Done. */
     return is_match;
   }
+  else if (strcmp (prop_type, PROP_TYPE_DICT) == 0)
+  {
+    GHashTable *ht = ((DictProperty*)prop)->dict;
+    if (ht && g_hash_table_find (ht, _match_value, (gpointer)sd))
+      return TRUE;
+  }
 
 
   /* Check for string / text property. */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]