PyObject_Del(self);
}
+PyObject *MotionData_screen(MotionData *self, PyObject *args)
+{
+ if(!PyArg_ParseTuple(args,":screen")) return NULL;
+ return PyLong_FromLong(self->screen);
+}
+
PyObject *MotionData_window(MotionData *self, PyObject *args)
{
if(!PyArg_ParseTuple(args,":window")) return NULL;
static PyMethodDef MotionData_methods[] = {
{"action", (PyCFunction)MotionData_action, METH_VARARGS,
"Return the action being executed."},
+ {"screen", (PyCFunction)MotionData_screen, METH_VARARGS,
+ "Return the number of the screen the event is on."},
{"window", (PyCFunction)MotionData_window, METH_VARARGS,
"Return the client window id."},
{"context", (PyCFunction)MotionData_context, METH_VARARGS,
"Return the action being executed."},
{"context", (PyCFunction)MotionData_context, METH_VARARGS,
"Return the context that the action is occuring in."},
+ {"screen", (PyCFunction)MotionData_screen, METH_VARARGS,
+ "Return the number of the screen the event is on."},
{"window", (PyCFunction)MotionData_window, METH_VARARGS,
"Return the client window id."},
{"modifiers", (PyCFunction)MotionData_modifiers, METH_VARARGS,
{NULL, NULL, 0, NULL}
};
+PyObject *EventData_action(EventData *self, PyObject *args)
+{
+ if(!PyArg_ParseTuple(args,":action")) return NULL;
+ return PyLong_FromLong((int)self->action);
+}
+
+PyObject *EventData_modifiers(EventData *self, PyObject *args)
+{
+ if(!PyArg_ParseTuple(args,":modifiers")) return NULL;
+ return PyLong_FromUnsignedLong(self->state);
+}
+
+static PyMethodDef EventData_methods[] = {
+ {"screen", (PyCFunction)MotionData_screen, METH_VARARGS,
+ "Return the number of the screen the event is on."},
+ {"window", (PyCFunction)MotionData_window, METH_VARARGS,
+ "Return the client window id."},
+ {"action", (PyCFunction)EventData_action, METH_VARARGS,
+ "Return the action being executed."},
+ {"modifiers", (PyCFunction)EventData_modifiers, METH_VARARGS,
+ "Return the modifier keys state."},
+ {NULL, NULL, 0, NULL}
+};
+
PyObject *KeyData_key(KeyData *self, PyObject *args)
{
if(!PyArg_ParseTuple(args,":key")) return NULL;
}
static PyMethodDef KeyData_methods[] = {
+ {"screen", (PyCFunction)MotionData_screen, METH_VARARGS,
+ "Return the number of the screen the event is on."},
{"window", (PyCFunction)MotionData_window, METH_VARARGS,
"Return the client window id."},
{"modifiers", (PyCFunction)MotionData_modifiers, METH_VARARGS,
return Py_FindMethod(ButtonData_methods, obj, name);
}
+static PyObject *EventDataGetAttr(PyObject *obj, char *name)
+{
+ return Py_FindMethod(EventData_methods, obj, name);
+}
+
static PyObject *KeyDataGetAttr(PyObject *obj, char *name)
{
return Py_FindMethod(KeyData_methods, obj, name);
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
+static PyTypeObject EventData_Type = {
+ PyObject_HEAD_INIT(NULL)
+ 0,
+ "EventData",
+ sizeof(EventData),
+ 0,
+ dealloc,
+ 0,
+ (getattrfunc)EventDataGetAttr,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+};
+
static PyTypeObject KeyData_Type = {
PyObject_HEAD_INIT(NULL)
0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
-MotionData *new_motion_data(Window window, Time time, unsigned int state,
- unsigned int button, MouseContext context,
- MouseAction action, int xroot, int yroot,
- const otk::Point &initpos, const otk::Rect &initarea)
+MotionData *new_motion_data(int screen, Window window, Time time,
+ unsigned int state, unsigned int button,
+ MouseContext context, MouseAction action,
+ int xroot, int yroot, const otk::Point &initpos,
+ const otk::Rect &initarea)
{
MotionData *data = PyObject_New(MotionData, &MotionData_Type);
+ data->screen = screen;
data->window = window;
data->time = time;
data->state = state;
return data;
}
-ButtonData *new_button_data(Window window, Time time, unsigned int state,
- unsigned int button, MouseContext context,
- MouseAction action)
+ButtonData *new_button_data(int screen, Window window, Time time,
+ unsigned int state, unsigned int button,
+ MouseContext context, MouseAction action)
{
ButtonData *data = PyObject_New(ButtonData, &ButtonData_Type);
+ data->screen = screen;
data->window = window;
data->time = time;
data->state = state;
return data;
}
-KeyData *new_key_data(Window window, Time time, unsigned int state,
- unsigned int key)
+EventData *new_event_data(int screen, Window window, EventAction action,
+ unsigned int state)
+{
+ EventData *data = PyObject_New(EventData, &EventData_Type);
+ data->screen = screen;
+ data->window = window;
+ data->action = action;
+ data->state = state;
+ return data;
+}
+
+KeyData *new_key_data(int screen, Window window, Time time, unsigned int state,
+ unsigned int key)
{
KeyData *data = PyObject_New(KeyData, &KeyData_Type);
+ data->screen = screen;
data->window = window;
data->time = time;
data->state = state;
PyRun_SimpleString("from _otk import *; from _openbox import *;");
PyRun_SimpleString("openbox = Openbox_instance()");
+ /* XXX
+ sys.path.append('stuff')
+ install the .py wrappers, and include their path with this, then import em
+ */
+
// set up access to the python global variables
PyObject *obmodule = PyImport_AddModule("__main__");
obdict = PyModule_GetDict(obmodule);
Py_DECREF(arglist);
}
+bool python_get_long(const char *name, long *value)
+{
+ PyObject *val = PyDict_GetItemString(obdict, const_cast<char*>(name));
+ if (!(val && PyLong_Check(val))) return false;
+
+ *value = PyLong_AsLong(val);
+ return true;
+}
+
bool python_get_string(const char *name, std::string *value)
{
PyObject *val = PyDict_GetItemString(obdict, const_cast<char*>(name));
// Stuff for calling from Python scripts //
// ************************************* //
-/*
-PyObject * python_register(int action, PyObject *func, bool infront = false)
+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->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.");
+
+ 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 *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)
+PyObject *ebind(ob::EventAction 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)) {
+ if (!ob::Openbox::instance->bindings()->addEvent(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)
+PyObject *kbind(PyObject *keylist, ob::KeyContext context, PyObject *func)
{
if (!PyCallable_Check(func)) {
PyErr_SetString(PyExc_TypeError, "Invalid callback function.");
Py_INCREF(Py_None); return Py_None;
}
-PyObject * kunbind(PyObject *keylist)
+PyObject *kunbind(PyObject *keylist, PyObject *func)
{
if (!PyList_Check(keylist)) {
PyErr_SetString(PyExc_TypeError, "Invalid keylist. Not a list.");
return NULL;
}
-
+ if (!PyCallable_Check(func)) {
+ PyErr_SetString(PyExc_TypeError, "Invalid callback function.");
+ return NULL;
+ }
+
ob::OBBindings::StringVect vectkeylist;
for (int i = 0, end = PyList_Size(keylist); i < end; ++i) {
PyObject *str = PyList_GetItem(keylist, i);
vectkeylist.push_back(PyString_AsString(str));
}
- ob::Openbox::instance->bindings()->removeKey(vectkeylist);
+ if (!ob::Openbox::instance->bindings()->removeKey(vectkeylist, func)) {
+ PyErr_SetString(PyExc_RuntimeError, "Could not remove callback.");
+ return NULL;
+ }
Py_INCREF(Py_None); return Py_None;
}