37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
#!/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)
|