From: Dana Jansens Date: Tue, 24 Dec 2002 19:16:38 +0000 (+0000) Subject: python interface is working! X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=fe55bb846db1933d8d6f023236298940cab441f8;p=chaz%2Fopenbox python interface is working! --- diff --git a/src/Makefile.am b/src/Makefile.am index 92e0b3b0..3a4f9865 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -29,7 +29,7 @@ openbox.i: openbox.hh screen.hh client.hh touch openbox.i openbox_wrap.cc: openbox.i - swig -python -c++ -nodefault -module openbox -o openbox_wrap.cc openbox.i + swig -python -c++ -nodefault -o openbox_wrap.cc openbox.i # swig -guile -c++ -nodefault -o openbox_wrap.cc openbox.i # local dependencies diff --git a/src/openbox.i b/src/openbox.i index bde9a8cb..cf7859d4 100644 --- a/src/openbox.i +++ b/src/openbox.i @@ -12,17 +12,32 @@ #include "client.hh" %} -%immutable ob::Openbox::instance; +%include stl.i +//%include std_list.i +//%template(ClientList) std::list; + + +%ignore ob::Openbox::instance; +%ignore ob::OBScreen::clients; %include "openbox.hh" %include "screen.hh" %include "client.hh" - -%include stl.i -%include std_list.i +%inline %{ + ob::Openbox *Openbox_instance() { return ob::Openbox::instance; } +%}; %{ -class OBClient; + #include %} -%template(ClientList) std::list; +%extend ob::OBScreen { + OBClient *client(int i) { + ob::OBScreen::ClientList::iterator it = self->clients.begin(); + std::advance(it,i); + return *it; + } + int clientCount() const { + return (int) self->clients.size(); + } +}; diff --git a/src/screen.cc b/src/screen.cc index 18c63327..947471c2 100644 --- a/src/screen.cc +++ b/src/screen.cc @@ -101,8 +101,8 @@ OBScreen::~OBScreen() if (! _managed) return; // unmanage all windows - while (!_clients.empty()) - unmanageWindow(_clients.front()); + while (!clients.empty()) + unmanageWindow(clients.front()); delete _image_control; } @@ -243,13 +243,13 @@ void OBScreen::setClientList() Window *windows; // create an array of the window ids - if (_clients.size() > 0) { + if (clients.size() > 0) { Window *win_it; - windows = new Window[_clients.size()]; + windows = new Window[clients.size()]; win_it = windows; - ClientList::const_iterator it = _clients.begin(); - const ClientList::const_iterator end = _clients.end(); + ClientList::const_iterator it = clients.begin(); + const ClientList::const_iterator end = clients.end(); for (; it != end; ++it, ++win_it) *win_it = (*it)->window(); } else @@ -258,9 +258,9 @@ void OBScreen::setClientList() Openbox::instance->property()->set(_info->rootWindow(), otk::OBProperty::net_client_list, otk::OBProperty::Atom_Window, - windows, _clients.size()); + windows, clients.size()); - if (_clients.size()) + if (clients.size()) delete [] windows; setStackingList(); @@ -389,7 +389,7 @@ void OBScreen::manageWindow(Window window) otk::OBDisplay::ungrab(); // add to the screen's list - _clients.push_back(client); + clients.push_back(client); // update the root properties setClientList(); } @@ -432,7 +432,7 @@ void OBScreen::unmanageWindow(OBClient *client) client->frame = 0; // remove from the screen's list - _clients.remove(client); + clients.remove(client); delete client; // update the root properties diff --git a/src/screen.hh b/src/screen.hh index a35e4ca0..7e95d40f 100644 --- a/src/screen.hh +++ b/src/screen.hh @@ -43,6 +43,9 @@ public: ButtonPressMask | ButtonReleaseMask; + //! All managed clients on the screen + ClientList clients; + private: //! Was %Openbox able to manage the screen? bool _managed; @@ -64,9 +67,6 @@ private: //! Is the root colormap currently installed? bool _root_cmap_installed; - //! All managed clients on the screen - ClientList _clients; - //! Area usable for placement etc (total - struts) otk::Rect _area; @@ -114,8 +114,6 @@ public: //! Returns the style in use on the screen inline const otk::Style *style() const { return &_style; } - inline ClientList clients() { return _clients; } - //! Adds a window's strut to the screen's list of reserved spaces void addStrut(otk::Strut *strut); //! Removes a window's strut from the screen's list of reserved spaces