X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Factions.h;h=2cafa3063ddfcbf0e6e9f0267b1282f62d671ac1;hb=314c0566371d83305d723c883884555a24cc0ad8;hp=e2a8499f2b39b33809e54c571542ac9b02958195;hpb=e5cc6c82520a0d4828394f5edddded77292f22ce;p=chaz%2Fopenbox diff --git a/openbox/actions.h b/openbox/actions.h index e2a8499f..2cafa306 100644 --- a/openbox/actions.h +++ b/openbox/actions.h @@ -16,6 +16,20 @@ See the COPYING file for a copy of the GNU General Public License. */ +#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 enum { OB_ACTION_DONE, OB_ACTION_CANCELLED, @@ -23,58 +37,94 @@ 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); +typedef void (*ObActionsDataFreeFunc)(gpointer options); +typedef void (*ObActionsRunFunc)(ObActionsData *data, + gpointer options); -struct _ObActionsDefinition { - gchar *name; - gboolean interactive; +/* + The theory goes: - ObActionsDataSetupFunc setup; - ObActionsDataParseFunc parse; - ObActionsDataFreeFunc free; - ObActionsRunFunc run; -}; + 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 { ObUserAction uact; + Time time; + guint state; + guint button; gint x; gint y; - gint button; - Time time; - - ObActionsInteractiveState interactive; - - gpointer action_data; }; struct _ObActionsGlobalData { - ObActionsData any; + ObActionsType type; + ObActionsAnyData any; }; struct _ObActionsClientData { - ObActionsData any; + ObActionsType type; + ObActionsAnyData any; struct _ObClient *c; ObFrameContext context; }; struct _ObActionsSelectorData { - ObActionsData any; + 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);