X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Factions.h;h=7975d4ebd1f1996f5b61613e3581b942b9bdd5e4;hb=3167fc223ea82851ae954b348a5ff1c0ce6b6d79;hp=2cafa3063ddfcbf0e6e9f0267b1282f62d671ac1;hpb=314c0566371d83305d723c883884555a24cc0ad8;p=chaz%2Fopenbox diff --git a/openbox/actions.h b/openbox/actions.h index 2cafa306..7975d4eb 100644 --- a/openbox/actions.h +++ b/openbox/actions.h @@ -18,7 +18,8 @@ #include "misc.h" #include "frame.h" -#include "parser/parse.h" +#include "obt/parse.h" + #include #include @@ -30,101 +31,70 @@ typedef struct _ObActionsGlobalData ObActionsGlobalData; typedef struct _ObActionsClientData ObActionsClientData; typedef struct _ObActionsSelectorData ObActionsSelectorData; -typedef enum { - OB_ACTION_DONE, - OB_ACTION_CANCELLED, - OB_ACTION_INTERACTING, - OB_NUM_ACTIONS_INTERACTIVE_STATES -} ObActionsInteractiveState; - -typedef gpointer (*ObActionsDataSetupFunc)(ObParseInst *i, - xmlDocPtr doc, xmlNodePtr node); +typedef gpointer (*ObActionsDataSetupFunc)(xmlNodePtr node); typedef void (*ObActionsDataFreeFunc)(gpointer options); -typedef void (*ObActionsRunFunc)(ObActionsData *data, +typedef gboolean (*ObActionsRunFunc)(ObActionsData *data, gpointer options); +typedef gboolean (*ObActionsInteractiveInputFunc)(guint initial_state, + XEvent *e, + gpointer options, + gboolean *used); +typedef void (*ObActionsInteractiveCancelFunc)(gpointer options); -/* - The theory goes: - - 06:10 (@dana) hm i think there are 3 types of actions - 06:10 (@dana) global actions, window actions, and selector actions - 06:11 (@dana) eg show menu/exit, raise/focus, and cycling/directional/expose -*/ - -typedef enum { - OB_ACTION_TYPE_GLOBAL, - OB_ACTION_TYPE_CLIENT, - OB_ACTION_TYPE_SELECTOR -} ObActionsType; - -/* These structures are all castable as eachother */ - -struct _ObActionsAnyData { +struct _ObActionsData { ObUserAction uact; - Time time; guint state; - guint button; gint x; gint y; -}; - -struct _ObActionsGlobalData { - ObActionsType type; - ObActionsAnyData any; -}; - -struct _ObActionsClientData { - ObActionsType type; - ObActionsAnyData any; + gint button; - struct _ObClient *c; + struct _ObClient *client; ObFrameContext context; }; -struct _ObActionsSelectorData { - ObActionsType type; - ObActionsAnyData any; - - ObActionsInteractiveState interactive; - GSList *actions; -}; - -struct _ObActionsData { - ObActionsType type; - - union { - ObActionsAnyData any; - ObActionsGlobalData global; - ObActionsClientData client; - ObActionsSelectorData selector; - }; -}; - 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, - ObActionsType type, ObActionsDataSetupFunc setup, ObActionsDataFreeFunc free, - ObActionsRunFunc run); + ObActionsRunFunc run, + ObActionsInteractiveInputFunc i_input, + ObActionsInteractiveCancelFunc i_cancel); -ObActionsAct* actions_parse(ObParseInst *i, - xmlDocPtr doc, - xmlNodePtr node); +ObActionsAct* actions_parse(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); -/*! Pass in a GSList of ObActionsAct's to be run */ +/*! 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, - Time time, guint state, - guint button, gint x, gint y, + gint button, ObFrameContext con, - struct _ObClient *client, - ObActionsInteractiveState interactive); + 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);