Change the API of the keygrabber so only one gdk_sync is neccessary. (ticket #7999)

This commit is contained in:
Benjamin Berg
2008-08-24 14:31:46 +02:00
parent a73cbc351d
commit 3d3e453157
4 changed files with 73 additions and 21 deletions
+45
View File
@@ -33,3 +33,48 @@ ignore-glob
*_get_type
_*
%%
override sugar_key_grabber_grab_keys kwargs
static PyObject *
_wrap_sugar_key_grabber_grab_keys(PyGObject *self, PyObject *args, PyObject *kwargs)
{
static char *kwlist[] = { "key", NULL };
PyObject *py_keys;
char **keys;
int i, len;
if (!PyArg_ParseTupleAndKeywords(args,kwargs,
"O:SugarKeyGrabber.grab_keys",
kwlist, &py_keys))
return NULL;
if (!PySequence_Check(py_keys) || (len = PySequence_Size(py_keys)) < 0) {
PyErr_SetString(PyExc_ValueError,
"keys should be a sequence of strings");
return NULL;
}
keys = g_new(char*, len + 1);
for (i = 0; i < len; i++) {
PyObject *item = PySequence_GetItem(py_keys, i);
if (!item) {
g_free(keys);
return NULL;
}
if (!PyString_Check(item)) {
PyErr_SetString(PyExc_TypeError, "key must be a string");
g_free(keys);
Py_DECREF(item);
return NULL;
}
keys[i] = PyString_AsString(item);
Py_DECREF(item);
}
keys[len] = NULL;
sugar_key_grabber_grab_keys (SUGAR_KEY_GRABBER(self->obj), (const char**) keys);
Py_INCREF(Py_None);
return Py_None;
}
%%