return a Python list of Client*'s when a std::list<Client*> is returned
Dana Jansens danakj@orodu.net
1 files changed,
12 insertions(+),
18 deletions(-)
jump to
M
wrap/ob.i
→
wrap/ob.i
@@ -16,8 +16,6 @@ #include "otk/otk.hh"
%} %include "stl.i" -//%include std_list.i -//%template(ClientList) std::list<Client*>; %include "callback.i" %immutable ob::openbox;@@ -28,23 +26,19 @@ ob::Openbox *Openbox_instance() { return ob::openbox; }
%}; */ -%ignore ob::Screen::clients; -%{ - #include <iterator> -%} -%extend ob::Screen { - Client *client(int i) { - if (i < 0 || i >= (int)self->clients.size()) - return NULL; - ob::Client::List::iterator it = self->clients.begin(); - std::advance(it,i); - return *it; - } - int clientCount() const { - return (int) self->clients.size(); - } -}; +%typemap(python,out) std::list<ob::Client*> { + unsigned int s = $1.size(); + PyObject *l = PyList_New(s); + std::list<ob::Client*>::const_iterator it = $1.begin(), end = $1.end(); + for (unsigned int i = 0; i < s; ++i, ++it) { + PyObject *pdata = SWIG_NewPointerObj((void *) *it, + SWIGTYPE_p_ob__Client, 0); + PyList_SET_ITEM(l, i, pdata); + } + $result = l; +} + // do this through events %ignore ob::Screen::showDesktop(bool);