From: Benjamin Otte Date: Sat, 11 Jun 2022 03:15:05 +0000 (+0200) Subject: multisorter: Add ::item-type and ::n-items X-Git-Tag: archive/raspbian/4.8.3+ds-2+rpi1~3^2~20^2~4^2~131^2~9 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=7a36632afcf31abff390b4c3cce8d9c63af45867;p=gtk4.git multisorter: Add ::item-type and ::n-items --- diff --git a/gtk/gtkmultisorter.c b/gtk/gtkmultisorter.c index 90d6bb033d..38a18819bf 100644 --- a/gtk/gtkmultisorter.c +++ b/gtk/gtkmultisorter.c @@ -66,6 +66,16 @@ struct _GtkMultiSortKeys GtkMultiSortKey keys[]; }; +enum { + PROP_0, + PROP_ITEM_TYPE, + PROP_N_ITEMS, + + N_PROPS +}; + +static GParamSpec *properties[N_PROPS] = { NULL, }; + static void gtk_multi_sort_keys_free (GtkSortKeys *keys) { @@ -327,6 +337,30 @@ gtk_multi_sorter_changed_cb (GtkSorter *sorter, gtk_multi_sort_keys_new (self)); } +static void +gtk_multi_sorter_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GtkMultiSorter *self = GTK_MULTI_SORTER (object); + + switch (prop_id) + { + case PROP_ITEM_TYPE: + g_value_set_gtype (value, GTK_TYPE_SORTER); + break; + + case PROP_N_ITEMS: + g_value_set_uint (value, gtk_sorters_get_size (&self->sorters)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + static void gtk_multi_sorter_dispose (GObject *object) { @@ -352,7 +386,34 @@ gtk_multi_sorter_class_init (GtkMultiSorterClass *class) sorter_class->compare = gtk_multi_sorter_compare; sorter_class->get_order = gtk_multi_sorter_get_order; + object_class->get_property = gtk_multi_sorter_get_property; object_class->dispose = gtk_multi_sorter_dispose; + + /** + * GtkMultiSorter:item-type: + * + * The type of items. See [method@Gio.ListModel.get_item_type]. + * + * Since: 4.8 + **/ + properties[PROP_ITEM_TYPE] = + g_param_spec_gtype ("item-type", NULL, NULL, + GTK_TYPE_SORTER, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + /** + * GtkMultiSorter:n-items: + * + * The number of items. See [method@Gio.ListModel.get_n_items]. + * + * Since: 4.8 + **/ + properties[PROP_N_ITEMS] = + g_param_spec_uint ("n-items", NULL, NULL, + 0, G_MAXUINT, 0, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties (object_class, N_PROPS, properties); } static void @@ -403,6 +464,7 @@ gtk_multi_sorter_append (GtkMultiSorter *self, g_signal_connect (sorter, "changed", G_CALLBACK (gtk_multi_sorter_changed_cb), self); gtk_sorters_append (&self->sorters, sorter); g_list_model_items_changed (G_LIST_MODEL (self), gtk_sorters_get_size (&self->sorters) - 1, 0, 1); + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_N_ITEMS]); gtk_sorter_changed_with_keys (GTK_SORTER (self), GTK_SORTER_CHANGE_MORE_STRICT, @@ -436,6 +498,7 @@ gtk_multi_sorter_remove (GtkMultiSorter *self, g_signal_handlers_disconnect_by_func (sorter, gtk_multi_sorter_changed_cb, self); gtk_sorters_splice (&self->sorters, position, 1, FALSE, NULL, 0); g_list_model_items_changed (G_LIST_MODEL (self), position, 1, 0); + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_N_ITEMS]); gtk_sorter_changed_with_keys (GTK_SORTER (self), GTK_SORTER_CHANGE_LESS_STRICT,