diff options
Diffstat (limited to 'objects')
-rw-r--r-- | objects/base-objects.c | 152 | ||||
-rw-r--r-- | objects/irc-server-object.c | 4 | ||||
-rw-r--r-- | objects/main-window-object.c | 2 |
3 files changed, 72 insertions, 86 deletions
diff --git a/objects/base-objects.c b/objects/base-objects.c index 3601593..42f5cac 100644 --- a/objects/base-objects.c +++ b/objects/base-objects.c @@ -4,25 +4,17 @@ #include "base-objects.h" #include "pyirssi.h" -/* This is the base type for most, if not all, Irssi objects with a type - id. The user can find the type name, type id, and check if the object is - wrapping a valid Irssi record. */ - -/* member IDs */ -enum -{ - M_BASE_TYPE, - M_BASE_NAME, - M_BASE_VALID, -}; +/* This is the base type for Irssi objects with a type id. The user can find + * the type name, type id, and check if the object is wrapping a valid Irssi + * record. + */ static void PyIrssiBase_dealloc(PyIrssiBase *self) { self->ob_type->tp_free((PyObject*)self); } -static PyObject * -PyIrssiBase_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +static PyObject *PyIrssiBase_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { PyIrssiBase *self; @@ -33,50 +25,50 @@ PyIrssiBase_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return (PyObject *)self; } -static PyObject *PyIrssiBase_get(PyIrssiBase *self, void *closure) +/* Getters */ +PyDoc_STRVAR(PyIrssiBase_type_id_doc, + "Irssi's type id for object" +); +static PyObject *PyIrssiBase_type_id_get(PyIrssiBase *self, void *closure) { - int member = GPOINTER_TO_INT(closure); - - /* If the user passed the valid member, don't trigger an exception */ - if (member != M_BASE_VALID) - RET_NULL_IF_INVALID(self->data); - - switch (member) - { - case M_BASE_TYPE: - return PyInt_FromLong(self->data->type); - case M_BASE_NAME: - RET_AS_STRING_OR_NONE(self->base_name); - case M_BASE_VALID: - if (self->data != NULL) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; - } - - INVALID_MEMBER(member); + RET_NULL_IF_INVALID(self->data); + return PyInt_FromLong(self->data->type); } -/* specialized getters/setters */ -static PyGetSetDef PyIrssiBase_getseters[] = { - {"type_id", (getter)PyIrssiBase_get, NULL, - "Irssi's type id for object", - GINT_TO_POINTER(M_BASE_TYPE)}, +PyDoc_STRVAR(PyIrssiBase_type_doc, + "Irssi's name for object" +); +static PyObject *PyIrssiBase_type_get(PyIrssiBase *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + RET_AS_STRING_OR_NONE(self->base_name); +} - {"type", (getter)PyIrssiBase_get, NULL, - "Irssi's name for object", - GINT_TO_POINTER(M_BASE_NAME)}, +PyDoc_STRVAR(PyIrssiBase_valid_doc, + "True if the object is valid" +); +static PyObject *PyIrssiBase_valid_get(PyIrssiBase *self, void *closure) +{ + if (self->data != NULL) + Py_RETURN_TRUE; + + Py_RETURN_FALSE; +} - {"valid", (getter)PyIrssiBase_get, NULL, - "True if the object is valid", - GINT_TO_POINTER(M_BASE_VALID)}, +/* specialized getters/setters */ +static PyGetSetDef PyIrssiBase_getseters[] = { + {"type_id", (getter)PyIrssiBase_type_id_get, NULL, + PyIrssiBase_type_id_doc, NULL}, + {"type", (getter)PyIrssiBase_type_get, NULL, + PyIrssiBase_type_doc, NULL}, + {"valid", (getter)PyIrssiBase_valid_get, NULL, + PyIrssiBase_valid_doc, NULL}, {NULL} }; /* Methods for object */ static PyMethodDef PyIrssiBase_methods[] = { - /* {"somemeth", (PyCFunction)PyIrssiBase_name, METH_NOARGS, "docstr"}, */ - {NULL} /* Sentinel */ + {NULL} }; PyTypeObject PyIrssiBaseType = { @@ -127,21 +119,12 @@ PyTypeObject PyIrssiBaseType = { the type id with the chat_type_id member. It inherits from IrssiBase so the type, valid, and type_id members are visible to the user, too */ -/* member IDs */ -enum -{ - M_CHAT_CHAT_TYPE, - M_CHAT_CHAT_NAME, -}; - -static void -PyIrssiChatBase_dealloc(PyIrssiChatBase *self) +static void PyIrssiChatBase_dealloc(PyIrssiChatBase *self) { self->ob_type->tp_free((PyObject*)self); } -static PyObject * -PyIrssiChatBase_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +static PyObject *PyIrssiChatBase_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { PyIrssiChatBase *self; @@ -152,43 +135,44 @@ PyIrssiChatBase_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return (PyObject *)self; } -static PyObject *PyIrssiChatBase_get(PyIrssiChatBase *self, void *closure) +/* Getters */ +PyDoc_STRVAR(PyIrssiChatBase_chat_type_id_doc, + "Chat Type id (int)" +); +static PyObject *PyIrssiChatBase_chat_type_id_get(PyIrssiChatBase *self, void *closure) { - int member = GPOINTER_TO_INT(closure); + RET_NULL_IF_INVALID(self->data); + return PyInt_FromLong(self->data->chat_type); +} + +PyDoc_STRVAR(PyIrssiChatBase_chat_type_doc, + "Chat name (str)" +); +static PyObject *PyIrssiChatBase_chat_type_get(PyIrssiChatBase *self, void *closure) +{ + CHAT_PROTOCOL_REC *rec; RET_NULL_IF_INVALID(self->data); - switch (member) - { - case M_CHAT_CHAT_TYPE: - return PyInt_FromLong(self->data->chat_type); - case M_CHAT_CHAT_NAME: - { - CHAT_PROTOCOL_REC *rec = chat_protocol_find_id(self->data->chat_type); - if (rec) - RET_AS_STRING_OR_NONE(rec->name); - else - Py_RETURN_NONE; - } - } - - INVALID_MEMBER(member); + rec = chat_protocol_find_id(self->data->chat_type); + if (rec) + RET_AS_STRING_OR_NONE(rec->name); + else + Py_RETURN_NONE; } -//specialized getters/setters +/* specialized getters/setters */ static PyGetSetDef PyIrssiChatBase_getseters[] = { - {"chat_type_id", (getter)PyIrssiChatBase_get, NULL, - "Chat Type id", - GINT_TO_POINTER(M_CHAT_CHAT_TYPE)}, - - {"chat_type", (getter)PyIrssiChatBase_get, NULL, - "Chat Name", - GINT_TO_POINTER(M_CHAT_CHAT_NAME)}, + {"chat_type_id", (getter)PyIrssiChatBase_chat_type_id_get, NULL, + PyIrssiChatBase_chat_type_id_doc, NULL}, + {"chat_type", (getter)PyIrssiChatBase_chat_type_get, NULL, + PyIrssiChatBase_chat_type_doc, NULL}, {NULL} }; +/* Methods */ static PyMethodDef PyIrssiChatBase_methods[] = { - {NULL} /* Sentinel */ + {NULL} }; PyTypeObject PyIrssiChatBaseType = { diff --git a/objects/irc-server-object.c b/objects/irc-server-object.c index a8d9845..4e9a28e 100644 --- a/objects/irc-server-object.c +++ b/objects/irc-server-object.c @@ -282,7 +282,9 @@ static GSList *py_event_conv(PyObject *list) for (node = ret; node; node = node->next) g_free(node->data); - + + g_slist_free(ret); + if (!PyErr_Occurred() || PyErr_ExceptionMatches(PyExc_TypeError)) { PyErr_Clear(); diff --git a/objects/main-window-object.c b/objects/main-window-object.c index 331cef6..6541f2b 100644 --- a/objects/main-window-object.c +++ b/objects/main-window-object.c @@ -173,7 +173,7 @@ PyObject *pymain_window_new(MAIN_WINDOW_REC *mw) pymw = py_inst(PyMainWindow, PyMainWindowType); if (!pymw) { - Py_XDECREF(pyactive); + Py_DECREF(pyactive); return NULL; } |