2002-12-23 00:04:32 +00:00
|
|
|
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
|
|
|
|
|
|
|
|
%module openbox
|
|
|
|
|
|
|
|
%{
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "../config.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "openbox.hh"
|
|
|
|
#include "screen.hh"
|
|
|
|
#include "client.hh"
|
2002-12-31 06:59:46 +00:00
|
|
|
#include "bindings.hh"
|
2003-01-02 20:36:14 +00:00
|
|
|
#include "actions.hh"
|
2002-12-23 00:04:32 +00:00
|
|
|
%}
|
|
|
|
|
2002-12-24 19:16:38 +00:00
|
|
|
%include stl.i
|
2003-01-02 20:36:14 +00:00
|
|
|
%include exception.i
|
2002-12-24 19:16:38 +00:00
|
|
|
//%include std_list.i
|
|
|
|
//%template(ClientList) std::list<OBClient*>;
|
|
|
|
|
|
|
|
%ignore ob::Openbox::instance;
|
|
|
|
%inline %{
|
|
|
|
ob::Openbox *Openbox_instance() { return ob::Openbox::instance; }
|
|
|
|
%};
|
2002-12-23 00:04:32 +00:00
|
|
|
|
2002-12-25 04:54:44 +00:00
|
|
|
// stuff for scripting callbacks!
|
2002-12-25 02:19:49 +00:00
|
|
|
%inline %{
|
|
|
|
enum ActionType {
|
|
|
|
Action_ButtonPress,
|
2002-12-25 04:54:44 +00:00
|
|
|
Action_Click,
|
|
|
|
Action_DoubleClick,
|
2002-12-25 02:19:49 +00:00
|
|
|
Action_EnterWindow,
|
|
|
|
Action_LeaveWindow,
|
|
|
|
Action_KeyPress,
|
2003-01-02 20:37:49 +00:00
|
|
|
Action_MouseMotion,
|
|
|
|
Action_NewWindow,
|
|
|
|
Action_CloseWindow
|
2002-12-25 02:19:49 +00:00
|
|
|
};
|
2002-12-25 04:54:44 +00:00
|
|
|
enum WidgetType {
|
|
|
|
Type_Frame,
|
|
|
|
Type_Titlebar,
|
|
|
|
Type_Handle,
|
|
|
|
Type_Plate,
|
|
|
|
Type_Label,
|
|
|
|
Type_MaximizeButton,
|
|
|
|
Type_CloseButton,
|
|
|
|
Type_IconifyButton,
|
|
|
|
Type_StickyButton,
|
|
|
|
Type_LeftGrip,
|
|
|
|
Type_RightGrip,
|
|
|
|
Type_Client,
|
|
|
|
Type_Root
|
|
|
|
};
|
2002-12-25 02:19:49 +00:00
|
|
|
%}
|
2003-01-02 20:36:14 +00:00
|
|
|
%rename(register) python_register;
|
|
|
|
%inline %{
|
|
|
|
PyObject * python_register(int action, PyObject *func, bool infront = false)
|
|
|
|
{
|
|
|
|
if (!PyCallable_Check(func)) {
|
|
|
|
PyErr_SetString(PyExc_TypeError, "Invalid callback function.");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!ob::Openbox::instance->actions()->registerCallback(
|
|
|
|
(ob::OBActions::ActionType)action, func, infront)) {
|
|
|
|
PyErr_SetString(PyExc_RuntimeError, "Unable to register action callback.");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
Py_INCREF(Py_None); return Py_None;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyObject * unregister(int action, PyObject *func)
|
|
|
|
{
|
|
|
|
if (!PyCallable_Check(func)) {
|
|
|
|
PyErr_SetString(PyExc_TypeError, "Invalid callback function.");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!ob::Openbox::instance->actions()->unregisterCallback(
|
|
|
|
(ob::OBActions::ActionType)action, func)) {
|
|
|
|
PyErr_SetString(PyExc_RuntimeError, "Unable to unregister action callback.");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
Py_INCREF(Py_None); return Py_None;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyObject * unregister_all(int action)
|
|
|
|
{
|
|
|
|
if (!ob::Openbox::instance->actions()->unregisterAllCallbacks(
|
|
|
|
(ob::OBActions::ActionType)action)) {
|
|
|
|
PyErr_SetString(PyExc_RuntimeError,
|
|
|
|
"Unable to unregister action callbacks.");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
Py_INCREF(Py_None); return Py_None;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyObject * bind(PyObject *keylist, PyObject *func)
|
|
|
|
{
|
2003-01-02 22:53:52 +00:00
|
|
|
if (!PyCallable_Check(func)) {
|
|
|
|
PyErr_SetString(PyExc_TypeError, "Invalid callback function.");
|
|
|
|
return NULL;
|
|
|
|
}
|
2003-01-02 20:36:14 +00:00
|
|
|
if (!PyList_Check(keylist)) {
|
|
|
|
PyErr_SetString(PyExc_TypeError, "Invalid keylist. Not a list.");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
ob::OBBindings::StringVect vectkeylist;
|
|
|
|
for (int i = 0, end = PyList_Size(keylist); i < end; ++i) {
|
|
|
|
PyObject *str = PyList_GetItem(keylist, i);
|
|
|
|
if (!PyString_Check(str)) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"Invalid keylist. It must contain only strings.");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
vectkeylist.push_back(PyString_AsString(str));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!ob::Openbox::instance->bindings()->add(vectkeylist, func)) {
|
|
|
|
PyErr_SetString(PyExc_RuntimeError,"Unable to add binding.");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
Py_INCREF(Py_None); return Py_None;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyObject * unbind(PyObject *keylist)
|
|
|
|
{
|
|
|
|
if (!PyList_Check(keylist)) {
|
|
|
|
PyErr_SetString(PyExc_TypeError, "Invalid keylist. Not a list.");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
ob::OBBindings::StringVect vectkeylist;
|
|
|
|
for (int i = 0, end = PyList_Size(keylist); i < end; ++i) {
|
|
|
|
PyObject *str = PyList_GetItem(keylist, i);
|
|
|
|
if (!PyString_Check(str)) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"Invalid keylist. It must contain only strings.");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
vectkeylist.push_back(PyString_AsString(str));
|
|
|
|
}
|
|
|
|
|
|
|
|
ob::Openbox::instance->bindings()->remove(vectkeylist);
|
|
|
|
Py_INCREF(Py_None); return Py_None;
|
|
|
|
}
|
|
|
|
|
|
|
|
void unbind_all()
|
|
|
|
{
|
|
|
|
ob::Openbox::instance->bindings()->removeAll();
|
|
|
|
}
|
|
|
|
|
|
|
|
void set_reset_key(const std::string &key)
|
|
|
|
{
|
|
|
|
ob::Openbox::instance->bindings()->setResetKey(key);
|
|
|
|
}
|
|
|
|
%}
|
2002-12-25 02:19:49 +00:00
|
|
|
|
|
|
|
%ignore ob::OBScreen::clients;
|
2002-12-23 00:04:32 +00:00
|
|
|
%{
|
2002-12-24 19:16:38 +00:00
|
|
|
#include <iterator>
|
2002-12-23 00:04:32 +00:00
|
|
|
%}
|
2002-12-24 19:16:38 +00:00
|
|
|
%extend ob::OBScreen {
|
|
|
|
OBClient *client(int i) {
|
2002-12-25 00:27:10 +00:00
|
|
|
if (i >= (int)self->clients.size())
|
|
|
|
return NULL;
|
2002-12-24 19:16:38 +00:00
|
|
|
ob::OBScreen::ClientList::iterator it = self->clients.begin();
|
|
|
|
std::advance(it,i);
|
|
|
|
return *it;
|
|
|
|
}
|
|
|
|
int clientCount() const {
|
|
|
|
return (int) self->clients.size();
|
|
|
|
}
|
|
|
|
};
|
2002-12-25 02:19:49 +00:00
|
|
|
|
|
|
|
%import "../otk/eventdispatcher.hh"
|
|
|
|
%import "../otk/eventhandler.hh"
|
|
|
|
%import "widget.hh"
|
2003-01-02 20:36:14 +00:00
|
|
|
%import "actions.hh"
|
2002-12-25 02:19:49 +00:00
|
|
|
|
|
|
|
%include "openbox.hh"
|
|
|
|
%include "screen.hh"
|
|
|
|
%include "client.hh"
|
|
|
|
|
|
|
|
// for Mod1Mask etc
|
|
|
|
%include "X11/X.h"
|