X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Factions.h;h=6db6f8d666f6bca878f38f3bc8be60c835b6bee5;hb=746859c1017e9cdf73eb91470e795f0c4b98b21a;hp=e2a8499f2b39b33809e54c571542ac9b02958195;hpb=e5cc6c82520a0d4828394f5edddded77292f22ce;p=chaz%2Fopenbox diff --git a/openbox/actions.h b/openbox/actions.h index e2a8499f..6db6f8d6 100644 --- a/openbox/actions.h +++ b/openbox/actions.h @@ -16,65 +16,87 @@ See the COPYING file for a copy of the GNU General Public License. */ -typedef enum { - OB_ACTION_DONE, - OB_ACTION_CANCELLED, - OB_ACTION_INTERACTING, - OB_NUM_ACTIONS_INTERACTIVE_STATES -} ObActionsInteractiveState; - -typedef gpointer (*ObActionsDataSetupFunc)(); -typedef void (*ObActionsDataParseFunc)(gpointer action_data, - ObParseInst *i, +#include "misc.h" +#include "frame.h" +#include "parser/parse.h" +#include +#include + +typedef struct _ObActionsDefinition ObActionsDefinition; +typedef struct _ObActionsAct ObActionsAct; +typedef struct _ObActionsData ObActionsData; +typedef struct _ObActionsAnyData ObActionsAnyData; +typedef struct _ObActionsGlobalData ObActionsGlobalData; +typedef struct _ObActionsClientData ObActionsClientData; +typedef struct _ObActionsSelectorData ObActionsSelectorData; + +typedef gpointer (*ObActionsDataSetupFunc)(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -typedef void (*ObActionsDataFreeFunc)(gpointer action_data); -typedef void (*ObActionsRunFunc)(ObActionsAnyData *data); - -struct _ObActionsDefinition { - gchar *name; - gboolean interactive; - - ObActionsDataSetupFunc setup; - ObActionsDataParseFunc parse; - ObActionsDataFreeFunc free; - ObActionsRunFunc run; -}; - -struct _ObActionsAnyData { +typedef void (*ObActionsDataFreeFunc)(gpointer options); +typedef gboolean (*ObActionsRunFunc)(ObActionsData *data, + gpointer options); +typedef gboolean (*ObActionsInteractiveInputFunc)(guint initial_state, + XEvent *e, + gpointer options, + gboolean *used); +typedef void (*ObActionsInteractiveCancelFunc)(gpointer options); + +struct _ObActionsData { ObUserAction uact; + guint state; gint x; gint y; gint button; - Time time; - - ObActionsInteractiveState interactive; - - gpointer action_data; -}; - -struct _ObActionsGlobalData { - ObActionsData any; -}; -struct _ObActionsClientData { - ObActionsData any; - - struct _ObClient *c; + struct _ObClient *client; ObFrameContext context; }; -struct _ObActionsSelectorData { - ObActionsData any; - - GSList *actions; -}; - void actions_startup(gboolean reconfigure); void actions_shutdown(gboolean reconfigure); +/*! If the action is interactive, then i_input and i_cancel are not NULL. + Otherwise, they should both be NULL. */ gboolean actions_register(const gchar *name, - gboolean interactive, ObActionsDataSetupFunc setup, - ObActionsDataParseFunc parse, ObActionsDataFreeFunc free, - ObActionsRunFunc run); + ObActionsRunFunc run, + ObActionsInteractiveInputFunc i_input, + ObActionsInteractiveCancelFunc i_cancel); + +ObActionsAct* actions_parse(ObParseInst *i, + xmlDocPtr doc, + xmlNodePtr node); +ObActionsAct* actions_parse_string(const gchar *name); + +gboolean actions_act_is_interactive(ObActionsAct *act); + +void actions_act_ref(ObActionsAct *act); +void actions_act_unref(ObActionsAct *act); + +/*! When this is true, an XAllowEvents with ReplayPointer will be called + if an action is going to maybe try moving windows around on screen (or + map/unmap windows) +*/ +void actions_set_need_pointer_replay_before_move(gboolean replay); +/*! Returns if a ReplayPointer is still needed. If it was called while running + actions then this will be false */ +gboolean actions_get_need_pointer_replay_before_move(); + +/*! Pass in a GSList of ObActionsAct's to be run. */ +void actions_run_acts(GSList *acts, + ObUserAction uact, + guint state, + gint x, + gint y, + gint button, + ObFrameContext con, + struct _ObClient *client); + +gboolean actions_interactive_act_running(); +void actions_interactive_cancel_act(); + +gboolean actions_interactive_input_event(XEvent *e); + +/*! Function for actions to call when they are moving a client around */ +void actions_client_move(ObActionsData *data, gboolean start);