From b2eb9ee33eb429c1f29bcf4550361a7b0e15b905 Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Sun, 4 Jan 2009 19:46:15 +0100 Subject: [PATCH] python: Add wmfs_uicb python function --- python/libwmfs.c | 27 +++++++++++++++++++++++++++ python/libwmfs.h | 1 + src/event.c | 11 ++++++----- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/python/libwmfs.c b/python/libwmfs.c index e978a34..1d7163a 100644 --- a/python/libwmfs.c +++ b/python/libwmfs.c @@ -36,6 +36,7 @@ static PyMethodDef WmfsMethods[] = { {"init", wmfs_init, METH_VARARGS, "Init wmfs module"}, + {"uicb", wmfs_uicb, METH_VARARGS, "Exec an uicb function"}, {"statustext", wmfs_statustext, METH_VARARGS, "Wrote in the statustext"}, {"tag_set", wmfs_tag_set, METH_VARARGS, "Set a tag"}, {"screen_set", wmfs_screen_set, METH_VARARGS, "Set the selected screen"}, @@ -104,6 +105,32 @@ wmfs_init(PyObject *self, PyObject *args) return Py_None; } +PyObject* +wmfs_uicb(PyObject *self, PyObject *args) +{ + long data[5]; + char *func; + char *cmd; + + if(!PyArg_ParseTuple(args, "ss", &func, &cmd)) + return NULL; + + data[4] = True; + + XChangeProperty(dpy, ROOT, ATOM("_WMFS_FUNCTION"), ATOM("UTF8_STRING"), + 8, PropModeReplace, (unsigned char*)func, strlen(func)); + + XChangeProperty(dpy, ROOT, ATOM("_WMFS_CMD"), ATOM("UTF8_STRING"), + 8, PropModeReplace, (unsigned char*)cmd, strlen(cmd)); + + send_client_message("_WMFS_FUNCTION", data); + send_client_message("_WMFS_CMD", data); + + Py_INCREF(Py_None); + + return Py_None; +} + PyObject* wmfs_statustext(PyObject *self, PyObject *args) diff --git a/python/libwmfs.h b/python/libwmfs.h index 8b4e644..c6c9411 100644 --- a/python/libwmfs.h +++ b/python/libwmfs.h @@ -53,6 +53,7 @@ PyObject* wmfs_tag_set(PyObject *self, PyObject *args); /* libwmfs.c */ PyObject* wmfs_init(PyObject *self, PyObject *args); +PyObject* wmfs_uicb(PyObject *self, PyObject *args); PyObject* wmfs_statustext(PyObject *self, PyObject *args); PyObject* wmfs_spawn(PyObject *self, PyObject *args); diff --git a/src/event.c b/src/event.c index 02ed2ae..c809466 100644 --- a/src/event.c +++ b/src/event.c @@ -174,7 +174,7 @@ clientmessageevent(XClientMessageEvent *ev) { uchar *ret_func = NULL; uchar *ret_cmd = NULL; - char *cmd; + char *cmd = NULL; if(XGetWindowProperty(dpy, ROOT, net_atom[wmfs_function], 0, 4096, False, net_atom[utf8_string], &rt, &rf, &ir, &il, &ret_func) == Success) @@ -183,15 +183,16 @@ clientmessageevent(XClientMessageEvent *ev) if(XGetWindowProperty(dpy, ROOT, net_atom[wmfs_cmd], 0, 4096, False, net_atom[utf8_string], &rt, &rf, &ir, &il, &ret_cmd) == Success) printf("%s\n", ret_cmd); - +/* if(strcmp((char*)ret_cmd, "NULL") == 0) cmd = NULL; - else - strcpy(cmd, (char*)ret_cmd); + else + if(ret_cmd != NULL) + strcpy(cmd, (char*)ret_cmd)*/ void (*func)(uicb_t) = name_to_func((char*)ret_func, func_list); - func(cmd); + func((uicb_t)ret_cmd); if(ret_cmd) XFree(ret_cmd);