summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2020-07-16 12:05:45 +0200
committerBenjamin Otte <otte@redhat.com>2020-07-22 14:30:49 +0200
commit814c88fbc1b9312023e1148ea91712258e97eeef (patch)
treed5bbec4e525ad48732b44f75cd80909050c4f940
parent3b24c8a0a4782d1118520005376ed0b5c60d43d3 (diff)
downloadgtk+-814c88fbc1b9312023e1148ea91712258e97eeef.tar.gz
sortkeys: Add an equal sort keys
Compares every element as equal. This is useful when sorters are in an invalid configuration.
-rw-r--r--gtk/gtksortkeys.c53
-rw-r--r--gtk/gtksortkeysprivate.h2
2 files changed, 55 insertions, 0 deletions
diff --git a/gtk/gtksortkeys.c b/gtk/gtksortkeys.c
index d99939fe1b..032c60b4f2 100644
--- a/gtk/gtksortkeys.c
+++ b/gtk/gtksortkeys.c
@@ -95,3 +95,56 @@ gtk_sort_keys_needs_clear_key (GtkSortKeys *self)
return self->klass->clear_key != NULL;
}
+static void
+gtk_equal_sort_keys_free (GtkSortKeys *keys)
+{
+ g_slice_free (GtkSortKeys, keys);
+}
+
+static int
+gtk_equal_sort_keys_compare (gconstpointer a,
+ gconstpointer b,
+ gpointer unused)
+{
+ return GTK_ORDERING_EQUAL;
+}
+
+static gboolean
+gtk_equal_sort_keys_is_compatible (GtkSortKeys *keys,
+ GtkSortKeys *other)
+{
+ return keys->klass == other->klass;
+}
+
+static void
+gtk_equal_sort_keys_init_key (GtkSortKeys *keys,
+ gpointer item,
+ gpointer key_memory)
+{
+}
+
+static const GtkSortKeysClass GTK_EQUAL_SORT_KEYS_CLASS =
+{
+ gtk_equal_sort_keys_free,
+ gtk_equal_sort_keys_compare,
+ gtk_equal_sort_keys_is_compatible,
+ gtk_equal_sort_keys_init_key,
+ NULL
+};
+
+/*<private>
+ * gtk_sort_keys_new_equal:
+ *
+ * Creates a new #GtkSortKeys that compares every element as equal.
+ * This is useful when sorters are in an invalid configuration.
+ *
+ * Returns: a new #GtkSortKeys
+ **/
+GtkSortKeys *
+gtk_sort_keys_new_equal (void)
+{
+ return gtk_sort_keys_new (GtkSortKeys,
+ &GTK_EQUAL_SORT_KEYS_CLASS,
+ 0, 1);
+}
+
diff --git a/gtk/gtksortkeysprivate.h b/gtk/gtksortkeysprivate.h
index d213ffb43b..c9f93b69dc 100644
--- a/gtk/gtksortkeysprivate.h
+++ b/gtk/gtksortkeysprivate.h
@@ -59,6 +59,8 @@ GtkSortKeys * gtk_sort_keys_alloc (const GtkSortKe
GtkSortKeys * gtk_sort_keys_ref (GtkSortKeys *self);
void gtk_sort_keys_unref (GtkSortKeys *self);
+GtkSortKeys * gtk_sort_keys_new_equal (void);
+
gsize gtk_sort_keys_get_key_size (GtkSortKeys *self);
gsize gtk_sort_keys_get_key_align (GtkSortKeys *self);
GCompareDataFunc gtk_sort_keys_get_key_compare_func (GtkSortKeys *self);