X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fopenbox.i;h=b3d1a9ed725650c70954521d4273298662011feb;hb=5face4c6f35172761367f63ac0b6eaf62d84e532;hp=0e98bbfd49e63946da1213c6ee92908752531f2d;hpb=6d58d84f22887f03ac5471b9775452b90103b6f0;p=chaz%2Fopenbox diff --git a/src/openbox.i b/src/openbox.i index 0e98bbfd..b3d1a9ed 100644 --- a/src/openbox.i +++ b/src/openbox.i @@ -1,169 +1,107 @@ // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- -%module openbox +%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 exception.i +%include "stl.i" //%include std_list.i -//%template(ClientList) std::list; +//%template(ClientList) std::list; -%ignore ob::Openbox::instance; +%ignore ob::openbox; %inline %{ - ob::Openbox *Openbox_instance() { return ob::Openbox::instance; } + ob::Openbox *Openbox_instance() { return ob::openbox; } %}; -// stuff for scripting callbacks! -%inline %{ - enum ActionType { - Action_ButtonPress, - Action_ButtonRelease, - Action_Click, - Action_DoubleClick, - Action_EnterWindow, - Action_LeaveWindow, - Action_KeyPress, - Action_MouseMotion, - Action_NewWindow, - Action_CloseWindow - }; - 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 - }; -%} -%rename(register) python_register; -%inline %{ -PyObject * python_register(int action, PyObject *func, bool infront = false) +%{ +namespace ob { +void python_callback(PyObject *func, MouseData *data) { - if (!PyCallable_Check(func)) { - PyErr_SetString(PyExc_TypeError, "Invalid callback function."); - return NULL; + 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(); } - 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; + Py_XDECREF(result); + Py_DECREF(arglist); } -PyObject * unregister(int action, PyObject *func) +void python_callback(PyObject *func, EventData *data) { - if (!PyCallable_Check(func)) { - PyErr_SetString(PyExc_TypeError, "Invalid callback function."); - return NULL; + 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(); } - 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; + Py_XDECREF(result); + Py_DECREF(arglist); } -PyObject * bind(PyObject *keylist, PyObject *func) +void python_callback(PyObject *func, KeyData *data) { - if (!PyList_Check(keylist)) { - PyErr_SetString(PyExc_TypeError, "Invalid keylist. Not a list."); - return NULL; + 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(); } - 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; + Py_XDECREF(result); + Py_DECREF(arglist); } -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); } %} -%ignore ob::OBScreen::clients; +#ignore ob::openbox; + +%ignore ob::Screen::clients; %{ #include %} -%extend ob::OBScreen { - OBClient *client(int i) { - if (i >= (int)self->clients.size()) +%extend ob::Screen { + Client *client(int i) { + if (i < 0 || i >= (int)self->clients.size()) return NULL; - ob::OBScreen::ClientList::iterator it = self->clients.begin(); + ob::Client::List::iterator it = self->clients.begin(); std::advance(it,i); return *it; } @@ -172,14 +110,41 @@ void set_reset_key(const std::string &key) } }; -%import "../otk/eventdispatcher.hh" -%import "../otk/eventhandler.hh" -%import "widget.hh" +/* +%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"