X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fpython.hh;h=77a7bf5c676a02e4ae1c7bbc0627402f4dbb4b66;hb=544bc20a843455e66b344bd0b8b16c87ab355c09;hp=7cec766712a9ac1376f9dff7b38400b3d0e65eb3;hpb=707f70682abe0dfaadbf76843a0dccb33f0eaeda;p=chaz%2Fopenbox diff --git a/src/python.hh b/src/python.hh index 7cec7667..77a7bf5c 100644 --- a/src/python.hh +++ b/src/python.hh @@ -24,47 +24,106 @@ namespace ob { class Client; -enum MouseContext { - MC_Frame, - MC_Titlebar, - MC_Handle, - MC_Window, - MC_MaximizeButton, - MC_CloseButton, - MC_IconifyButton, - MC_AllDesktopsButton, - MC_Grip, - MC_Root, - MC_MenuItem, - NUM_MOUSE_CONTEXT +struct MouseContext { + enum MC { + Frame, + Titlebar, + Handle, + Window, + MaximizeButton, + CloseButton, + IconifyButton, + AllDesktopsButton, + Grip, + Root, + MenuItem +#if ! (defined(DOXYGEN_IGNORE) || defined(SWIG)) + , NUM_MOUSE_CONTEXT +#endif + }; }; -enum MouseAction { - MousePress, - MouseClick, - MouseDoubleClick, - MouseMotion, - NUM_MOUSE_ACTION +struct MouseAction { + enum MA { + Press, + Release, + Click, + DoubleClick, + Motion +#if ! (defined(DOXYGEN_IGNORE) || defined(SWIG)) + , NUM_MOUSE_ACTION +#endif + }; }; -enum KeyContext { - KC_Menu, - KC_All, - NUM_KEY_CONTEXT +struct KeyContext { + enum KC { + Menu, + All +#if ! (defined(DOXYGEN_IGNORE) || defined(SWIG)) + , NUM_KEY_CONTEXT +#endif + }; }; -enum EventAction { - EventEnterWindow, - EventLeaveWindow, - EventPlaceWindow, - EventNewWindow, - EventCloseWindow, - EventStartup, - EventShutdown, - EventKey, - EventFocus, - EventBell, - NUM_EVENTS +struct KeyAction { + enum KA { + Press, + Release +#if ! (defined(DOXYGEN_IGNORE) || defined(SWIG)) + , NUM_KEY_ACTION +#endif + }; +}; + +struct EventAction { + enum EA { + EnterWindow, //!< Occurs when the mouse enters a window + LeaveWindow, //!< Occurs when the mouse leaves a window + //! Occurs while a window is being managed. The handler should call + //! Client::move on the window + PlaceWindow, + //! Occurs while a window is being managed, just before the window is + //! displayed + /*! + Note that the window's state may not be completely stabilized by this + point. The NewWindow event should be used when possible. + */ + DisplayingWindow, + //! Occurs when a window is finished being managed + NewWindow, + //! Occurs when a window has been closed and is going to be unmanaged + CloseWindow, + //! Occurs when the window manager manages a screen + /*! + This event occurs on each managed screen during startup. + */ + Startup, + //! Occurs when the window manager unmanages a screen + /*! + This event occurs on each managed screen during shutdown. + */ + Shutdown, + //! Occurs when the input focus target changes + /*! + The data.client will be None of no client is focused. + */ + Focus, + //! Occurs when the system is fired through X. + /*! + The data.client will hold the client associated with the bell if + one has been specified, or None. + */ + Bell, + //! Occurs when a client toggles its urgent status. + /*! + The Client::urgent method can be used to get the status. + */ + UrgentWindow +#if ! (defined(DOXYGEN_IGNORE) || defined(SWIG)) + , NUM_EVENT_ACTION +#endif + }; }; class MouseData { @@ -74,8 +133,8 @@ public: Time time; unsigned int state; unsigned int button; - MouseContext context; - MouseAction action; + MouseContext::MC context; + MouseAction::MA action; int xroot; int yroot; int pressx; @@ -86,9 +145,9 @@ public: 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) { + 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; @@ -106,7 +165,8 @@ public: this->press_clientheight = initarea.height(); } MouseData(int screen, Client *client, Time time, unsigned int state, - unsigned int button, MouseContext context, MouseAction action) { + unsigned int button, MouseContext::MC context, + MouseAction::MA action) { this->screen = screen; this->client = client; this->time = time; @@ -130,9 +190,9 @@ public: int screen; Client *client; unsigned int state; - EventAction action; + EventAction::EA action; - EventData(int screen, Client *client, EventAction action, + EventData(int screen, Client *client, EventAction::EA action, unsigned int state) { this->screen = screen; this->client = client; @@ -147,21 +207,26 @@ public: Client *client; Time time; unsigned int state; - std::string key; - EventAction action; // this is here so that all the Data structs have .action + char *key; + KeyAction::KA action; KeyData(int screen, Client *client, Time time, unsigned int state, - unsigned int key) { + 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 = EventKey; + this->action = action; } }; +// The void*'s will be used to hold the native language's function pointer +typedef void (*MouseCallback)(MouseData*, void*); +typedef void (*KeyCallback)(KeyData*, void*); +typedef void (*EventCallback)(EventData*, void*); + #ifndef SWIG void python_init(char *argv0); @@ -172,27 +237,8 @@ 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); }