diff options
author | Philip Chimento <philip.chimento@gmail.com> | 2018-08-19 00:27:21 -0400 |
---|---|---|
committer | Philip Chimento <philip.chimento@gmail.com> | 2018-11-07 22:43:06 -0500 |
commit | b5b25328b75ad97836f585f708b60d8fc6bca902 (patch) | |
tree | 4554f2f6f6c55cf1e366eec832af2f644a2d32c8 /tests/scanner/regress.c | |
parent | 581f74be8e4919ac7dd4bec036eeda7605f425d7 (diff) | |
download | gobject-introspection-b5b25328b75ad97836f585f708b60d8fc6bca902.tar.gz |
regress: Implement interface and override properties
This adds a property to RegressTestInterface which can be overridden, and
makes RegressTestSubObj implement it and override the property. This is
in order to catch the regressions in GJS around property access.
See gjs#193.
Diffstat (limited to 'tests/scanner/regress.c')
-rw-r--r-- | tests/scanner/regress.c | 80 |
1 files changed, 79 insertions, 1 deletions
diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c index f998a498..6f1c4c3b 100644 --- a/tests/scanner/regress.c +++ b/tests/scanner/regress.c @@ -3228,12 +3228,82 @@ struct _CallbackInfo gpointer user_data; }; +static void +regress_test_sub_obj_iface_init (RegressTestInterfaceIface *iface) +{ +} + +enum { + PROP_TEST_SUB_OBJ_NUMBER = 1, + PROP_TEST_SUB_OBJ_BOOLEAN, +}; + +G_DEFINE_TYPE_WITH_CODE(RegressTestSubObj, regress_test_sub_obj, + REGRESS_TEST_TYPE_OBJ, + G_IMPLEMENT_INTERFACE(REGRESS_TEST_TYPE_INTERFACE, + regress_test_sub_obj_iface_init)); + + +static void +regress_test_sub_obj_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + RegressTestSubObj *self = REGRESS_TEST_SUB_OBJECT (object); -G_DEFINE_TYPE(RegressTestSubObj, regress_test_sub_obj, REGRESS_TEST_TYPE_OBJ); + switch (property_id) + { + case PROP_TEST_SUB_OBJ_NUMBER: + self->number = g_value_get_int (value); + break; + + case PROP_TEST_SUB_OBJ_BOOLEAN: + self->boolean = g_value_get_boolean (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +regress_test_sub_obj_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + RegressTestSubObj *self = REGRESS_TEST_SUB_OBJECT (object); + + switch (property_id) + { + case PROP_TEST_SUB_OBJ_NUMBER: + g_value_set_int (value, self->number); + break; + + case PROP_TEST_SUB_OBJ_BOOLEAN: + g_value_set_boolean (value, self->boolean); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} static void regress_test_sub_obj_class_init (RegressTestSubObjClass *klass) { + const guint flags = G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS; + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + gobject_class->get_property = regress_test_sub_obj_get_property; + gobject_class->set_property = regress_test_sub_obj_set_property; + + g_object_class_install_property (gobject_class, PROP_TEST_SUB_OBJ_BOOLEAN, + g_param_spec_boolean ("boolean", "Boolean", "Boolean", + TRUE, flags)); + + g_object_class_override_property (gobject_class, PROP_TEST_SUB_OBJ_NUMBER, + "number"); } static void @@ -3970,6 +4040,7 @@ G_DEFINE_INTERFACE (RegressTestInterface, regress_test_interface, G_TYPE_OBJECT) static void regress_test_interface_default_init(RegressTestInterfaceIface *iface) { + const guint flags = G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS; static gboolean initialized = FALSE; if (initialized) return; @@ -3984,6 +4055,13 @@ regress_test_interface_default_init(RegressTestInterfaceIface *iface) G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_POINTER); + /** + * RegressTestInterface:number: + */ + g_object_interface_install_property (iface, + g_param_spec_int ("number", "Number", "Number", + 0, 10, 0, flags)); + initialized = TRUE; } |