[gtk/wip/otte/listmodels: 1/18] stack: Add ::item-type and ::n-items to the pages list




commit f9e9f71282cfa987fa301ab3436e624660b0c210
Author: Benjamin Otte <otte redhat com>
Date:   Sat Jun 11 07:34:07 2022 +0200

    stack: Add ::item-type and ::n-items to the pages list

 gtk/gtkstack.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 50 insertions(+), 1 deletion(-)
---
diff --git a/gtk/gtkstack.c b/gtk/gtkstack.c
index c6a292f21b..90de7598b2 100644
--- a/gtk/gtkstack.c
+++ b/gtk/gtkstack.c
@@ -498,6 +498,16 @@ struct _GtkStackPagesClass
   GObjectClass parent_class;
 };
 
+enum {
+  PAGES_PROP_0,
+  PAGES_PROP_ITEM_TYPE,
+  PAGES_PROP_N_ITEMS,
+
+  PAGES_N_PROPS
+};
+
+static GParamSpec *pages_properties[PAGES_N_PROPS] = { NULL, };
+
 static GType
 gtk_stack_pages_get_item_type (GListModel *model)
 {
@@ -582,14 +592,53 @@ G_DEFINE_TYPE_WITH_CODE (GtkStackPages, gtk_stack_pages, G_TYPE_OBJECT,
                          G_IMPLEMENT_INTERFACE (G_TYPE_LIST_MODEL, gtk_stack_pages_list_model_init)
                          G_IMPLEMENT_INTERFACE (GTK_TYPE_SELECTION_MODEL, 
gtk_stack_pages_selection_model_init))
 
+static void
+gtk_stack_pages_get_property (GObject    *object,
+                              guint       prop_id,
+                              GValue     *value,
+                              GParamSpec *pspec)
+{
+  GtkStackPages *self = GTK_STACK_PAGES (object);
+
+  switch (prop_id)
+    {
+    case PAGES_PROP_ITEM_TYPE:
+      g_value_set_gtype (value, GTK_TYPE_STACK_PAGE);
+      break;
+
+    case PAGES_PROP_N_ITEMS:
+      g_value_set_uint (value, gtk_stack_pages_get_n_items (G_LIST_MODEL (self)));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
 static void
 gtk_stack_pages_init (GtkStackPages *pages)
 {
 }
 
 static void
-gtk_stack_pages_class_init (GtkStackPagesClass *class)
+gtk_stack_pages_class_init (GtkStackPagesClass *klass)
 {
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->get_property = gtk_stack_pages_get_property;
+
+  pages_properties[PAGES_PROP_ITEM_TYPE] =
+    g_param_spec_gtype ("item-type", NULL, NULL,
+                        GTK_TYPE_STACK_PAGE,
+                        G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
+  pages_properties[PAGES_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, PAGES_N_PROPS, pages_properties);
 }
 
 static GtkStackPages *


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