remove python from our c++ objects. going to try out swig
This commit is contained in:
parent
065c6efa77
commit
3cf5a8b6dd
4 changed files with 20 additions and 22 deletions
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue