X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fpython.hh;h=d8b943e746d2ea69a4629ab80c650e3a907a2aa6;hb=80a42d2b0c0831e99b2b5547e8ddc0122796d78a;hp=67943a847f9ad2c8e3b3e2993aff70fea55801fc;hpb=ca3e463057ebf8a7a48a5997aedc062cdac72f3f;p=chaz%2Fopenbox diff --git a/src/python.hh b/src/python.hh index 67943a84..d8b943e7 100644 --- a/src/python.hh +++ b/src/python.hh @@ -8,6 +8,9 @@ #include "otk/point.hh" #include "otk/rect.hh" +#include "otk/property.hh" +#include "otk/display.hh" +#include "otk/ustring.hh" extern "C" { #include @@ -19,6 +22,8 @@ extern "C" { namespace ob { +class Client; + enum MouseContext { MC_Frame, MC_Titlebar, @@ -27,7 +32,7 @@ enum MouseContext { MC_MaximizeButton, MC_CloseButton, MC_IconifyButton, - MC_StickyButton, + MC_AllDesktopsButton, MC_Grip, MC_Root, MC_MenuItem, @@ -48,12 +53,25 @@ enum KeyContext { NUM_KEY_CONTEXT }; -#ifndef SWIG +enum EventAction { + EventEnterWindow, + EventLeaveWindow, + EventPlaceWindow, + EventNewWindow, + EventCloseWindow, + EventStartup, + EventShutdown, + EventKey, + EventFocus, + EventBell, + EventUrgentNotify, + NUM_EVENTS +}; -// *** MotionData can be (and is) cast ButtonData!! (in actions.cc) *** // -typedef struct { - PyObject_HEAD; - Window window; +class MouseData { +public: + int screen; + Client *client; Time time; unsigned int state; unsigned int button; @@ -67,56 +85,116 @@ typedef struct { int press_clienty; int press_clientwidth; int press_clientheight; -} MotionData; -// *** MotionData can be (and is) cast ButtonData!! (in actions.cc) *** // -typedef struct { - PyObject_HEAD; - Window window; - Time time; + 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; - unsigned int button; - MouseContext context; - MouseAction action; -} ButtonData; + EventAction action; + + EventData(int screen, Client *client, EventAction action, + unsigned int state) { + this->screen = screen; + this->client = client; + this->action = action; + this->state = state; + } +}; -typedef struct { - PyObject_HEAD; - Window window; +class KeyData { +public: + int screen; + Client *client; Time time; unsigned int state; - unsigned int key; -} KeyData; + std::string key; + EventAction action; // this is here so that all the Data structs have .action + + 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)); + this->action = EventKey; + } +}; + +#ifndef SWIG void python_init(char *argv0); void python_destroy(); bool python_exec(const std::string &path); - -MotionData *new_motion_data(Window window, Time time, unsigned int state, - unsigned int button, MouseContext context, - MouseAction action, int xroot, int yroot, - const otk::Point &initpos, - const otk::Rect &initarea); -ButtonData *new_button_data(Window window, Time time, unsigned int state, - unsigned int button, MouseContext context, - MouseAction action); -KeyData *new_key_data(Window window, Time time, unsigned int state, - unsigned int key); - -void python_callback(PyObject *func, PyObject *data); - -bool python_get_string(const char *name, std::string *value); -bool python_get_stringlist(const char *name, std::vector *value); -#endif - -PyObject * mbind(const std::string &button, ob::MouseContext context, - ob::MouseAction action, PyObject *func); - -PyObject * kbind(PyObject *keylist, ob::KeyContext context, PyObject *func); -PyObject * kunbind(PyObject *keylist); -void kunbind_all(); + +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 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, Atom type, Window about, + long data, long data1 = 0, long data2 = 0, + long data3 = 0, long data4 = 0); } + #endif // __python_hh