X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fpython.hh;h=a2cfa366772e32d3284b4b9a3696447ff39eea9a;hb=cdcc526a0274cace9f542960fe4eee4ddcc23d31;hp=2fa3e867955312376924ce54c7ce89bbd1364a17;hpb=14cf42ff0780bf58a6b54c9443c87c7402b61faa;p=chaz%2Fopenbox diff --git a/src/python.hh b/src/python.hh index 2fa3e867..a2cfa366 100644 --- a/src/python.hh +++ b/src/python.hh @@ -6,34 +6,191 @@ @brief wee */ -#include "actions.hh" -#include "widget.hh" -#include "bindings.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 { +class Client; + +enum MouseContext { + MC_Frame, + MC_Titlebar, + MC_Handle, + MC_Window, + MC_MaximizeButton, + MC_CloseButton, + MC_IconifyButton, + MC_StickyButton, + MC_Grip, + MC_Root, + MC_MenuItem, + NUM_MOUSE_CONTEXT +}; + +enum MouseAction { + MousePress, + MouseClick, + MouseDoubleClick, + MouseMotion, + NUM_MOUSE_ACTION +}; + +enum KeyContext { + KC_Menu, + KC_All, + NUM_KEY_CONTEXT +}; + +enum EventAction { + EventEnterWindow, + EventLeaveWindow, + EventPlaceWindow, + EventNewWindow, + EventCloseWindow, + EventStartup, + EventShutdown, + EventFocus, + EventBell, + NUM_EVENTS +}; + +class MouseData { +public: + int screen; + Client *client; + Time time; + unsigned int state; + unsigned int button; + MouseContext context; + MouseAction 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 context, MouseAction 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 context, MouseAction 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 action; + + EventData(int screen, Client *client, EventAction 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; + std::string key; + + KeyData(int screen, Client *client, Time time, unsigned int state, + unsigned int key) { + this->screen = screen; + this->client = client; + this->time = time; + this->state = state; + this->key = XKeysymToString(XKeycodeToKeysym(**otk::display, + key, 0)); + } +}; + +#ifndef SWIG + void python_init(char *argv0); void python_destroy(); bool python_exec(const std::string &path); - -void python_callback(PyObject *func, OBActions::ActionType action, - Window window, OBWidget::WidgetType type, - unsigned int state, unsigned int button, - int xroot, int yroot, Time time); -void python_callback(PyObject *func, Window window, unsigned int state, - unsigned int key, Time time); +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 -bool python_get_string(const char *name, std::string *value); -bool python_get_stringlist(const char *name, std::vector *value); +PyObject *mbind(const std::string &button, ob::MouseContext context, + ob::MouseAction action, PyObject *func); +PyObject *kbind(PyObject *keylist, ob::KeyContext context, PyObject *func); + +PyObject *ebind(ob::EventAction action, PyObject *func); + +void set_reset_key(const std::string &key); + +PyObject *send_client_msg(Window target, int type, Window about, + long data, long data1 = 0, long data2 = 0, + long data3 = 0, long data4 = 0); } + #endif // __python_hh