From 3cf5a8b6dd5b09a8550c9ecfc19f8e0e884778cc Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 22 Dec 2002 08:49:59 +0000 Subject: [PATCH] remove python from our c++ objects. going to try out swig --- src/client.hh | 4 ---- src/openbox.cc | 27 +++++++++++++++------------ src/openbox.hh | 9 +++++---- src/python.cc | 2 -- 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/client.hh b/src/client.hh index 4e22e2dc..458fe088 100644 --- a/src/client.hh +++ b/src/client.hh @@ -22,14 +22,11 @@ extern "C" { #include "otk/rect.hh" #include "otk/eventhandler.hh" #include "widget.hh" -#include "python.hh" namespace ob { class OBFrame; -extern PyTypeObject OBClient_Type; - //! Maintains the state of a client window. /*! OBClient maintains the state of a client window. The state consists of the @@ -43,7 +40,6 @@ extern PyTypeObject OBClient_Type; change (such as causing a redraw of the titlebar after the title is changed). */ class OBClient : public otk::OtkEventHandler, public OBWidget { - PyObject_HEAD public: //! The frame window which decorates around the client window diff --git a/src/openbox.cc b/src/openbox.cc index 6c7bfdb8..01e23281 100644 --- a/src/openbox.cc +++ b/src/openbox.cc @@ -9,6 +9,7 @@ #include "client.hh" #include "screen.hh" #include "actions.hh" +#include "python.hh" #include "otk/property.hh" #include "otk/display.hh" #include "otk/assassin.hh" @@ -42,6 +43,8 @@ extern "C" { # include #endif // HAVE_SYS_SELECT_H +#include + #include "gettext.h" #define _(str) gettext(str) } @@ -90,9 +93,6 @@ Openbox::Openbox(int argc, char **argv) _doshutdown = false; _rcfilepath = otk::expandTilde("~/.openbox/rc3"); - _clients = (PyDictObject*) PyDict_New(); - assert(_clients); - parseCommandLine(argc, argv); // TEMPORARY: using the xrdb rc3 @@ -275,25 +275,28 @@ void Openbox::eventLoop() void Openbox::addClient(Window window, OBClient *client) { - // maintain the python list here too - PyDict_SetItem((PyObject*)_clients, PyLong_FromLong(window), - (PyObject*)client); + _clients[window] = client; } void Openbox::removeClient(Window window) { - PyDict_DelItem((PyObject*)_clients, PyLong_FromLong(window)); + _clients.erase(window); } OBClient *Openbox::findClient(Window window) { - PyClientObject *client = PyDist_GetItem((PyObject*)_clients, - PyLong_FromLong(window)); - if (client) - return client->client; - return 0; + /* + NOTE: we dont use _clients[] to find the value because that will insert + a new null into the hash, which really sucks when we want to clean up the + hash at shutdown! + */ + ClientMap::iterator it = _clients.find(window); + if (it != _clients.end()) + return it->second; + else + return (OBClient*) 0; } } diff --git a/src/openbox.hh b/src/openbox.hh index 30dc9f68..abdcfef3 100644 --- a/src/openbox.hh +++ b/src/openbox.hh @@ -16,8 +16,8 @@ extern "C" { #include #include +#include -#include "python.hh" #include "otk/screeninfo.hh" #include "otk/timerqueuemanager.hh" #include "otk/property.hh" @@ -68,6 +68,9 @@ public: Cursor ur_angle; //!< For resizing the right corner of a window }; + //! A map for looking up a specific client class from the window id + typedef std::map ClientMap; + //! A list of OBScreen classes typedef std::vector ScreenList; @@ -89,7 +92,7 @@ private: char *_argv0; //! A list of all managed clients - PyDictObject *_clients; + ClientMap _clients; //! A list of all the managed screens ScreenList _screens; @@ -166,8 +169,6 @@ public: //! Returns the mouse cursors used throughout Openbox inline const Cursors &cursors() const { return _cursors; } - inline PyDictObject *clients() const { return _clients; } - //! The main function of the Openbox class /*! This function should be called after instantiating the Openbox class. diff --git a/src/python.cc b/src/python.cc index 0d5c90cb..5a4d1bcf 100644 --- a/src/python.cc +++ b/src/python.cc @@ -37,8 +37,6 @@ static PyMethodDef OBMethods[] = { void initopenbox() { - OBClient_Type.ob_type = &PyType_Type; - Py_InitModule("openbox", OBMethods); } } -- 2.39.2