openbox/src/openbox.i

150 lines
3.1 KiB
OpenEdge ABL

// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
%module ob
%{
#ifdef HAVE_CONFIG_H
# include "../config.h"
#endif
#include "frame.hh"
#include "openbox.hh"
#include "screen.hh"
#include "client.hh"
#include "bindings.hh"
#include "actions.hh"
#include "python.hh"
#include "otk/otk.hh"
%}
%include "stl.i"
//%include std_list.i
//%template(ClientList) std::list<Client*>;
%ignore ob::openbox;
%inline %{
ob::Openbox *Openbox_instance() { return ob::openbox; }
%};
%{
namespace ob {
void python_callback(PyObject *func, MouseData *data)
{
PyObject *arglist;
PyObject *result;
arglist = Py_BuildValue("(O)", SWIG_NewPointerObj((void *) data,
SWIGTYPE_p_ob__MouseData,
0));
// call the callback
result = PyEval_CallObject(func, arglist);
if (!result || PyErr_Occurred()) {
// an exception occured in the script, display it
PyErr_Print();
}
Py_XDECREF(result);
Py_DECREF(arglist);
}
void python_callback(PyObject *func, EventData *data)
{
PyObject *arglist;
PyObject *result;
arglist = Py_BuildValue("(O)", SWIG_NewPointerObj((void *) data,
SWIGTYPE_p_ob__EventData,
0));
// call the callback
result = PyEval_CallObject(func, arglist);
if (!result || PyErr_Occurred()) {
// an exception occured in the script, display it
PyErr_Print();
}
Py_XDECREF(result);
Py_DECREF(arglist);
}
void python_callback(PyObject *func, KeyData *data)
{
PyObject *arglist;
PyObject *result;
arglist = Py_BuildValue("(O)", SWIG_NewPointerObj((void *) data,
SWIGTYPE_p_ob__KeyData,
0));
// call the callback
result = PyEval_CallObject(func, arglist);
if (!result || PyErr_Occurred()) {
// an exception occured in the script, display it
PyErr_Print();
}
Py_XDECREF(result);
Py_DECREF(arglist);
}
}
%}
#ignore ob::openbox;
%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();
}
};
/*
%include "../otk/ustring.i"
%ignore otk::display;
%inline %{
otk::Display *Display_instance() { return otk::display; }
%};
%ignore otk::Property::atoms;
%inline %{
const otk::Atoms& Property_atoms() { return otk::Property::atoms; }
%};
%include "../otk/display.hh"
%include "../otk/point.hh"
%include "../otk/property.hh"
%include "../otk/rect.hh"
%include "../otk/screeninfo.hh"
%include "../otk/strut.hh"
%include "../otk/eventhandler.hh"
%include "../otk/eventdispatcher.hh"
%import "../otk/widget.hh"
*/
%import "../otk/otk.i"
%import "widgetbase.hh"
%import "actions.hh"
%include "openbox.hh"
%include "screen.hh"
%include "client.hh"
%include "frame.hh"
%include "python.hh"
// for Mod1Mask etc
%include "X11/X.h"