[pygobject] Support getting and setting GStrv properties
- From: Martin Pitt <martinpitt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pygobject] Support getting and setting GStrv properties
- Date: Sun, 6 May 2012 12:54:15 +0000 (UTC)
commit 9f50fd214e4214f83959b2883a0c667f7f157c97
Author: Martin Pitt <martinpitt gnome org>
Date: Sun May 6 05:50:00 2012 -0700
Support getting and setting GStrv properties
gi/pygi-property.c | 36 ++++++++++++++++++++++++++++++++++++
tests/test_gi.py | 11 +++++++++++
2 files changed, 47 insertions(+), 0 deletions(-)
---
diff --git a/gi/pygi-property.c b/gi/pygi-property.c
index f400820..06f7b02 100644
--- a/gi/pygi-property.c
+++ b/gi/pygi-property.c
@@ -213,6 +213,25 @@ pygi_get_property_value_real (PyGObject *instance,
case GI_TYPE_TAG_GLIST:
arg.v_pointer = g_value_get_pointer (&value);
break;
+ case GI_TYPE_TAG_ARRAY:
+ {
+ gchar** strings;
+ GArray *arg_items;
+ int i;
+
+ strings = g_value_get_boxed (&value);
+ if (strings == NULL)
+ arg.v_pointer = NULL;
+ else {
+ arg_items = g_array_sized_new (TRUE, TRUE, sizeof (GIArgument), g_strv_length (strings));
+ g_array_set_size (arg_items, g_strv_length (strings));
+ for (i = 0; strings[i] != NULL; ++i) {
+ g_array_index (arg_items, GIArgument, i).v_string = strings[i];
+ }
+ arg.v_pointer = arg_items;
+ }
+ break;
+ }
default:
PyErr_Format (PyExc_NotImplementedError,
"Retrieving properties of type %s is not implemented",
@@ -366,6 +385,23 @@ pygi_set_property_value_real (PyGObject *instance,
case GI_TYPE_TAG_GLIST:
g_value_set_pointer (&value, arg.v_pointer);
break;
+ case GI_TYPE_TAG_ARRAY:
+ {
+ GArray *arg_items = (GArray*) arg.v_pointer;
+ gchar** strings;
+ int i;
+
+ if (arg_items == NULL)
+ goto out;
+
+ strings = g_new0 (char*, arg_items->len);
+ for (i = 0; i < arg_items->len; ++i) {
+ strings[i] = g_array_index (arg_items, GIArgument, i).v_string;
+ }
+ g_array_free (arg_items, TRUE);
+ g_value_set_boxed (&value, strings);
+ break;
+ }
default:
PyErr_Format (PyExc_NotImplementedError,
"Setting properties of type %s is not implemented",
diff --git a/tests/test_gi.py b/tests/test_gi.py
index 26d57c8..90a002e 100644
--- a/tests/test_gi.py
+++ b/tests/test_gi.py
@@ -2043,3 +2043,14 @@ class TestPropertiesObject(unittest.TestCase):
self.assertEqual(self.obj.props.some_double, 0)
self.obj.props.some_double = GObject.G_MAXDOUBLE
self.assertEqual(self.obj.props.some_double, GObject.G_MAXDOUBLE)
+
+ def test_strv(self):
+ self.assertEqual(self.obj.props.some_strv, [])
+ self.obj.props.some_strv = ['hello', 'world']
+ self.assertEqual(self.obj.props.some_strv, ['hello', 'world'])
+
+ self.assertRaises(TypeError, setattr, self.obj.props, 'some_strv', [1, 2])
+ self.assertRaises(TypeError, setattr, self.obj.props, 'some_strv', ['foo', 1])
+
+ obj = GIMarshallingTests.PropertiesObject(some_strv=['hello', 'world'])
+ self.assertEqual(obj.props.some_strv, ['hello', 'world'])
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]