summaryrefslogtreecommitdiff
path: root/wrap
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-02-17 11:49:35 +0000
committerDana Jansens <danakj@orodu.net>2003-02-17 11:49:35 +0000
commita7d17188a4d98ec9a30bf980079fd12f8313d9b3 (patch)
tree34f51d4788967fe8ea553a377f9b56ce60ed5985 /wrap
parent5fc7db1c16783530a95382e61cfcb46d2480142c (diff)
return a Python list of Client*'s when a std::list<Client*> is returned
Diffstat (limited to 'wrap')
-rw-r--r--wrap/ob.i32
1 files changed, 13 insertions, 19 deletions
diff --git a/wrap/ob.i b/wrap/ob.i
index ba59d4d3..fa2d020e 100644
--- a/wrap/ob.i
+++ b/wrap/ob.i
@@ -16,8 +16,6 @@
%}
%include "stl.i"
-//%include std_list.i
-//%template(ClientList) std::list<Client*>;
%include "callback.i"
%immutable ob::openbox;
@@ -28,23 +26,19 @@
%};
*/
-%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);