merge the C branch into HEAD
[mikachu/openbox.git] / openbox / python.c
1 #include <Python.h>
2 #include <glib.h>
3
4 static PyMethodDef ObMethods[] = {
5     { NULL, NULL, 0, NULL }
6 };
7
8 static PyMethodDef InputMethods[] = {
9     { NULL, NULL, 0, NULL }
10 };
11
12 void python_startup()
13 {
14     PyObject *sys, *sysdict, *syspath, *path1, *path2;
15     char *homescriptdir;
16
17     Py_Initialize();
18
19     /* fix up the system path */
20
21     sys = PyImport_ImportModule("sys"); /* new */
22     sysdict = PyModule_GetDict(sys); /* borrowed */
23     syspath = PyDict_GetItemString(sysdict, "path"); /* borrowed */
24
25     path1 = PyString_FromString(SCRIPTDIR); /* new */
26     PyList_Insert(syspath, 0, path1);
27     Py_DECREF(path1);
28
29     homescriptdir = g_build_filename(g_get_home_dir(), ".openbox", NULL);
30     path2 = PyString_FromString(homescriptdir); /* new */
31     PyList_Insert(syspath, 0, path2);
32     Py_DECREF(path2);
33     g_free(homescriptdir);
34
35     Py_DECREF(sys);
36
37     /* create the 'ob' module */
38     Py_InitModule("ob", ObMethods);
39
40     /* create the 'input' module */
41     Py_InitModule("input", InputMethods);
42 }
43
44 void python_shutdown()
45 {
46     Py_Finalize();
47 }
48
49 gboolean python_import(char *module)
50 {
51     PyObject *mod;
52
53     mod = PyImport_ImportModule(module); /* new */
54     if (mod == NULL) {
55         PyErr_Print();
56         return FALSE;
57     }
58     Py_DECREF(mod);
59     return TRUE;
60 }