X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Factions.h;h=2cafa3063ddfcbf0e6e9f0267b1282f62d671ac1;hb=314c0566371d83305d723c883884555a24cc0ad8;hp=cb1d377f70d9213d8a6534f001d9c48277099364;hpb=e5b94e6072287d39a777a3cedd0f10a66c58a2b5;p=chaz%2Fopenbox diff --git a/openbox/actions.h b/openbox/actions.h index cb1d377f..2cafa306 100644 --- a/openbox/actions.h +++ b/openbox/actions.h @@ -20,8 +20,11 @@ #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; @@ -34,13 +37,11 @@ typedef enum { OB_NUM_ACTIONS_INTERACTIVE_STATES } ObActionsInteractiveState; -typedef gpointer (*ObActionsDataSetupFunc)(); -typedef void (*ObActionsDataParseFunc)(gpointer action_data, - ObParseInst *i, +typedef gpointer (*ObActionsDataSetupFunc)(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -typedef void (*ObActionsDataFreeFunc)(gpointer action_data); -typedef void (*ObActionsRunFunc)(ObActionsAnyData *data, - gpointer action_data); +typedef void (*ObActionsDataFreeFunc)(gpointer options); +typedef void (*ObActionsRunFunc)(ObActionsData *data, + gpointer options); /* The theory goes: @@ -50,21 +51,30 @@ typedef void (*ObActionsRunFunc)(ObActionsAnyData *data, 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 { ObUserAction uact; + Time time; + guint state; + guint button; gint x; gint y; - gint button; - Time time; - - ObActionsInteractiveState interactive; }; struct _ObActionsGlobalData { + ObActionsType type; ObActionsAnyData any; }; struct _ObActionsClientData { + ObActionsType type; ObActionsAnyData any; struct _ObClient *c; @@ -72,17 +82,49 @@ struct _ObActionsClientData { }; 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); gboolean actions_register(const gchar *name, - gboolean interactive, + ObActionsType type, ObActionsDataSetupFunc setup, - ObActionsDataParseFunc parse, ObActionsDataFreeFunc free, ObActionsRunFunc run); + +ObActionsAct* actions_parse(ObParseInst *i, + xmlDocPtr doc, + xmlNodePtr node); +ObActionsAct* actions_parse_string(const gchar *name); + +void actions_act_ref(ObActionsAct *act); +void actions_act_unref(ObActionsAct *act); + +/*! 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, + ObFrameContext con, + struct _ObClient *client, + ObActionsInteractiveState interactive);