diff options
| author | Christopher Davis <loafier@gmail.com> | 2006-07-03 06:00:18 +0000 |
|---|---|---|
| committer | Christopher Davis <loafier@gmail.com> | 2006-07-03 06:00:18 +0000 |
| commit | 34cdeaae9369af5dce3ce3a4a7756c033bc44cc5 (patch) | |
| tree | e6d1c6e41fa734e0ac40ef5f3c68aff689631017 /objects | |
| parent | a329fa4675852886ba2bbc9637cebcac882f1575 (diff) | |
| download | irssi-python-34cdeaae9369af5dce3ce3a4a7756c033bc44cc5.tar.gz irssi-python-34cdeaae9369af5dce3ce3a4a7756c033bc44cc5.tar.xz irssi-python-34cdeaae9369af5dce3ce3a4a7756c033bc44cc5.zip | |
worked on formats. working on themes now; testing adding functions and methods to objects
git-svn-id: http://svn.irssi.org/repos/irssi-python@4295 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'objects')
| -rw-r--r-- | objects/base-objects.h | 2 | ||||
| -rw-r--r-- | objects/pyscript-object.c | 362 | ||||
| -rw-r--r-- | objects/pyscript-object.h | 4 | ||||
| -rw-r--r-- | objects/textdest-object.c | 129 | ||||
| -rw-r--r-- | objects/textdest-object.h | 1 | ||||
| -rw-r--r-- | objects/window-item-object.c | 3 |
6 files changed, 436 insertions, 65 deletions
diff --git a/objects/base-objects.h b/objects/base-objects.h index ed2edfc..5351ead 100644 --- a/objects/base-objects.h +++ b/objects/base-objects.h @@ -27,7 +27,7 @@ typedef struct void *data; } PyIrssiObject; -#define DATA(obj) (((PyIrssiObject *)obj)->data) +#define DATA(obj) (obj? ((PyIrssiObject *)obj)->data : NULL) /* base for classes with a type */ typedef struct diff --git a/objects/pyscript-object.c b/objects/pyscript-object.c index 2ab7b88..d51761b 100644 --- a/objects/pyscript-object.c +++ b/objects/pyscript-object.c @@ -5,6 +5,7 @@ #include "pysignals.h" #include "pymodule.h" #include "pysource.h" +#include "pythemes.h" /* handle cycles... Can't think of any reason why the user would put script into one of the lists @@ -40,31 +41,29 @@ static void PyScript_dealloc(PyScript* self) static PyObject *PyScript_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { PyScript *self; - PyObject *argv, *modules; + PyObject *argv = NULL, *modules = NULL; argv = PyList_New(0); if (!argv) - return NULL; + goto error; modules = PyDict_New(); if (!modules) - { - Py_DECREF(argv); - return NULL; - } + goto error; self = (PyScript *)type->tp_alloc(type, 0); if (!self) - { - Py_DECREF(argv); - Py_DECREF(modules); - return NULL; - } - + goto error; + self->argv = argv; self->modules = modules; return (PyObject *)self; + +error: + Py_XDECREF(argv); + Py_XDECREF(modules); + return NULL; } PyDoc_STRVAR(PyScript_command_bind_doc, @@ -268,55 +267,70 @@ static PyObject *PyScript_signal_unregister(PyScript *self, PyObject *args, PyOb } PyDoc_STRVAR(PyScript_timeout_add_doc, - "timeout_add(msecs, func, data=None, once=False) -> int source handle\n" + "timeout_add(msecs, func, data=None) -> int source tag\n" + "\n" + "Add a timeout handler called every 'msecs' milliseconds until func\n" + "returns False or the source is removed with source_remove().\n" + "\n" + "func is called as func(data) or func(), depending on whether data\n" + "is specified or not.\n" ); static PyObject *PyScript_timeout_add(PyScript *self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"msecs", "func", "data", "once", NULL}; + static char *kwlist[] = {"msecs", "func", "data", NULL}; int msecs = 0; PyObject *func = NULL; PyObject *data = NULL; - int once = 0; int ret; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "iO|Oi", kwlist, - &msecs, &func, &data, &once)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "iO|O", kwlist, + &msecs, &func, &data)) return NULL; if (msecs < 10) return PyErr_Format(PyExc_ValueError, "msecs must be at least 10"); - ret = pysource_timeout_add_list(&self->sources, msecs, func, data, once); + if (!PyCallable_Check(func)) + return PyErr_Format(PyExc_TypeError, "func not callable"); + + ret = pysource_timeout_add_list(&self->sources, msecs, func, data); return PyInt_FromLong(ret); } -PyDoc_STRVAR(PyScript_input_add_doc, - "input_add(fd, func, data=None, once=False, condition=G_INPUT_READ) -> int source tag\n" +PyDoc_STRVAR(PyScript_io_add_watch_doc, + "io_add_watch(fd, func, data=None, condition=IO_IN|IO_PRI) -> int source tag\n" ); -static PyObject *PyScript_input_add(PyScript *self, PyObject *args, PyObject *kwds) +static PyObject *PyScript_io_add_watch(PyScript *self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"fd", "func", "data", "once", "condition", NULL}; + static char *kwlist[] = {"fd", "func", "data", "condition", NULL}; int fd = 0; + PyObject *pyfd = NULL; PyObject *func = NULL; PyObject *data = NULL; - int once = 0; - int condition = G_INPUT_READ; + int condition = G_IO_IN | G_IO_PRI; int ret; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "iO|Oii", kwlist, - &fd, &func, &data, &once, &condition)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO|Oi", kwlist, + &pyfd, &func, &data, &condition)) return NULL; - ret = pysource_input_add_list(&self->sources, fd, condition, func, data, once); + fd = PyObject_AsFileDescriptor(pyfd); + if (fd < 0) + return NULL; + + if (!PyCallable_Check(func)) + return PyErr_Format(PyExc_TypeError, "func not callable"); + + ret = pysource_io_add_watch_list(&self->sources, fd, condition, func, data); return PyInt_FromLong(ret); } PyDoc_STRVAR(PyScript_source_remove_doc, - "source_remove(tag) -> None\n" + "source_remove(tag) -> bool\n" "\n" - "Remove IO or timeout source by tag\n" + "Remove IO or timeout source by tag. Return True if tag found and removed.\n" ); static PyObject *PyScript_source_remove(PyScript *self, PyObject *args, PyObject *kwds) { @@ -327,8 +341,204 @@ static PyObject *PyScript_source_remove(PyScript *self, PyObject *args, PyObject &tag)) return NULL; - if (!pysource_remove_tag(&self->sources, tag)) - return PyErr_Format(PyExc_KeyError, "source tag not found"); + /* the destroy notify func will remove the list link, but first + check that the tag exists in this Script object */ + if (g_slist_find(self->sources, GINT_TO_POINTER(tag))) + return PyBool_FromLong(g_source_remove(tag)); + + Py_RETURN_FALSE; +} + +static int py_settings_add(PyScript *self, const char *name) +{ + GSList *node; + + node = gslist_find_icase_string(self->settings, name); + if (node) + return 0; + + self->settings = g_slist_append(self->settings, g_strdup(name)); + + return 1; +} + +static int py_settings_remove(PyScript *self, const char *name) +{ + GSList *node; + + node = gslist_find_icase_string(self->settings, name); + if (!node) + return 0; + + settings_remove(node->data); + g_free(node->data); + + self->settings = g_slist_delete_link(self->settings, node); + + return 1; +} + +PyDoc_STRVAR(PyScript_settings_add_str_doc, + "" +); +static PyObject *PyScript_settings_add_str(PyScript *self, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"section", "key", "def", NULL}; + char *section = ""; + char *key = ""; + char *def = ""; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "sss", kwlist, + §ion, &key, &def)) + return NULL; + + if (!py_settings_add(self, key)) + return PyErr_Format(PyExc_ValueError, "key, %s, already added by script", key); + + settings_add_str_module(MODULE_NAME"/scripts", section, key, def); + + Py_RETURN_NONE; +} + +PyDoc_STRVAR(PyScript_settings_add_int_doc, + "" +); +static PyObject *PyScript_settings_add_int(PyScript *self, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"section", "key", "def", NULL}; + char *section = ""; + char *key = ""; + int def = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "ssi", kwlist, + §ion, &key, &def)) + return NULL; + + if (!py_settings_add(self, key)) + return PyErr_Format(PyExc_ValueError, "key, %s, already added by script", key); + + settings_add_int_module(MODULE_NAME"/scripts", section, key, def); + + Py_RETURN_NONE; +} + +PyDoc_STRVAR(PyScript_settings_add_bool_doc, + "" +); +static PyObject *PyScript_settings_add_bool(PyScript *self, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"section", "key", "def", NULL}; + char *section = ""; + char *key = ""; + int def = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "ssi", kwlist, + §ion, &key, &def)) + return NULL; + + if (!py_settings_add(self, key)) + return PyErr_Format(PyExc_ValueError, "key, %s, already added by script", key); + + settings_add_bool_module(MODULE_NAME"/scripts", section, key, def); + + Py_RETURN_NONE; +} + +PyDoc_STRVAR(PyScript_settings_add_time_doc, + "" +); +static PyObject *PyScript_settings_add_time(PyScript *self, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"section", "key", "def", NULL}; + char *section = ""; + char *key = ""; + char *def = ""; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "sss", kwlist, + §ion, &key, &def)) + return NULL; + + if (!py_settings_add(self, key)) + return PyErr_Format(PyExc_ValueError, "key, %s, already added by script", key); + + settings_add_time_module(MODULE_NAME"/scripts", section, key, def); + + Py_RETURN_NONE; +} + +PyDoc_STRVAR(PyScript_settings_add_level_doc, + "" +); +static PyObject *PyScript_settings_add_level(PyScript *self, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"section", "key", "def", NULL}; + char *section = ""; + char *key = ""; + char *def = ""; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "sss", kwlist, + §ion, &key, &def)) + return NULL; + + if (!py_settings_add(self, key)) + return PyErr_Format(PyExc_ValueError, "key, %s, already added by script", key); + + settings_add_level_module(MODULE_NAME"/scripts", section, key, def); + + Py_RETURN_NONE; +} + +PyDoc_STRVAR(PyScript_settings_add_size_doc, + "" +); +static PyObject *PyScript_settings_add_size(PyScript *self, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"section", "key", "def", NULL}; + char *section = ""; + char *key = ""; + char *def = ""; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "sss", kwlist, + §ion, &key, &def)) + return NULL; + + if (!py_settings_add(self, key)) + return PyErr_Format(PyExc_ValueError, "key, %s, already added by script", key); + + settings_add_size_module(MODULE_NAME"/scripts", section, key, def); + + Py_RETURN_NONE; +} + +PyDoc_STRVAR(PyScript_settings_remove_doc, + "settings_remove(key) -> bool\n" +); +static PyObject *PyScript_settings_remove(PyScript *self, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"key", NULL}; + char *key = ""; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist, + &key)) + return NULL; + + return PyBool_FromLong(py_settings_remove(self, key)); +} + +PyDoc_STRVAR(PyScript_theme_register_doc, + "theme_register(list) -> None\n" +); +static PyObject *PyScript_theme_register(PyScript *self, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"list", NULL}; + PyObject *list = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O", kwlist, + &list)) + return NULL; + + if (!pythemes_register(pyscript_get_name(self), list)) + return NULL; Py_RETURN_NONE; } @@ -349,10 +559,26 @@ static PyMethodDef PyScript_methods[] = { PyScript_signal_unregister_doc}, {"timeout_add", (PyCFunction)PyScript_timeout_add, METH_VARARGS | METH_KEYWORDS, PyScript_timeout_add_doc}, - {"input_add", (PyCFunction)PyScript_input_add, METH_VARARGS | METH_KEYWORDS, - PyScript_input_add_doc}, + {"io_add_watch", (PyCFunction)PyScript_io_add_watch, METH_VARARGS | METH_KEYWORDS, + PyScript_io_add_watch_doc}, {"source_remove", (PyCFunction)PyScript_source_remove, METH_VARARGS | METH_KEYWORDS, PyScript_source_remove_doc}, + {"settings_add_str", (PyCFunction)PyScript_settings_add_str, METH_VARARGS | METH_KEYWORDS, + PyScript_settings_add_str_doc}, + {"settings_add_int", (PyCFunction)PyScript_settings_add_int, METH_VARARGS | METH_KEYWORDS, + PyScript_settings_add_int_doc}, + {"settings_add_bool", (PyCFunction)PyScript_settings_add_bool, METH_VARARGS | METH_KEYWORDS, + PyScript_settings_add_bool_doc}, + {"settings_add_time", (PyCFunction)PyScript_settings_add_time, METH_VARARGS | METH_KEYWORDS, + PyScript_settings_add_time_doc}, + {"settings_add_level", (PyCFunction)PyScript_settings_add_level, METH_VARARGS | METH_KEYWORDS, + PyScript_settings_add_level_doc}, + {"settings_add_size", (PyCFunction)PyScript_settings_add_size, METH_VARARGS | METH_KEYWORDS, + PyScript_settings_add_size_doc}, + {"settings_remove", (PyCFunction)PyScript_settings_remove, METH_VARARGS | METH_KEYWORDS, + PyScript_settings_remove_doc}, + {"theme_register", (PyCFunction)PyScript_theme_register, METH_VARARGS | METH_KEYWORDS, + PyScript_theme_register_doc}, {NULL} /* Sentinel */ }; @@ -363,7 +589,7 @@ static PyMemberDef PyScript_members[] = { {NULL} /* Sentinel */ }; -static PyTypeObject PyScriptType = { +PyTypeObject PyScriptType = { PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ "Script", /*tp_name*/ @@ -408,7 +634,7 @@ static PyTypeObject PyScriptType = { /* PyScript factory function */ PyObject *pyscript_new(PyObject *module, char **argv) { - PyObject *script = NULL; + PyObject *script; script = PyObject_CallFunction((PyObject*)&PyScriptType, "()"); @@ -418,17 +644,20 @@ PyObject *pyscript_new(PyObject *module, char **argv) while (*argv) { - PyObject *str = PyString_FromString(*argv); - if (!str) + if (**argv != '\0') { - /* The destructor should DECREF argv */ - Py_DECREF(script); - return NULL; + PyObject *str = PyString_FromString(*argv); + if (!str) + { + /* The destructor should DECREF argv */ + Py_DECREF(script); + return NULL; + } + + PyList_Append(scr->argv, str); + Py_DECREF(str); } - PyList_Append(scr->argv, str); - Py_DECREF(str); - *argv++; } @@ -466,15 +695,47 @@ void pyscript_remove_signals(PyObject *script) void pyscript_remove_sources(PyObject *script) { + GSList *node; + PyScript *self; + + g_return_if_fail(pyscript_check(script)); + + self = (PyScript *) script; + + node = self->sources; + while (node) + { + /* the notify func will destroy the link so save next */ + GSList *next = node->next; + g_source_remove(GPOINTER_TO_INT(node->data)); + node = next; + } + + g_return_if_fail(self->sources == NULL); +} + +void pyscript_remove_settings(PyObject *script) +{ PyScript *self; g_return_if_fail(pyscript_check(script)); self = (PyScript *) script; - pysource_remove_list(self->sources); - g_slist_free(self->sources); - self->sources = NULL; + g_slist_foreach(self->settings, (GFunc)settings_remove, NULL); + g_slist_foreach(self->settings, (GFunc)g_free, NULL); + g_slist_free(self->settings); +} + +void pyscript_remove_themes(PyObject *script) +{ + PyScript *self; + + g_return_if_fail(pyscript_check(script)); + + self = (PyScript *) script; + + pythemes_unregister(pyscript_get_name(script)); } void pyscript_clear_modules(PyObject *script) @@ -488,6 +749,15 @@ void pyscript_clear_modules(PyObject *script) PyDict_Clear(self->modules); } +void pyscript_cleanup(PyObject *script) +{ + pyscript_remove_signals(script); + pyscript_remove_sources(script); + pyscript_remove_settings(script); + pyscript_remove_themes(script); + pyscript_clear_modules(script); +} + int pyscript_init(void) { if (PyType_Ready(&PyScriptType) < 0) diff --git a/objects/pyscript-object.h b/objects/pyscript-object.h index fafa94b..644571d 100644 --- a/objects/pyscript-object.h +++ b/objects/pyscript-object.h @@ -11,6 +11,7 @@ typedef struct { GSList *signals; /* list of bound signals and commands */ GSList *registered_signals; /* list of signal names registered */ GSList *sources; /* list of io and timeout sources */ + GSList *settings; /* list of settings from settings_add_*() */ } PyScript; extern PyTypeObject PyScriptType; @@ -19,7 +20,10 @@ int pyscript_init(void); PyObject *pyscript_new(PyObject *module, char **argv); void pyscript_remove_signals(PyObject *script); void pyscript_remove_sources(PyObject *script); +void pyscript_remove_settings(PyObject *script); +void pyscript_remove_themes(PyObject *script); void pyscript_clear_modules(PyObject *script); +void pyscript_cleanup(PyObject *script); #define pyscript_check(op) PyObject_TypeCheck(op, &PyScriptType) #define pyscript_get_name(scr) PyModule_GetName(((PyScript*)scr)->module) #define pyscript_get_filename(scr) PyModule_GetFilename(((PyScript*)scr)->module) diff --git a/objects/textdest-object.c b/objects/textdest-object.c index 9dd94d6..2ad6523 100644 --- a/objects/textdest-object.c +++ b/objects/textdest-object.c @@ -5,13 +5,20 @@ #include "factory.h" #include "pycore.h" -/* XXX: no cleanup signal for textdest */ +static int pytextdest_setup(PyTextDest *pytdest, void *td, int owned); +/* XXX: no cleanup signal for textdest */ static void PyTextDest_dealloc(PyTextDest *self) { Py_XDECREF(self->window); Py_XDECREF(self->server); - + + if (self->owned) + { + g_free((char*)self->data->target); + g_free(self->data); + } + self->ob_type->tp_free((PyObject*)self); } @@ -26,6 +33,57 @@ static PyObject *PyTextDest_new(PyTypeObject *type, PyObject *args, PyObject *kw return (PyObject *)self; } +/* init function to create the textdest */ +PyDoc_STRVAR(PyTextDest_doc, + "__init__(target, level=MSGLEVEL_CLIENTNOTICE, server=None, window=None)\n" + "\n" + "Create a TextDest\n" +); +static int PyTextDest_init(PyTextDest *self, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"target", "level", "server", "window", NULL}; + char *target; + int level = MSGLEVEL_CLIENTNOTICE; + PyObject *server = NULL, *window = NULL; + TEXT_DEST_REC *dest; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|ioo", kwlist, + &target, &level, &server, &window)) + return -1; + + if (server == Py_None) + server = NULL; + if (window == Py_None) + window = NULL; + + if (server && !pyserver_check(server)) + { + PyErr_Format(PyExc_TypeError, "arg 3 isnt server"); + return -1; + } + + if (window && !pywindow_check(window)) + { + PyErr_Format(PyExc_TypeError, "arg 4 isnt window"); + return -1; + } + + if (self->data) + { + PyErr_Format(PyExc_RuntimeError, "TextDest already wrapped"); + return -1; + } + + dest = g_new0(TEXT_DEST_REC, 1); + format_create_dest(dest, DATA(server), g_strdup(target), level, DATA(window)); + + if (!pytextdest_setup(self, dest, 1)) + return -1; + + return 0; +} + +/* Getters */ PyDoc_STRVAR(PyTextDest_window_doc, "Window where the text will be written" ); @@ -97,8 +155,32 @@ static PyGetSetDef PyTextDest_getseters[] = { {NULL} }; +/* Methods */ +PyDoc_STRVAR(PyTextDest_prnt_doc, + "prnt(str) -> None\n" + "\n" + "Print str to TextDest\n" +); +static PyObject *PyTextDest_prnt(PyTextDest *self, PyObject *args, PyObject *kwds) +{ + static char *kwlist[] = {"str", NULL}; + char *str = ""; + + RET_NULL_IF_INVALID(self->data); + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist, + &str)) + return NULL; + + printtext_dest(self->data, "%s", str); + + Py_RETURN_NONE; +} + /* Methods for object */ static PyMethodDef PyTextDest_methods[] = { + {"prnt", (PyCFunction)PyTextDest_prnt, METH_VARARGS | METH_KEYWORDS, + PyTextDest_prnt_doc}, {NULL} /* Sentinel */ }; @@ -124,7 +206,7 @@ PyTypeObject PyTextDestType = { 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ - "PyTextDest objects", /* tp_doc */ + PyTextDest_doc, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ @@ -139,38 +221,53 @@ PyTypeObject PyTextDestType = { 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ - 0, /* tp_init */ + (initproc)PyTextDest_init, /* tp_init */ 0, /* tp_alloc */ PyTextDest_new, /* tp_new */ }; - -/* TextDest factory function */ -PyObject *pytextdest_new(void *td) +static int pytextdest_setup(PyTextDest *pytdest, void *td, int owned) { PyObject *window, *server; - PyTextDest *pytdest; TEXT_DEST_REC *tdest = td; - window = py_irssi_chat_new(tdest->window, 1); - if (!window) - return NULL; + if (tdest->window) + { + window = pywindow_new(tdest->window); + if (!window) + return 0; + } server = py_irssi_chat_new(tdest->server, 1); if (!server) { Py_DECREF(window); - return NULL; + return 0; } - pytdest = py_inst(PyTextDest, PyTextDestType); - if (!pytdest) - return NULL; - pytdest->data = td; pytdest->window = window; pytdest->server = server; + pytdest->owned = owned; + return 1; +} + +/* TextDest factory function */ +PyObject *pytextdest_new(void *td) +{ + PyTextDest *pytdest; + + pytdest = py_inst(PyTextDest, PyTextDestType); + if (!pytdest) + return NULL; + + if (!pytextdest_setup(pytdest, td, 0)) + { + Py_DECREF(pytdest); + return NULL; + } + return (PyObject *)pytdest; } diff --git a/objects/textdest-object.h b/objects/textdest-object.h index 366914a..3e273e6 100644 --- a/objects/textdest-object.h +++ b/objects/textdest-object.h @@ -12,6 +12,7 @@ typedef struct PyIrssiFinal_HEAD(struct _TEXT_DEST_REC) PyObject *window; PyObject *server; + int owned; } PyTextDest; extern PyTypeObject PyTextDestType; diff --git a/objects/window-item-object.c b/objects/window-item-object.c index 6494d48..7acb075 100644 --- a/objects/window-item-object.c +++ b/objects/window-item-object.c @@ -69,6 +69,7 @@ static PyGetSetDef PyWindowItem_getseters[] = { {NULL} }; +/* Methods */ PyDoc_STRVAR(PyWindowItem_prnt_doc, "Print to window item" ); @@ -106,8 +107,6 @@ static PyObject *PyWindowItem_command(PyWindowItem *self, PyObject *args, PyObje Py_RETURN_NONE; } -/* Methods */ - PyDoc_STRVAR(PyWindowItem_window_doc, "Return parent window for window item" ); |
