[gtk/prop-list: 153/154] string filter: Don't collate, normalize
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/prop-list: 153/154] string filter: Don't collate, normalize
- Date: Tue, 3 Dec 2019 01:41:34 +0000 (UTC)
commit a7bb4f2c26766542740099c37779850d122a3c06
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Dec 2 20:05:47 2019 -0500
string filter: Don't collate, normalize
Collation is only neede when we want to sort.
gtk/gtkstringfilter.c | 40 +++++++++++++++++++++-------------------
1 file changed, 21 insertions(+), 19 deletions(-)
---
diff --git a/gtk/gtkstringfilter.c b/gtk/gtkstringfilter.c
index 4ce6c44f8c..ae29bee7e5 100644
--- a/gtk/gtkstringfilter.c
+++ b/gtk/gtkstringfilter.c
@@ -29,7 +29,7 @@ struct _GtkStringFilter
GtkFilter parent_instance;
char *search;
- char *search_collated;
+ char *search_prepared;
gboolean ignore_case;
gboolean match_substring;
@@ -51,19 +51,21 @@ G_DEFINE_TYPE (GtkStringFilter, gtk_string_filter, GTK_TYPE_FILTER)
static GParamSpec *properties[NUM_PROPERTIES] = { NULL, };
static char *
-gtk_string_filter_collate (GtkStringFilter *self,
+gtk_string_filter_prepare (GtkStringFilter *self,
const char *s)
{
- char *result, *tmp;
+ char *tmp;
+ char *result;
if (s == NULL || s[0] == '\0')
return NULL;
+ tmp = g_utf8_normalize (s, -1, G_NORMALIZE_ALL);
+
if (!self->ignore_case)
- return g_utf8_collate_key (s, -1);
+ return tmp;
- tmp = g_utf8_casefold (s, -1);
- result = g_utf8_collate_key (tmp, -1);
+ result = g_utf8_casefold (tmp, -1);
g_free (tmp);
return result;
@@ -75,11 +77,11 @@ gtk_string_filter_filter (GtkFilter *filter,
{
GtkStringFilter *self = GTK_STRING_FILTER (filter);
GValue value = G_VALUE_INIT;
- char *collated;
+ char *prepared;
const char *s;
gboolean result;
- if (self->search_collated == NULL)
+ if (self->search_prepared == NULL)
return TRUE;
if (self->expression == NULL ||
@@ -88,18 +90,18 @@ gtk_string_filter_filter (GtkFilter *filter,
s = g_value_get_string (&value);
if (s == NULL)
return FALSE;
- collated = gtk_string_filter_collate (self, s);
+ prepared = gtk_string_filter_prepare (self, s);
if (self->match_substring)
- result = strstr (collated, self->search_collated) != NULL;
+ result = strstr (prepared, self->search_prepared) != NULL;
else
- result = strcmp (collated, self->search_collated) == 0;
+ result = strcmp (prepared, self->search_prepared) == 0;
-#if 0
- g_print ("%s (%s) %s %s (%s)\n", s, collated, result ? "==" : "!=", self->search, self->search_collated);
+#if 1
+ g_print ("%s (%s) %s %s (%s)\n", s, prepared, result ? "==" : "!=", self->search, self->search_prepared);
#endif
- g_free (collated);
+ g_free (prepared);
g_value_unset (&value);
return result;
@@ -175,7 +177,7 @@ gtk_string_filter_dispose (GObject *object)
GtkStringFilter *self = GTK_STRING_FILTER (object);
g_clear_pointer (&self->search, g_free);
- g_clear_pointer (&self->search_collated, g_free);
+ g_clear_pointer (&self->search_prepared, g_free);
g_clear_pointer (&self->expression, gtk_expression_unref);
G_OBJECT_CLASS (gtk_string_filter_parent_class)->dispose (object);
@@ -317,10 +319,10 @@ gtk_string_filter_set_search (GtkStringFilter *self,
change = GTK_FILTER_CHANGE_DIFFERENT;
g_free (self->search);
- g_free (self->search_collated);
+ g_free (self->search_prepared);
self->search = g_strdup (search);
- self->search_collated = gtk_string_filter_collate (self, search);
+ self->search_prepared = gtk_string_filter_prepare (self, search);
gtk_filter_changed (GTK_FILTER (self), change);
@@ -378,8 +380,8 @@ gtk_string_filter_set_ignore_case (GtkStringFilter *self,
if (self->search)
{
- g_free (self->search_collated);
- self->search_collated = gtk_string_filter_collate (self, self->search);
+ g_free (self->search_prepared);
+ self->search_prepared = gtk_string_filter_prepare (self, self->search);
gtk_filter_changed (GTK_FILTER (self), ignore_case ? GTK_FILTER_CHANGE_LESS_STRICT :
GTK_FILTER_CHANGE_MORE_STRICT);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]