[gnome-builder] libide/tweaks: add sort key to item



commit 2bf7ef5df6ef97b46510601f42e4330a734d8f24
Author: Christian Hergert <chergert redhat com>
Date:   Fri Jul 29 19:04:27 2022 -0700

    libide/tweaks: add sort key to item
    
    We can use this to reorder things lexicographically.

 src/libide/tweaks/ide-tweaks-item.c | 38 +++++++++++++++++++++++++++++++++++++
 src/libide/tweaks/ide-tweaks-item.h |  5 +++++
 2 files changed, 43 insertions(+)
---
diff --git a/src/libide/tweaks/ide-tweaks-item.c b/src/libide/tweaks/ide-tweaks-item.c
index c1cfa55fc..efa66f468 100644
--- a/src/libide/tweaks/ide-tweaks-item.c
+++ b/src/libide/tweaks/ide-tweaks-item.c
@@ -27,11 +27,13 @@
 typedef struct
 {
   char **keywords;
+  char *sort_key;
 } IdeTweaksItemPrivate;
 
 enum {
   PROP_0,
   PROP_KEYWORDS,
+  PROP_SORT_KEY,
   N_PROPS
 };
 
@@ -46,6 +48,7 @@ ide_tweaks_item_finalize (GObject *object)
   IdeTweaksItemPrivate *priv = ide_tweaks_item_get_instance_private (self);
 
   g_clear_pointer (&priv->keywords, g_strfreev);
+  g_clear_pointer (&priv->sort_key, g_free);
 
   G_OBJECT_CLASS (ide_tweaks_item_parent_class)->finalize (object);
 }
@@ -64,6 +67,10 @@ ide_tweaks_item_get_property (GObject    *object,
       g_value_set_boxed (value, ide_tweaks_item_get_keywords (self));
       break;
 
+    case PROP_SORT_KEY:
+      g_value_set_string (value, ide_tweaks_item_get_sort_key (self));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -83,6 +90,10 @@ ide_tweaks_item_set_property (GObject      *object,
       ide_tweaks_item_set_keywords (self, g_value_get_boxed (value));
       break;
 
+    case PROP_SORT_KEY:
+      ide_tweaks_item_set_sort_key (self, g_value_get_string (value));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -102,6 +113,11 @@ ide_tweaks_item_class_init (IdeTweaksItemClass *klass)
                         G_TYPE_STRV,
                         (G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
 
+  properties [PROP_SORT_KEY] =
+    g_param_spec_string ("sort_key", NULL, NULL,
+                         NULL,
+                         (G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
+
   g_object_class_install_properties (object_class, N_PROPS, properties);
 }
 
@@ -135,3 +151,25 @@ ide_tweaks_item_set_keywords (IdeTweaksItem      *self,
   priv->keywords = g_strdupv ((char **)keywords);
   g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_KEYWORDS]);
 }
+
+const char *
+ide_tweaks_item_get_sort_key (IdeTweaksItem *self)
+{
+  IdeTweaksItemPrivate *priv = ide_tweaks_item_get_instance_private (self);
+
+  g_return_val_if_fail (IDE_IS_TWEAKS_ITEM (self), NULL);
+
+  return priv->sort_key;
+}
+
+void
+ide_tweaks_item_set_sort_key (IdeTweaksItem *self,
+                              const char    *sort_key)
+{
+  IdeTweaksItemPrivate *priv = ide_tweaks_item_get_instance_private (self);
+
+  g_return_if_fail (IDE_IS_TWEAKS_ITEM (self));
+
+  if (ide_set_string (&priv->sort_key, sort_key))
+    g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_SORT_KEY]);
+}
diff --git a/src/libide/tweaks/ide-tweaks-item.h b/src/libide/tweaks/ide-tweaks-item.h
index 88ba5cb3e..274652461 100644
--- a/src/libide/tweaks/ide-tweaks-item.h
+++ b/src/libide/tweaks/ide-tweaks-item.h
@@ -43,5 +43,10 @@ const char * const *ide_tweaks_item_get_keywords (IdeTweaksItem      *self);
 IDE_AVAILABLE_IN_ALL
 void                ide_tweaks_item_set_keywords (IdeTweaksItem      *self,
                                                   const char * const *keywords);
+IDE_AVAILABLE_IN_ALL
+const char         *ide_tweaks_item_get_sort_key (IdeTweaksItem      *self);
+IDE_AVAILABLE_IN_ALL
+void                ide_tweaks_item_set_sort_key (IdeTweaksItem      *self,
+                                                  const char         *sort_key);
 
 G_END_DECLS


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