[gtk/prop-list: 2/2] column view: Add a sort-by api



commit ca99cbdf4ca9cf4ca0540ed28066d591c052945d
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Dec 3 21:31:57 2019 -0500

    column view: Add a sort-by api

 gtk/gtkcolumnview.c              | 17 +++++++++++++++++
 gtk/gtkcolumnview.h              |  5 +++++
 gtk/gtkcolumnviewsorter.c        | 30 ++++++++++++++++++++++++++++++
 gtk/gtkcolumnviewsorterprivate.h |  4 ++++
 4 files changed, 56 insertions(+)
---
diff --git a/gtk/gtkcolumnview.c b/gtk/gtkcolumnview.c
index 710355aea6..1668f11a2d 100644
--- a/gtk/gtkcolumnview.c
+++ b/gtk/gtkcolumnview.c
@@ -754,3 +754,20 @@ gtk_column_view_active_sorter_changed (GtkColumnView *self)
       g_object_unref (column);
     }
 }
+
+void
+gtk_column_view_sort_by_column (GtkColumnView       *self,
+                                GtkColumnViewColumn *column,
+                                GtkSortType          direction)
+{
+  g_return_if_fail (GTK_IS_COLUMN_VIEW (self));
+  g_return_if_fail (column == NULL || GTK_IS_COLUMN_VIEW_COLUMN (column));
+  g_return_if_fail (column == NULL || gtk_column_view_column_get_column_view (column) == self);
+
+  if (column == NULL)
+    gtk_column_view_sorter_reset (GTK_COLUMN_VIEW_SORTER (self->sorter));
+  else
+    gtk_column_view_sorter_set_column (GTK_COLUMN_VIEW_SORTER (self->sorter),
+                                       column,
+                                       direction == GTK_SORT_DESCENDING);
+}
diff --git a/gtk/gtkcolumnview.h b/gtk/gtkcolumnview.h
index 178c856b3b..d339260f41 100644
--- a/gtk/gtkcolumnview.h
+++ b/gtk/gtkcolumnview.h
@@ -80,6 +80,11 @@ void            gtk_column_view_set_sort_model                  (GtkColumnView
 GDK_AVAILABLE_IN_ALL
 GtkSorter *     gtk_column_view_get_sorter                      (GtkColumnView          *self);
 
+GDK_AVAILABLE_IN_ALL
+void            gtk_column_view_sort_by_column                  (GtkColumnView          *self,
+                                                                 GtkColumnViewColumn    *column,
+                                                                 GtkSortType             direction);
+
 G_END_DECLS
 
 #endif  /* __GTK_COLUMN_VIEW_H__ */
diff --git a/gtk/gtkcolumnviewsorter.c b/gtk/gtkcolumnviewsorter.c
index 18f1bfc073..78451aa431 100644
--- a/gtk/gtkcolumnviewsorter.c
+++ b/gtk/gtkcolumnviewsorter.c
@@ -195,6 +195,36 @@ gtk_column_view_sorter_remove_column (GtkColumnViewSorter *self,
   return FALSE;
 }
 
+gboolean
+gtk_column_view_sorter_set_column (GtkColumnViewSorter *self,
+                                   GtkColumnViewColumn *column,
+                                   gboolean             inverted)
+{
+  GtkSorter *sorter;
+  Sorter *s;
+
+  g_return_val_if_fail (GTK_IS_COLUMN_VIEW_SORTER (self), FALSE);
+  g_return_val_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (column), FALSE);
+  
+  sorter = gtk_column_view_column_get_sorter (column);
+  if (sorter == NULL)
+    return FALSE;
+
+  g_list_free_full (self->sorters, free_sorter);
+
+  s = g_new (Sorter, 1);
+  s->column = g_object_ref (column);
+  s->sorter = g_object_ref (sorter);
+  s->changed_id = g_signal_connect (sorter, "changed", G_CALLBACK (changed_cb), self);
+  s->inverted = inverted;
+ 
+  self->sorters = g_list_prepend (self->sorters, s);
+
+  gtk_sorter_changed (GTK_SORTER (self), GTK_SORTER_CHANGE_DIFFERENT);
+
+  return TRUE;
+}
+
 void
 gtk_column_view_sorter_reset (GtkColumnViewSorter *self)
 {
diff --git a/gtk/gtkcolumnviewsorterprivate.h b/gtk/gtkcolumnviewsorterprivate.h
index 08718323e9..9c465dd527 100644
--- a/gtk/gtkcolumnviewsorterprivate.h
+++ b/gtk/gtkcolumnviewsorterprivate.h
@@ -47,6 +47,10 @@ GtkColumnViewColumn *
            gtk_column_view_sorter_get_active    (GtkColumnViewSorter *self,
                                                  gboolean            *inverted);
 
+gboolean   gtk_column_view_sorter_set_column    (GtkColumnViewSorter *self,
+                                                 GtkColumnViewColumn *column,
+                                                 gboolean             inverted);
+
 
 G_END_DECLS
 


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