summaryrefslogtreecommitdiff
path: root/_dbus_bindings/module.c
diff options
context:
space:
mode:
authorSimon McVittie <smcv@celebrin.pseudorandom.co.uk>2006-11-22 17:28:56 +0000
committerSimon McVittie <smcv@celebrin.pseudorandom.co.uk>2006-11-22 17:28:56 +0000
commitf2c08d18ac2645311e4c0d94da0b06b3754a6def (patch)
tree553309eebddf7c22d7a1704d055cbf326804a6b9 /_dbus_bindings/module.c
parentaad4ee9dfbe203e74bffb0ec93bdd180143e4cee (diff)
downloaddbus-python-f2c08d18ac2645311e4c0d94da0b06b3754a6def.tar.gz
Add improved main-loop integration.
Currently only GLib (with the default main context) and a "null main loop" are supported, but a pure-Python main loop could be supported without incompatible API changes.
Diffstat (limited to '_dbus_bindings/module.c')
-rw-r--r--_dbus_bindings/module.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/_dbus_bindings/module.c b/_dbus_bindings/module.c
index 20d6dbf..c66af7d 100644
--- a/_dbus_bindings/module.c
+++ b/_dbus_bindings/module.c
@@ -45,6 +45,7 @@ PyDoc_STRVAR(module_doc,
#include "pending-call-impl.h" /* PendingCall */
#include "conn-impl.h" /* Connection */
#include "bus-impl.h" /* Bus */
+#include "mainloop-impl.h" /* NativeMainLoop */
static PyMethodDef module_functions[] = {
#define ENTRY(name,flags) {#name, (PyCFunction)name, flags, name##__doc__}
@@ -62,7 +63,13 @@ static PyMethodDef module_functions[] = {
PyMODINIT_FUNC
init_dbus_bindings(void)
{
- PyObject *this_module;
+ PyObject *this_module, *c_api;
+ static const int API_count = DBUS_BINDINGS_API_COUNT;
+ static void *dbus_bindings_API[DBUS_BINDINGS_API_COUNT];
+
+ dbus_bindings_API[0] = (void *)&API_count;
+ dbus_bindings_API[1] = (void *)Connection_BorrowDBusConnection;
+ dbus_bindings_API[2] = (void *)NativeMainLoop_New4;
if (!init_generic()) return;
if (!init_exception_types()) return;
@@ -76,6 +83,7 @@ init_dbus_bindings(void)
if (!init_pending_call()) return;
if (!init_conn_types()) return;
if (!init_bus_types()) return;
+ if (!init_mainloop()) return;
this_module = Py_InitModule3("_dbus_bindings", module_functions, module_doc);
if (!this_module) return;
@@ -91,6 +99,7 @@ init_dbus_bindings(void)
if (!insert_pending_call(this_module)) return;
if (!insert_conn_types(this_module)) return;
if (!insert_bus_types(this_module)) return;
+ if (!insert_mainloop_types(this_module)) return;
#define ADD_CONST_VAL(x, v) \
if (PyModule_AddIntConstant(this_module, x, v) < 0) return;
@@ -151,8 +160,19 @@ init_dbus_bindings(void)
ADD_CONST_PREFIXED(HANDLER_RESULT_NOT_YET_HANDLED)
ADD_CONST_PREFIXED(HANDLER_RESULT_NEED_MEMORY)
+ ADD_CONST_PREFIXED(WATCH_READABLE)
+ ADD_CONST_PREFIXED(WATCH_WRITABLE)
+ ADD_CONST_PREFIXED(WATCH_HANGUP)
+ ADD_CONST_PREFIXED(WATCH_ERROR)
+
if (PyModule_AddStringConstant(this_module, "__docformat__",
"restructuredtext") < 0) return;
+
+ c_api = PyCObject_FromVoidPtr ((void *)dbus_bindings_API, NULL);
+ if (!c_api) {
+ return;
+ }
+ PyModule_AddObject(this_module, "_C_API", c_api);
}
/* vim:set ft=c cino< sw=4 sts=4 et: */