[pygobject/gsoc2009: 145/160] Lookup introspected type when creating boxed instances
- From: Simon van der Linden <svdlinden src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [pygobject/gsoc2009: 145/160] Lookup introspected type when creating boxed instances
- Date: Fri, 14 Aug 2009 21:35:55 +0000 (UTC)
commit 5858f3e1f05676f9502628973b7e89f8d42fc67f
Author: Simon van der Linden <svdlinden src gnome org>
Date: Wed Aug 12 17:03:00 2009 +0200
Lookup introspected type when creating boxed instances
Normally, introspected boxed types are registered. They might not have been
registered yet, though.
gobject/pygboxed.c | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
---
diff --git a/gobject/pygboxed.c b/gobject/pygboxed.c
index 71ec9e9..15cb368 100644
--- a/gobject/pygboxed.c
+++ b/gobject/pygboxed.c
@@ -178,6 +178,30 @@ pyg_boxed_new(GType boxed_type, gpointer boxed, gboolean copy_boxed,
}
tp = g_type_get_qdata(boxed_type, pygboxed_type_key);
+
+#if HAVE_PYGI_H
+ if (tp == NULL) {
+ GIRepository *repository;
+ GIBaseInfo *info;
+
+ repository = g_irepository_get_default();
+
+ info = g_irepository_find_by_gtype(repository, boxed_type);
+
+ if (info != NULL) {
+ pygi_import();
+ tp = (PyTypeObject *)pygi_type_find_by_gi_info(info);
+ g_base_info_unref(info);
+ if (tp == NULL) {
+ PyErr_Clear();
+ } else {
+ /* Note: The type is registered, so at least a reference remains. */
+ Py_DECREF((PyObject *)tp);
+ }
+ }
+ }
+#endif
+
if (!tp)
tp = (PyTypeObject *)&PyGBoxed_Type; /* fallback */
self = PyObject_NEW(PyGBoxed, tp);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]