#!/usr/bin/env python import gi import ctypes from ctypes import * libgobject = CDLL('libgobject-2.0.so.0') class _PyGObject_Functions(ctypes.Structure): _fields_ = [ ('register_class', ctypes.PYFUNCTYPE(ctypes.c_void_p, ctypes.c_char_p, ctypes.c_int, ctypes.py_object, ctypes.py_object)), ('register_wrapper', ctypes.PYFUNCTYPE(ctypes.c_void_p, ctypes.py_object)), ('lookup_class', ctypes.PYFUNCTYPE(ctypes.py_object, ctypes.c_int)), ('newgobj', ctypes.PYFUNCTYPE(ctypes.py_object, ctypes.c_void_p)), ] class PyGObjectCPAI(object): def __init__(self): PyCObject_AsVoidPtr = ctypes.pythonapi.PyCObject_AsVoidPtr PyCObject_AsVoidPtr.restype = ctypes.c_void_p PyCObject_AsVoidPtr.argtypes = [ctypes.py_object] addr = PyCObject_AsVoidPtr(ctypes.py_object( gi._gobject._PyGObject_API)) self._api = _PyGObject_Functions.from_address(addr) def pygobject_new(self, addr): return self._api.newgobj(addr) def get_widget(ptr): return PyGObjectCPAI().pygobject_new(ptr)