X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fpython.hh;h=2bf656d8620a4696f27c54350d1c74772636dba9;hb=40449e199dfeab57e8d147e07989aef339a7da59;hp=b868c4722078301b3d759bcd40c3da0b242cbfaa;hpb=d7a30f93b517ac76816d0acea92e9c56ad5d6594;p=chaz%2Fopenbox diff --git a/src/python.hh b/src/python.hh index b868c472..2bf656d8 100644 --- a/src/python.hh +++ b/src/python.hh @@ -6,65 +6,135 @@ @brief wee */ -#include "actions.hh" -#include "widget.hh" -#include "bindings.hh" +#include "otk/point.hh" +#include "otk/rect.hh" extern "C" { +#include #include } +#include +#include + namespace ob { -//! Add a python callback funtion to the back of the hook list -/*! - Registering functions for KeyPress events is pointless. Use python_bind_key - instead to do this. -*/ -bool python_register(int action, PyObject *callback); -//! Add a python callback funtion to the front of the hook list -/*! - Registering functions for KeyPress events is pointless. Use python_bind_key - instead to do this. -*/ -bool python_preregister(int action, PyObject *callback); -//! Remove a python callback function from the hook list -bool python_unregister(int action, PyObject *callback); - -//! Removes all python callback functions from the hook list -bool python_unregister_all(int action); - -//! Add a keybinding -/*! - @param keylist A python list of modifier/key/buttons, in the form: - "C-A-space" or "A-Button1" etc. - @param callback A python function to call when the binding is used. -*/ -bool python_bind_key(PyObject *keylist, PyObject *callback); +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 +}; -bool python_unbind_key(PyObject *keylist); +enum MouseAction { + MousePress, + MouseClick, + MouseDoubleClick, + MouseMotion, + NUM_MOUSE_ACTION +}; -//! Adds a mouse binding -/*! - Bindings do not generate motion events. You can only handle motion events by - using register to set a function for all motion events. Bindings do generate - ButtonPress, ButtonRelease, Click, and DoubleClick events. -*/ -bool python_bind_mouse(const std::string &button, PyObject *callback); +enum KeyContext { + KC_Menu, + KC_All, + NUM_KEY_CONTEXT +}; + +enum EventAction { + EventEnterWindow, + EventLeaveWindow, + EventNewWindow, + EventCloseWindow, + NUM_EVENTS +}; + +#ifndef SWIG + +// *** MotionData can be (and is) cast ButtonData!! (in actions.cc) *** // +typedef struct { + PyObject_HEAD; + Window window; + 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; +} MotionData; + +// *** MotionData can be (and is) cast ButtonData!! (in actions.cc) *** // +typedef struct { + PyObject_HEAD; + Window window; + Time time; + unsigned int state; + unsigned int button; + MouseContext context; + MouseAction action; +} ButtonData; + +typedef struct { + PyObject_HEAD; + Window window; + unsigned int state; + EventAction action; +} EventData; + +typedef struct { + PyObject_HEAD; + Window window; + Time time; + unsigned int state; + unsigned int key; +} KeyData; + +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); +EventData *new_event_data(Window window, EventAction action, + unsigned int state); +KeyData *new_key_data(Window window, Time time, unsigned int state, + unsigned int key); + +void python_callback(PyObject *func, PyObject *data); + +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); +#endif -bool python_unbind_mouse(const std::string &button); +PyObject *mbind(const std::string &button, ob::MouseContext context, + ob::MouseAction action, PyObject *func); -bool python_unbind_all(); +PyObject *kbind(PyObject *keylist, ob::KeyContext context, PyObject *func); -//! Fire a python callback function -void python_callback(OBActions::ActionType action, Window window, - OBWidget::WidgetType type, unsigned int state, - long d1 = LONG_MIN, long d2 = LONG_MIN, - long d3 = LONG_MIN, long d4 = LONG_MIN); +PyObject *ebind(ob::EventAction action, PyObject *func); -void python_callback_binding(int id, OBActions::ActionType action, - Window window, unsigned int state, - unsigned int keybutton, Time time); +void set_reset_key(const std::string &key); }