diff options
Diffstat (limited to 'src/caja-python.c')
-rw-r--r-- | src/caja-python.c | 132 |
1 files changed, 11 insertions, 121 deletions
diff --git a/src/caja-python.c b/src/caja-python.c index 01b3bc6..3826c1e 100644 --- a/src/caja-python.c +++ b/src/caja-python.c @@ -23,7 +23,8 @@ #include <Python.h> #include <pygobject.h> -#include <pygtk/pygtk.h> +#include <gmodule.h> +#include <gtk/gtk.h> #include "caja-python.h" #include "caja-python-object.h" @@ -44,73 +45,16 @@ static GArray *all_types = NULL; static inline gboolean np_init_pygobject(void) { - PyObject *gobject = PyImport_ImportModule("gobject"); - if (gobject != NULL) - { - PyObject *mdict = PyModule_GetDict(gobject); - PyObject *cobject = PyDict_GetItemString(mdict, "_PyGObject_API"); - if (PyCObject_Check(cobject)) - { - _PyGObject_API = (struct _PyGObject_Functions *)PyCObject_AsVoidPtr(cobject); - } - else - { - PyErr_SetString(PyExc_RuntimeError, - "could not find _PyGObject_API object"); - PyErr_Print(); - return FALSE; - } - } - else - { - PyErr_Print(); - g_warning("could not import gobject"); - return FALSE; - } - return TRUE; -} + PyObject *gobject = pygobject_init (PYGOBJECT_MAJOR_VERSION, PYGOBJECT_MINOR_VERSION, PYGOBJECT_MICRO_VERSION); -static inline gboolean -np_init_pygtk(void) -{ - PyObject *pygtk = PyImport_ImportModule("gtk._gtk"); - if (pygtk != NULL) - { -#ifdef Py_CAPSULE_H - void *capsule = PyCapsule_Import("gtk._gtk._PyGtk_API", 0); - if (capsule) - { - _PyGtk_API = (struct _PyGtk_FunctionStruct*)capsule; - } -#endif - if (!_PyGtk_API) - { - PyObject *module_dict = PyModule_GetDict(pygtk); - PyObject *cobject = PyDict_GetItemString(module_dict, "_PyGtk_API"); - if (PyCObject_Check(cobject)) - { - _PyGtk_API = (struct _PyGtk_FunctionStruct*) - PyCObject_AsVoidPtr(cobject); - } - else - { - PyErr_SetString(PyExc_RuntimeError, - "could not find _PyGtk_API object"); - PyErr_Print(); - return FALSE; - } - } - } - else - { - PyErr_Print(); - g_warning("could not import gtk._gtk"); + if (gobject == NULL) { + PyErr_Print (); return FALSE; } + return TRUE; } - static void caja_python_load_file(GTypeModule *type_module, const gchar *filename) @@ -193,6 +137,7 @@ caja_python_load_dir (GTypeModule *module, { g_warning("caja_python_init_python failed"); g_dir_close(dir); + break; } /* sys.path.insert(0, dirname) */ @@ -209,8 +154,7 @@ caja_python_load_dir (GTypeModule *module, static gboolean caja_python_init_python (void) { - PyObject *pygtk, *mdict, *require; - PyObject *sys_path, *tmp, *caja, *gtk, *pygtk_version, *pygtk_required_version; + PyObject *caja; GModule *libpython; char *argv[] = { "caja", NULL }; @@ -246,23 +190,6 @@ caja_python_init_python (void) return FALSE; } - /* pygtk.require("2.0") */ - debug("pygtk.require(\"2.0\")"); - pygtk = PyImport_ImportModule("pygtk"); - if (!pygtk) - { - PyErr_Print(); - return FALSE; - } - mdict = PyModule_GetDict(pygtk); - require = PyDict_GetItemString(mdict, "require"); - PyObject_CallObject(require, Py_BuildValue("(S)", PyString_FromString("2.0"))); - if (PyErr_Occurred()) - { - PyErr_Print(); - return FALSE; - } - /* import gobject */ debug("init_pygobject"); if (!np_init_pygobject()) @@ -271,59 +198,21 @@ caja_python_init_python (void) return FALSE; } - /* import gtk */ - debug("init_pygtk"); - if (!np_init_pygtk()) - { - g_warning("pygtk initialization failed"); - return FALSE; - } - - /* gobject.threads_init() */ - debug("pyg_enable_threads"); - setenv("PYGTK_USE_GIL_STATE_API", "", 0); - pyg_enable_threads(); - - /* gtk.pygtk_version < (2, 4, 0) */ - gtk = PyImport_ImportModule("gtk"); - mdict = PyModule_GetDict(gtk); - pygtk_version = PyDict_GetItemString(mdict, "pygtk_version"); - pygtk_required_version = Py_BuildValue("(iii)", 2, 4, 0); - if (PyObject_Compare(pygtk_version, pygtk_required_version) == -1) - { - g_warning("PyGTK %s required, but %s found.", - PyString_AsString(PyObject_Repr(pygtk_required_version)), - PyString_AsString(PyObject_Repr(pygtk_version))); - Py_DECREF(pygtk_required_version); - return FALSE; - } - Py_DECREF(pygtk_required_version); - - /* sys.path.insert(., ...) */ - debug("sys.path.insert(0, ...)"); - sys_path = PySys_GetObject("path"); - PyList_Insert(sys_path, 0, - (tmp = PyString_FromString(CAJA_LIBDIR "/caja-python"))); - Py_DECREF(tmp); - /* import caja */ g_setenv("INSIDE_CAJA_PYTHON", "", FALSE); debug("import caja"); - caja = PyImport_ImportModule("caja"); + caja = PyImport_ImportModule("gi.repository.Caja"); if (!caja) { PyErr_Print(); return FALSE; } - /* Extract types and interfaces from caja */ - mdict = PyModule_GetDict(caja); - _PyGtkWidget_Type = pygobject_lookup_class(GTK_TYPE_WIDGET); g_assert(_PyGtkWidget_Type != NULL); #define IMPORT(x, y) \ - _PyCaja##x##_Type = (PyTypeObject *)PyDict_GetItemString(mdict, y); \ + _PyCaja##x##_Type = (PyTypeObject *)PyObject_GetAttrString(caja, y); \ if (_PyCaja##x##_Type == NULL) { \ PyErr_Print(); \ return FALSE; \ @@ -338,6 +227,7 @@ caja_python_init_python (void) IMPORT(MenuProvider, "MenuProvider"); IMPORT(PropertyPage, "PropertyPage"); IMPORT(PropertyPageProvider, "PropertyPageProvider"); + IMPORT(OperationHandle, "OperationHandle"); #undef IMPORT |