See the COPYING file for a copy of the GNU General Public License.
*/
-typedef enum {
- OB_ACTION_DONE,
- OB_ACTION_CANCELLED,
- OB_ACTION_INTERACTING,
- OB_NUM_ACTIONS_INTERACTIVE_STATES
-} ObActionsInteractiveState;
-
-typedef gpointer (*ObActionsDataSetupFunc)();
-typedef void (*ObActionsDataParseFunc)(gpointer action_data,
- ObParseInst *i,
+#include "misc.h"
+#include "frame.h"
+#include "parser/parse.h"
+#include <glib.h>
+#include <X11/Xlib.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 gpointer (*ObActionsDataSetupFunc)(ObParseInst *i,
xmlDocPtr doc, xmlNodePtr node);
-typedef void (*ObActionsDataFreeFunc)(gpointer action_data);
-typedef void (*ObActionsRunFunc)(ObActionsAnyData *data);
-
-struct _ObActionsDefinition {
- gchar *name;
- gboolean interactive;
-
- ObActionsDataSetupFunc setup;
- ObActionsDataParseFunc parse;
- ObActionsDataFreeFunc free;
- ObActionsRunFunc run;
-};
-
-struct _ObActionsAnyData {
+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);
+
+struct _ObActionsData {
ObUserAction uact;
+ guint state;
gint x;
gint y;
gint button;
- Time time;
-
- ObActionsInteractiveState interactive;
-
- gpointer action_data;
-};
-
-struct _ObActionsGlobalData {
- ObActionsData any;
-};
-struct _ObActionsClientData {
- ObActionsData any;
-
- struct _ObClient *c;
+ struct _ObClient *client;
ObFrameContext context;
};
-struct _ObActionsSelectorData {
- ObActionsData any;
-
- GSList *actions;
-};
-
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,
- gboolean interactive,
ObActionsDataSetupFunc setup,
- ObActionsDataParseFunc parse,
ObActionsDataFreeFunc free,
- ObActionsRunFunc run);
+ ObActionsRunFunc run,
+ ObActionsInteractiveInputFunc i_input,
+ ObActionsInteractiveCancelFunc i_cancel);
+
+ObActionsAct* actions_parse(ObParseInst *i,
+ xmlDocPtr doc,
+ 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.
+ @return TRUE if an action is in interactive state, FALSE is none are
+*/
+void actions_run_acts(GSList *acts,
+ ObUserAction uact,
+ guint state,
+ gint x,
+ gint y,
+ gint button,
+ ObFrameContext con,
+ 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);