X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fpython.hh;h=ac5bd3e1821f727cc4588a6ba870db1530beffdc;hb=5face4c6f35172761367f63ac0b6eaf62d84e532;hp=7fc178eb72be9b44219cfd017a62c7e4a15fe133;hpb=3827c1a76e27865a9e2cc9da43c42399ea354e18;p=chaz%2Fopenbox diff --git a/src/python.hh b/src/python.hh index 7fc178eb..ac5bd3e1 100644 --- a/src/python.hh +++ b/src/python.hh @@ -6,22 +6,218 @@ @brief wee */ -#include "actions.hh" -#include "widget.hh" +#include "otk/point.hh" +#include "otk/rect.hh" +#include "otk/property.hh" +#include "otk/display.hh" +#include "otk/ustring.hh" extern "C" { +#include #include } +#include +#include + namespace ob { -bool python_register(int action, PyObject *callback); -bool python_unregister(int action, PyObject *callback); +class Client; + +struct MouseContext { + enum MC { + Frame, + Titlebar, + Handle, + Window, + MaximizeButton, + CloseButton, + IconifyButton, + AllDesktopsButton, + Grip, + Root, + MenuItem, + NUM_MOUSE_CONTEXT + }; +}; + +struct MouseAction { + enum MA { + Press, + Click, + DoubleClick, + Motion, + NUM_MOUSE_ACTION + }; +}; + +struct KeyContext { + enum KC { + Menu, + All, + NUM_KEY_CONTEXT + }; +}; + +struct KeyAction { + enum KA { + Press, + Release, + NUM_KEY_ACTION + }; +}; + +struct EventAction { + enum EA { + EnterWindow, + LeaveWindow, + PlaceWindow, + NewWindow, + CloseWindow, + Startup, + Shutdown, + Focus, + Bell, + UrgentWindow, + NUM_EVENTS + }; +}; + +class MouseData { +public: + int screen; + Client *client; + Time time; + unsigned int state; + unsigned int button; + MouseContext::MC context; + MouseAction::MA action; + int xroot; + int yroot; + int pressx; + int pressy; + int press_clientx; + int press_clienty; + int press_clientwidth; + int press_clientheight; + + MouseData(int screen, Client *client, Time time, unsigned int state, + unsigned int button, MouseContext::MC context, + MouseAction::MA action, int xroot, int yroot, + const otk::Point &initpos, const otk::Rect &initarea) { + this->screen = screen; + this->client = client; + this->time = time; + this->state = state; + this->button = button; + this->context= context; + this->action = action; + this->xroot = xroot; + this->yroot = yroot; + this->pressx = initpos.x(); + this->pressy = initpos.y(); + this->press_clientx = initarea.x(); + this->press_clienty = initarea.y(); + this->press_clientwidth = initarea.width(); + this->press_clientheight = initarea.height(); + } + MouseData(int screen, Client *client, Time time, unsigned int state, + unsigned int button, MouseContext::MC context, + MouseAction::MA action) { + this->screen = screen; + this->client = client; + this->time = time; + this->state = state; + this->button = button; + this->context= context; + this->action = action; + this->xroot = xroot; + this->yroot = yroot; + this->pressx = 0; + this->pressy = 0; + this->press_clientx = 0; + this->press_clienty = 0; + this->press_clientwidth = 0; + this->press_clientheight = 0; + } +}; + +class EventData { +public: + int screen; + Client *client; + unsigned int state; + EventAction::EA action; + + EventData(int screen, Client *client, EventAction::EA action, + unsigned int state) { + this->screen = screen; + this->client = client; + this->action = action; + this->state = state; + } +}; + +class KeyData { +public: + int screen; + Client *client; + Time time; + unsigned int state; + char *key; + KeyAction::KA action; + + KeyData(int screen, Client *client, Time time, unsigned int state, + unsigned int key, KeyAction::KA action) { + this->screen = screen; + this->client = client; + this->time = time; + this->state = state; + this->key = XKeysymToString(XKeycodeToKeysym(**otk::display, + key, 0)); + this->action = action; + } +}; + +#ifndef SWIG -void python_callback(OBActions::ActionType action, Window window, - OBWidget::WidgetType type, unsigned int state, - long d1 = 0, long d2 = 0); +void python_init(char *argv0); +void python_destroy(); +bool python_exec(const std::string &path); + +bool python_get_long(const char *name, long *value); +bool python_get_string(const char *name, otk::ustring *value); +bool python_get_stringlist(const char *name, std::vector *value); + +/*********************************************** + * These are found in openbox.i, not python.cc * + ***********************************************/ +void python_callback(PyObject *func, MouseData *data); +void python_callback(PyObject *func, EventData *data); +void python_callback(PyObject *func, KeyData *data); + +#endif // SWIG + +PyObject *mbind(const std::string &button, ob::MouseContext::MC context, + ob::MouseAction::MA action, PyObject *func); + +PyObject *kbind(PyObject *keylist, ob::KeyContext::KC context, PyObject *func); + +PyObject *kgrab(int screen, PyObject *func); +PyObject *kungrab(); + +PyObject *ebind(ob::EventAction::EA action, PyObject *func); + +void set_reset_key(const std::string &key); + +PyObject *send_client_msg(Window target, Atom type, Window about, + long data, long data1 = 0, long data2 = 0, + long data3 = 0, long data4 = 0); + + +void execute(const std::string &bin, int screen=0); } + #endif // __python_hh