gplugin/gplugin

Add sorting to GTK4 viewer

2021-12-06, Elliott Sales de Andrade
124b09203cba
Parents ac9388f9dc4b
Children 0a057bd05094
Add sorting to GTK4 viewer

This is simple sorting based on the title (aka plugin name).
--- a/gplugin-gtk4/gplugin-gtk-plugin-row.c Mon Dec 06 22:37:08 2021 -0600
+++ b/gplugin-gtk4/gplugin-gtk-plugin-row.c Mon Dec 06 22:37:08 2021 -0600
@@ -457,3 +457,19 @@
return row->plugin;
}
+
+/**
+ * gplugin_gtk_plugin_row_get_sort_key:
+ * @row: The plugin row instance.
+ *
+ * Returns a key that can be used to sort this row.
+ *
+ * Returns: The sort key.
+ */
+gchar *
+gplugin_gtk_plugin_row_get_sort_key(GPluginGtkPluginRow *row)
+{
+ g_return_val_if_fail(GPLUGIN_GTK_IS_PLUGIN_ROW(row), NULL);
+
+ return g_strdup(gtk_label_get_text(GTK_LABEL(row->title)));
+}
--- a/gplugin-gtk4/gplugin-gtk-plugin-row.h Mon Dec 06 22:37:08 2021 -0600
+++ b/gplugin-gtk4/gplugin-gtk-plugin-row.h Mon Dec 06 22:37:08 2021 -0600
@@ -46,6 +46,7 @@
GPluginGtkPluginRow *row,
GPluginPlugin *plugin);
GPluginPlugin *gplugin_gtk_plugin_row_get_plugin(GPluginGtkPluginRow *row);
+gchar *gplugin_gtk_plugin_row_get_sort_key(GPluginGtkPluginRow *row);
G_END_DECLS
--- a/gplugin-gtk4/gplugin-gtk-view.c Mon Dec 06 22:37:08 2021 -0600
+++ b/gplugin-gtk4/gplugin-gtk-view.c Mon Dec 06 22:37:08 2021 -0600
@@ -73,6 +73,30 @@
}
}
+static int
+gplugin_gtk_view_sort_func(
+ GtkListBoxRow *row1,
+ GtkListBoxRow *row2,
+ G_GNUC_UNUSED gpointer data)
+{
+ GPluginGtkPluginRow *view1 = NULL, *view2 = NULL;
+ gchar *key1 = NULL, *key2 = NULL;
+ gint ret = 0;
+
+ view1 = GPLUGIN_GTK_PLUGIN_ROW(row1);
+ key1 = gplugin_gtk_plugin_row_get_sort_key(view1);
+
+ view2 = GPLUGIN_GTK_PLUGIN_ROW(row2);
+ key2 = gplugin_gtk_plugin_row_get_sort_key(view2);
+
+ ret = g_strcmp0(key1, key2);
+
+ g_free(key1);
+ g_free(key2);
+
+ return ret;
+}
+
/******************************************************************************
* GObject Implementation
*****************************************************************************/
@@ -192,6 +216,12 @@
gplugin_gtk_view_init(GPluginGtkView *self)
{
gtk_widget_init_template(GTK_WIDGET(self));
+
+ gtk_list_box_set_sort_func(
+ GTK_LIST_BOX(self->list_box),
+ gplugin_gtk_view_sort_func,
+ NULL,
+ NULL);
}
/******************************************************************************