+// ************************************* //
+// Stuff for calling from Python scripts //
+// ************************************* //
+
+/*
+PyObject * python_register(int action, PyObject *func, bool infront = false)
+{
+ if (!PyCallable_Check(func)) {
+ PyErr_SetString(PyExc_TypeError, "Invalid callback function.");
+ return NULL;
+ }
+
+ if (!ob::Openbox::instance->actions()->registerCallback(
+ (ob::OBActions::ActionType)action, func, infront)) {
+ PyErr_SetString(PyExc_RuntimeError, "Unable to register action callback.");
+ return NULL;
+ }
+ Py_INCREF(Py_None); return Py_None;
+}
+
+PyObject *unregister(int action, PyObject *func)
+{
+ if (!PyCallable_Check(func)) {
+ PyErr_SetString(PyExc_TypeError, "Invalid callback function.");
+ return NULL;
+ }
+
+ if (!ob::Openbox::instance->actions()->unregisterCallback(
+ (ob::OBActions::ActionType)action, func)) {
+ PyErr_SetString(PyExc_RuntimeError, "Unable to unregister action callback.");
+ return NULL;
+ }
+ Py_INCREF(Py_None); return Py_None;
+}
+
+PyObject *unregister_all(int action)
+{
+ if (!ob::Openbox::instance->actions()->unregisterAllCallbacks(
+ (ob::OBActions::ActionType)action)) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "Unable to unregister action callbacks.");
+ return NULL;
+ }
+ Py_INCREF(Py_None); return Py_None;
+}
+*/
+PyObject * mbind(const std::string &button, ob::MouseContext context,
+ ob::MouseAction action, PyObject *func)
+{
+ if (!PyCallable_Check(func)) {
+ PyErr_SetString(PyExc_TypeError, "Invalid callback function.");
+ return NULL;
+ }
+
+ if (!ob::Openbox::instance->bindings()->addButton(button, context,
+ action, func)) {
+ PyErr_SetString(PyExc_RuntimeError,"Unable to add binding.");
+ return NULL;
+ }
+ Py_INCREF(Py_None); return Py_None;
+}
+
+PyObject * kbind(PyObject *keylist, ob::KeyContext context, PyObject *func)
+{
+ if (!PyCallable_Check(func)) {
+ PyErr_SetString(PyExc_TypeError, "Invalid callback function.");
+ return NULL;
+ }
+ if (!PyList_Check(keylist)) {
+ PyErr_SetString(PyExc_TypeError, "Invalid keylist. Not a list.");
+ return NULL;
+ }
+
+ ob::OBBindings::StringVect vectkeylist;
+ for (int i = 0, end = PyList_Size(keylist); i < end; ++i) {
+ PyObject *str = PyList_GetItem(keylist, i);
+ if (!PyString_Check(str)) {
+ PyErr_SetString(PyExc_TypeError,
+ "Invalid keylist. It must contain only strings.");
+ return NULL;
+ }
+ vectkeylist.push_back(PyString_AsString(str));
+ }
+
+ if (!ob::Openbox::instance->bindings()->addKey(vectkeylist, func)) {
+ PyErr_SetString(PyExc_RuntimeError,"Unable to add binding.");
+ return NULL;
+ }
+ Py_INCREF(Py_None); return Py_None;
+}
+
+PyObject * kunbind(PyObject *keylist)
+{
+ if (!PyList_Check(keylist)) {
+ PyErr_SetString(PyExc_TypeError, "Invalid keylist. Not a list.");
+ return NULL;
+ }
+
+ ob::OBBindings::StringVect vectkeylist;
+ for (int i = 0, end = PyList_Size(keylist); i < end; ++i) {
+ PyObject *str = PyList_GetItem(keylist, i);
+ if (!PyString_Check(str)) {
+ PyErr_SetString(PyExc_TypeError,
+ "Invalid keylist. It must contain only strings.");
+ return NULL;
+ }
+ vectkeylist.push_back(PyString_AsString(str));
+ }
+
+ ob::Openbox::instance->bindings()->removeKey(vectkeylist);
+ Py_INCREF(Py_None); return Py_None;
+}
+
+void kunbind_all()
+{
+ ob::Openbox::instance->bindings()->removeAllKeys();
+}
+
+void set_reset_key(const std::string &key)
+{
+ ob::Openbox::instance->bindings()->setResetKey(key);
+}
+