diff options
Diffstat (limited to 'gtk/gtkcolumnview.c')
-rw-r--r-- | gtk/gtkcolumnview.c | 84 |
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); +} |