X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Factions.h;h=f8e1ba83c42d867b2ad6ad10df18b4096f7b7c65;hb=HEAD;hp=7975d4ebd1f1996f5b61613e3581b942b9bdd5e4;hpb=0dc7eca4cdfff6425e19a0bace0f9ae8834d04e8;p=chaz%2Fopenbox diff --git a/openbox/actions.h b/openbox/actions.h index 7975d4eb..f8e1ba83 100644 --- a/openbox/actions.h +++ b/openbox/actions.h @@ -18,7 +18,8 @@ #include "misc.h" #include "frame.h" -#include "obt/parse.h" +#include "obt/xml.h" +#include "obt/keyboard.h" #include #include @@ -31,15 +32,28 @@ typedef struct _ObActionsGlobalData ObActionsGlobalData; typedef struct _ObActionsClientData ObActionsClientData; typedef struct _ObActionsSelectorData ObActionsSelectorData; -typedef gpointer (*ObActionsDataSetupFunc)(xmlNodePtr node); 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); +typedef gpointer (*ObActionsDataSetupFunc)(xmlNodePtr node); +typedef void (*ObActionsShutdownFunc)(void); + +/* functions for interactive actions */ +/* return TRUE if the action is going to be interactive, or false to change + your mind and make it not */ +typedef gboolean (*ObActionsIPreFunc)(guint initial_state, gpointer options); +typedef void (*ObActionsIPostFunc)(gpointer options); +typedef gboolean (*ObActionsIInputFunc)(guint initial_state, + XEvent *e, + ObtIC *ic, + gpointer options, + gboolean *used); +typedef void (*ObActionsICancelFunc)(gpointer options); +typedef gpointer (*ObActionsIDataSetupFunc)(xmlNodePtr node, + ObActionsIPreFunc *pre, + ObActionsIInputFunc *input, + ObActionsICancelFunc *cancel, + ObActionsIPostFunc *post); struct _ObActionsData { ObUserAction uact; @@ -55,14 +69,23 @@ struct _ObActionsData { 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. */ +/*! Use this if the actions created from this name may be interactive */ +gboolean actions_register_i(const gchar *name, + ObActionsIDataSetupFunc setup, + ObActionsDataFreeFunc free, + ObActionsRunFunc run); + gboolean actions_register(const gchar *name, ObActionsDataSetupFunc setup, ObActionsDataFreeFunc free, - ObActionsRunFunc run, - ObActionsInteractiveInputFunc i_input, - ObActionsInteractiveCancelFunc i_cancel); + ObActionsRunFunc run); + +gboolean actions_set_shutdown(const gchar *name, + ObActionsShutdownFunc shutdown); +gboolean actions_set_modifies_focused_window(const gchar *name, + gboolean modifies); +gboolean actions_set_can_stop(const gchar *name, + gboolean modifies); ObActionsAct* actions_parse(xmlNodePtr node); ObActionsAct* actions_parse_string(const gchar *name); @@ -79,7 +102,7 @@ void actions_act_unref(ObActionsAct *act); 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(); +gboolean actions_get_need_pointer_replay_before_move(void); /*! Pass in a GSList of ObActionsAct's to be run. */ void actions_run_acts(GSList *acts, @@ -91,8 +114,8 @@ void actions_run_acts(GSList *acts, ObFrameContext con, struct _ObClient *client); -gboolean actions_interactive_act_running(); -void actions_interactive_cancel_act(); +gboolean actions_interactive_act_running(void); +void actions_interactive_cancel_act(void); gboolean actions_interactive_input_event(XEvent *e);