remove python from our c++ objects. going to try out swig

This commit is contained in:
Dana Jansens 2002-12-22 08:49:59 +00:00
parent 065c6efa77
commit 3cf5a8b6dd
4 changed files with 20 additions and 22 deletions

View file

@ -22,14 +22,11 @@ extern "C" {
#include "otk/rect.hh" #include "otk/rect.hh"
#include "otk/eventhandler.hh" #include "otk/eventhandler.hh"
#include "widget.hh" #include "widget.hh"
#include "python.hh"
namespace ob { namespace ob {
class OBFrame; class OBFrame;
extern PyTypeObject OBClient_Type;
//! Maintains the state of a client window. //! Maintains the state of a client window.
/*! /*!
OBClient maintains the state of a client window. The state consists of the 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). change (such as causing a redraw of the titlebar after the title is changed).
*/ */
class OBClient : public otk::OtkEventHandler, public OBWidget { class OBClient : public otk::OtkEventHandler, public OBWidget {
PyObject_HEAD
public: public:
//! The frame window which decorates around the client window //! The frame window which decorates around the client window

View file

@ -9,6 +9,7 @@
#include "client.hh" #include "client.hh"
#include "screen.hh" #include "screen.hh"
#include "actions.hh" #include "actions.hh"
#include "python.hh"
#include "otk/property.hh" #include "otk/property.hh"
#include "otk/display.hh" #include "otk/display.hh"
#include "otk/assassin.hh" #include "otk/assassin.hh"
@ -42,6 +43,8 @@ extern "C" {
# include <sys/select.h> # include <sys/select.h>
#endif // HAVE_SYS_SELECT_H #endif // HAVE_SYS_SELECT_H
#include <python2.2/Python.h>
#include "gettext.h" #include "gettext.h"
#define _(str) gettext(str) #define _(str) gettext(str)
} }
@ -90,9 +93,6 @@ Openbox::Openbox(int argc, char **argv)
_doshutdown = false; _doshutdown = false;
_rcfilepath = otk::expandTilde("~/.openbox/rc3"); _rcfilepath = otk::expandTilde("~/.openbox/rc3");
_clients = (PyDictObject*) PyDict_New();
assert(_clients);
parseCommandLine(argc, argv); parseCommandLine(argc, argv);
// TEMPORARY: using the xrdb rc3 // TEMPORARY: using the xrdb rc3
@ -275,25 +275,28 @@ void Openbox::eventLoop()
void Openbox::addClient(Window window, OBClient *client) void Openbox::addClient(Window window, OBClient *client)
{ {
// maintain the python list here too _clients[window] = client;
PyDict_SetItem((PyObject*)_clients, PyLong_FromLong(window),
(PyObject*)client);
} }
void Openbox::removeClient(Window window) void Openbox::removeClient(Window window)
{ {
PyDict_DelItem((PyObject*)_clients, PyLong_FromLong(window)); _clients.erase(window);
} }
OBClient *Openbox::findClient(Window window) OBClient *Openbox::findClient(Window window)
{ {
PyClientObject *client = PyDist_GetItem((PyObject*)_clients, /*
PyLong_FromLong(window)); NOTE: we dont use _clients[] to find the value because that will insert
if (client) a new null into the hash, which really sucks when we want to clean up the
return client->client; hash at shutdown!
return 0; */
ClientMap::iterator it = _clients.find(window);
if (it != _clients.end())
return it->second;
else
return (OBClient*) 0;
} }
} }

View file

@ -16,8 +16,8 @@ extern "C" {
#include <string> #include <string>
#include <vector> #include <vector>
#include <map>
#include "python.hh"
#include "otk/screeninfo.hh" #include "otk/screeninfo.hh"
#include "otk/timerqueuemanager.hh" #include "otk/timerqueuemanager.hh"
#include "otk/property.hh" #include "otk/property.hh"
@ -68,6 +68,9 @@ public:
Cursor ur_angle; //!< For resizing the right corner of a window 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<Window, OBClient *> ClientMap;
//! A list of OBScreen classes //! A list of OBScreen classes
typedef std::vector<OBScreen *> ScreenList; typedef std::vector<OBScreen *> ScreenList;
@ -89,7 +92,7 @@ private:
char *_argv0; char *_argv0;
//! A list of all managed clients //! A list of all managed clients
PyDictObject *_clients; ClientMap _clients;
//! A list of all the managed screens //! A list of all the managed screens
ScreenList _screens; ScreenList _screens;
@ -166,8 +169,6 @@ public:
//! Returns the mouse cursors used throughout Openbox //! Returns the mouse cursors used throughout Openbox
inline const Cursors &cursors() const { return _cursors; } inline const Cursors &cursors() const { return _cursors; }
inline PyDictObject *clients() const { return _clients; }
//! The main function of the Openbox class //! The main function of the Openbox class
/*! /*!
This function should be called after instantiating the Openbox class. This function should be called after instantiating the Openbox class.

View file

@ -37,8 +37,6 @@ static PyMethodDef OBMethods[] = {
void initopenbox() void initopenbox()
{ {
OBClient_Type.ob_type = &PyType_Type;
Py_InitModule("openbox", OBMethods); Py_InitModule("openbox", OBMethods);
} }
} }