[pygobject] Register enums and flags in PyGI if needed



commit 86783c695f3641b9491962e8f95a4dcb91f4017c
Author: Tomeu Vizoso <tomeu sugarlabs org>
Date:   Tue Dec 29 13:08:29 2009 +0100

    Register enums and flags in PyGI if needed
    
    https://bugzilla.gnome.org/show_bug.cgi?id=603534

 gobject/pygenum.c  |   20 ++++++++++++++------
 gobject/pygflags.c |   19 +++++++++++++------
 2 files changed, 27 insertions(+), 12 deletions(-)
---
diff --git a/gobject/pygenum.c b/gobject/pygenum.c
index 76b35f2..027dbd4 100644
--- a/gobject/pygenum.c
+++ b/gobject/pygenum.c
@@ -28,6 +28,8 @@
 #include <pyglib.h>
 #include "pygobject-private.h"
 
+#include "pygi-external.h"
+
 GQuark pygenum_class_key;
 
 PYGLIB_DEFINE_TYPE("gobject.GEnum", PyGEnum_Type, PyGEnum);
@@ -150,13 +152,19 @@ pyg_enum_from_gtype (GType gtype, int value)
     PyObject *pyclass, *values, *retval, *intvalue;
 
     g_return_val_if_fail(gtype != G_TYPE_INVALID, NULL);
-    
+
+    /* Get a wrapper class by:
+     * 1. check for one attached to the gtype
+     * 2. lookup one in a typelib
+     * 3. creating a new one
+     */
     pyclass = (PyObject*)g_type_get_qdata(gtype, pygenum_class_key);
-    if (pyclass == NULL) {
-	pyclass = pyg_enum_add(NULL, g_type_name(gtype), NULL, gtype);
-	if (!pyclass)
-	    return _PyLong_FromLong(value);
-    }
+    if (!pyclass)
+        pyclass = pygi_type_import_by_g_type(gtype);
+    if (!pyclass)
+        pyclass = pyg_enum_add(NULL, g_type_name(gtype), NULL, gtype);
+    if (!pyclass)
+	return _PyLong_FromLong(value);
     
     values = PyDict_GetItemString(((PyTypeObject *)pyclass)->tp_dict,
 				  "__enum_values__");
diff --git a/gobject/pygflags.c b/gobject/pygflags.c
index 6dc419e..1865abb 100644
--- a/gobject/pygflags.c
+++ b/gobject/pygflags.c
@@ -29,6 +29,8 @@
 #include "pygobject-private.h"
 #include "pygflags.h"
 
+#include "pygi-external.h"
+
 GQuark pygflags_class_key;
 
 PYGLIB_DEFINE_TYPE("gobject.GFlags", PyGFlags_Type, PyGFlags);
@@ -170,13 +172,18 @@ pyg_flags_from_gtype (GType gtype, int value)
 
     g_return_val_if_fail(gtype != G_TYPE_INVALID, NULL);
     
+    /* Get a wrapper class by:
+     * 1. check for one attached to the gtype
+     * 2. lookup one in a typelib
+     * 3. creating a new one
+     */
     pyclass = (PyObject*)g_type_get_qdata(gtype, pygflags_class_key);
-    if (pyclass == NULL) {
-	pyclass = pyg_flags_add(NULL, g_type_name(gtype), NULL, gtype);
-	if (!pyclass)
-	    return _PyLong_FromLong(value);
-    }
-
+    if (!pyclass)
+        pyclass = pygi_type_import_by_g_type(gtype);
+    if (!pyclass)
+        pyclass = pyg_flags_add(NULL, g_type_name(gtype), NULL, gtype);
+    if (!pyclass)
+	return _PyLong_FromLong(value);
     
     values = PyDict_GetItemString(((PyTypeObject *)pyclass)->tp_dict,
 				  "__flags_values__");



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