1#include "prop-holder.h"
2
3enum {
4 PROP_OBJECT = 1,
5 PROP_PSPEC,
6 PROP_NAME,
7 NUM_PROPERTIES
8};
9
10static GParamSpec *properties[NUM_PROPERTIES];
11
12struct _PropHolder {
13 GObject instance;
14
15 GObject *object;
16 GParamSpec *pspec;
17};
18
19G_DEFINE_TYPE (PropHolder, prop_holder, G_TYPE_OBJECT)
20
21static void
22prop_holder_init (PropHolder *holder)
23{
24}
25
26static void
27prop_holder_set_property (GObject *object,
28 guint prop_id,
29 const GValue *value,
30 GParamSpec *pspec)
31{
32 PropHolder *holder = PROP_HOLDER (ptr: object);
33
34 switch (prop_id)
35 {
36 case PROP_OBJECT:
37 holder->object = g_value_dup_object (value);
38 break;
39
40 case PROP_PSPEC:
41 holder->pspec = g_value_get_param (value);
42 break;
43
44 default:
45 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
46 break;
47 }
48}
49
50static void
51prop_holder_get_property (GObject *object,
52 guint prop_id,
53 GValue *value,
54 GParamSpec *pspec)
55{
56 PropHolder *holder = PROP_HOLDER (ptr: object);
57
58 switch (prop_id)
59 {
60 case PROP_OBJECT:
61 g_value_set_object (value, v_object: holder->object);
62 break;
63
64 case PROP_PSPEC:
65 g_value_set_param (value, param: holder->pspec);
66 break;
67
68 case PROP_NAME:
69 g_value_set_string (value, v_string: holder->pspec->name);
70 break;
71
72 default:
73 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
74 break;
75 }
76}
77
78static void
79prop_holder_finalize (GObject *object)
80{
81 PropHolder *holder = PROP_HOLDER (ptr: object);
82
83 g_object_unref (object: holder->object);
84
85 G_OBJECT_CLASS (prop_holder_parent_class)->finalize (object);
86}
87
88static void
89prop_holder_class_init (PropHolderClass *class)
90{
91 GObjectClass *object_class = G_OBJECT_CLASS (class);
92
93 object_class->finalize = prop_holder_finalize;
94 object_class->set_property = prop_holder_set_property;
95 object_class->get_property = prop_holder_get_property;
96
97 properties[PROP_OBJECT] =
98 g_param_spec_object (name: "object", nick: "object", blurb: "object",
99 G_TYPE_OBJECT,
100 flags: G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
101
102 properties[PROP_PSPEC] =
103 g_param_spec_param (name: "pspec", nick: "pspec", blurb: "pspec",
104 G_TYPE_PARAM,
105 flags: G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
106
107 properties[PROP_NAME] =
108 g_param_spec_string (name: "name", nick: "name", blurb: "name",
109 NULL,
110 flags: G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
111
112 g_object_class_install_properties (oclass: object_class, n_pspecs: NUM_PROPERTIES, pspecs: properties);
113}
114
115PropHolder *
116prop_holder_new (GObject *object,
117 GParamSpec *pspec)
118{
119 PropHolder *holder;
120
121 holder = g_object_new (PROP_TYPE_HOLDER,
122 first_property_name: "object", object,
123 "pspec", pspec,
124 NULL);
125
126 return holder;
127}
128
129GObject *
130prop_holder_get_object (PropHolder *holder)
131{
132 return holder->object;
133}
134
135GParamSpec *
136prop_holder_get_pspec (PropHolder *holder)
137{
138 return holder->pspec;
139}
140
141const char *
142prop_holder_get_name (PropHolder *holder)
143{
144 return holder->pspec->name;
145}
146

source code of gtk/gtk/inspector/prop-holder.c