X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fpython.hh;h=ac5bd3e1821f727cc4588a6ba870db1530beffdc;hb=d3baca52284263872a32193c655ed15a5d52e4ec;hp=189c29b32a05569d89dc30e8dfea14a8ac04024a;hpb=345d957e1ea577480f807b892b73c3f52fe913d2;p=chaz%2Fopenbox diff --git a/src/python.hh b/src/python.hh index 189c29b3..ac5bd3e1 100644 --- a/src/python.hh +++ b/src/python.hh @@ -10,6 +10,7 @@ #include "otk/rect.hh" #include "otk/property.hh" #include "otk/display.hh" +#include "otk/ustring.hh" extern "C" { #include @@ -21,60 +22,76 @@ extern "C" { namespace ob { -class OBClient; - -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 +class Client; + +struct MouseContext { + enum MC { + Frame, + Titlebar, + Handle, + Window, + MaximizeButton, + CloseButton, + IconifyButton, + AllDesktopsButton, + Grip, + Root, + MenuItem, + NUM_MOUSE_CONTEXT + }; }; -enum MouseAction { - MousePress, - MouseClick, - MouseDoubleClick, - MouseMotion, - NUM_MOUSE_ACTION +struct MouseAction { + enum MA { + Press, + Click, + DoubleClick, + Motion, + NUM_MOUSE_ACTION + }; }; -enum KeyContext { - KC_Menu, - KC_All, - NUM_KEY_CONTEXT +struct KeyContext { + enum KC { + Menu, + All, + NUM_KEY_CONTEXT + }; }; -enum EventAction { - EventEnterWindow, - EventLeaveWindow, - EventPlaceWindow, - EventNewWindow, - EventCloseWindow, - EventStartup, - EventShutdown, - EventFocus, - EventBell, - NUM_EVENTS +struct KeyAction { + enum KA { + Press, + Release, + NUM_KEY_ACTION + }; }; -// *** MotionData can be (and is) cast ButtonData!! (in actions.cc) *** // -class MotionData { +struct EventAction { + enum EA { + EnterWindow, + LeaveWindow, + PlaceWindow, + NewWindow, + CloseWindow, + Startup, + Shutdown, + Focus, + Bell, + UrgentWindow, + NUM_EVENTS + }; +}; + +class MouseData { public: int screen; - OBClient *client; + Client *client; Time time; unsigned int state; unsigned int button; - MouseContext context; - MouseAction action; + MouseContext::MC context; + MouseAction::MA action; int xroot; int yroot; int pressx; @@ -84,10 +101,10 @@ public: int press_clientwidth; int press_clientheight; - MotionData(int screen, OBClient *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) { + 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; @@ -104,21 +121,9 @@ public: this->press_clientwidth = initarea.width(); this->press_clientheight = initarea.height(); } -}; - -// *** MotionData can be (and is) cast ButtonData!! (in actions.cc) *** // -class ButtonData { -public: - int screen; - OBClient *client; - Time time; - unsigned int state; - unsigned int button; - MouseContext context; - MouseAction action; - - ButtonData(int screen, OBClient *client, Time time, unsigned int state, - unsigned int button, MouseContext context, MouseAction action) { + 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; @@ -126,17 +131,25 @@ public: 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; - OBClient *client; + Client *client; unsigned int state; - EventAction action; + EventAction::EA action; - EventData(int screen, OBClient *client, EventAction action, + EventData(int screen, Client *client, EventAction::EA action, unsigned int state) { this->screen = screen; this->client = client; @@ -148,19 +161,21 @@ public: class KeyData { public: int screen; - OBClient *client; + Client *client; Time time; unsigned int state; - std::string key; + char *key; + KeyAction::KA action; - KeyData(int screen, OBClient *client, Time time, unsigned int state, - unsigned int key) { + 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::OBDisplay::display, + this->key = XKeysymToString(XKeycodeToKeysym(**otk::display, key, 0)); + this->action = action; } }; @@ -171,31 +186,37 @@ 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, std::string *value); -bool python_get_stringlist(const char *name, std::vector *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, MotionData *data); -void python_callback(PyObject *func, ButtonData *data); +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 *mbind(const std::string &button, ob::MouseContext::MC context, + ob::MouseAction::MA action, PyObject *func); -PyObject *kbind(PyObject *keylist, ob::KeyContext context, PyObject *func); +PyObject *kbind(PyObject *keylist, ob::KeyContext::KC context, PyObject *func); -PyObject *ebind(ob::EventAction action, 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, int type, Window about, +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); + }