summaryrefslogtreecommitdiff
path: root/gtk/gtkcolumnview.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkcolumnview.c')
-rw-r--r--gtk/gtkcolumnview.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/gtk/gtkcolumnview.c b/gtk/gtkcolumnview.c
index 86671f1ae8..e0dc6cd6d4 100644
--- a/gtk/gtkcolumnview.c
+++ b/gtk/gtkcolumnview.c
@@ -40,6 +40,7 @@
#include "gtkeventcontrollermotion.h"
#include "gtkdragsource.h"
#include "gtkeventcontrollerkey.h"
+#include "gtklistbaseprivate.h"
/**
* SECTION:gtkcolumnview
@@ -104,6 +105,7 @@ enum
PROP_VSCROLL_POLICY,
PROP_SINGLE_CLICK_ACTIVATE,
PROP_ENABLE_RUBBERBAND,
+ PROP_SEARCH_FILTER,
N_PROPS
};
@@ -399,6 +401,10 @@ gtk_column_view_get_property (GObject *object,
g_value_set_boolean (value, gtk_column_view_get_enable_rubberband (self));
break;
+ case PROP_SEARCH_FILTER:
+ g_value_set_object (value, gtk_column_view_get_search_filter (self));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -474,6 +480,10 @@ gtk_column_view_set_property (GObject *object,
gtk_column_view_set_enable_rubberband (self, g_value_get_boolean (value));
break;
+ case PROP_SEARCH_FILTER:
+ gtk_column_view_set_search_filter (self, g_value_get_object (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -582,6 +592,18 @@ gtk_column_view_class_init (GtkColumnViewClass *klass)
FALSE,
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+ /**
+ * GtkColumnView:search-filter:
+ *
+ * Filter used for search
+ */
+ properties[PROP_SEARCH_FILTER] =
+ g_param_spec_object ("search-filter",
+ P_("Search filter"),
+ P_("Filter used for searching"),
+ GTK_TYPE_FILTER,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
g_object_class_install_properties (gobject_class, N_PROPS, properties);
/**
@@ -1400,3 +1422,65 @@ gtk_column_view_get_enable_rubberband (GtkColumnView *self)
return gtk_list_view_get_enable_rubberband (self->listview);
}
+
+/**
+ * gtk_column_view_set_search_filter:
+ * @self: a #GtkColumnView
+ * @filter: (nullable): the filter to use for search, or %NULL
+ *
+ * Sets a search filter.
+ *
+ * The selection will be moved to first item matching the
+ * filter whenever the filter changes.
+ *
+ * This can be used with single selection and a string
+ * filter that is connected to a search entry.
+ */
+void
+gtk_column_view_set_search_filter (GtkColumnView *self,
+ GtkFilter *filter)
+{
+ g_return_if_fail (GTK_IS_COLUMN_VIEW (self));
+ g_return_if_fail (filter == NULL || GTK_IS_FILTER (filter));
+
+ if (filter == gtk_list_view_get_search_filter (GTK_LIST_VIEW (self->listview)))
+ return;
+
+ gtk_list_view_set_search_filter (GTK_LIST_VIEW (self->listview), filter);
+
+ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SEARCH_FILTER]);
+}
+
+/**
+ * gtk_column_view_get_search_filter:
+ * @self: a #GtkColumnView
+ *
+ * Gets the search filter that was set with
+ * gtk_column_view_set_search_filter().
+ *
+ * Returns: (transfer none): The search filter of @self
+ */
+GtkFilter *
+gtk_column_view_get_search_filter (GtkColumnView *self)
+{
+ g_return_val_if_fail (GTK_IS_COLUMN_VIEW (self), NULL);
+
+ return gtk_list_view_get_search_filter (GTK_LIST_VIEW (self->listview));
+}
+
+/**
+ * gtk_column_view_select_next_match:
+ * @self: a #GtkColumnView
+ * @forward: whether to move forward or back
+ *
+ * Moves the selection to the next item matching the
+ * search filter set with gtk_column_view_set_search_filter().
+ */
+void
+gtk_column_view_select_next_match (GtkColumnView *self,
+ gboolean forward)
+{
+ g_return_if_fail (GTK_IS_COLUMN_VIEW (self));
+
+ gtk_list_view_select_next_match (GTK_LIST_VIEW (self->listview), forward);
+}