See the COPYING file for a copy of the GNU General Public License.
*/
+#include "misc.h"
+#include "frame.h"
+#include "parser/parse.h"
+#include <glib.h>
+
+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,
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;
struct _ObActionsAnyData {
ObUserAction uact;
Time time;
ObActionsInteractiveState interactive;
-
- gpointer action_data;
};
struct _ObActionsGlobalData {
- ObActionsData any;
+ ObActionsAnyData any;
};
struct _ObActionsClientData {
- ObActionsData any;
+ ObActionsAnyData any;
struct _ObClient *c;
ObFrameContext context;
};
struct _ObActionsSelectorData {
- ObActionsData any;
+ ObActionsAnyData any;
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,
+ gboolean allow_interactive,
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);