]> Dogcows Code - chaz/openbox/blobdiff - openbox/actions.h
Merge branch 'master' into chaz
[chaz/openbox] / openbox / actions.h
index cb1d377f70d9213d8a6534f001d9c48277099364..f8e1ba83c42d867b2ad6ad10df18b4096f7b7c65 100644 (file)
 
 #include "misc.h"
 #include "frame.h"
-#include "parser/parse.h"
+#include "obt/xml.h"
+#include "obt/keyboard.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 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,
-                                           xmlDocPtr doc, xmlNodePtr node);
-typedef void     (*ObActionsDataFreeFunc)(gpointer action_data);
-typedef void     (*ObActionsRunFunc)(ObActionsAnyData *data,
-                                     gpointer action_data);
-
-/*
-  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
-*/
-
-struct _ObActionsAnyData {
+typedef void     (*ObActionsDataFreeFunc)(gpointer options);
+typedef gboolean (*ObActionsRunFunc)(ObActionsData *data,
+                                     gpointer options);
+typedef gpointer (*ObActionsDataSetupFunc)(xmlNodePtr node);
+typedef void     (*ObActionsShutdownFunc)(void);
+
+/* functions for interactive actions */
+/* return TRUE if the action is going to be interactive, or false to change
+   your mind and make it not */
+typedef gboolean (*ObActionsIPreFunc)(guint initial_state, gpointer options);
+typedef void     (*ObActionsIPostFunc)(gpointer options);
+typedef gboolean (*ObActionsIInputFunc)(guint initial_state,
+                                        XEvent *e,
+                                        ObtIC *ic,
+                                        gpointer options,
+                                        gboolean *used);
+typedef void     (*ObActionsICancelFunc)(gpointer options);
+typedef gpointer (*ObActionsIDataSetupFunc)(xmlNodePtr node,
+                                            ObActionsIPreFunc *pre,
+                                            ObActionsIInputFunc *input,
+                                            ObActionsICancelFunc *cancel,
+                                            ObActionsIPostFunc *post);
+
+struct _ObActionsData {
     ObUserAction uact;
+    guint state;
     gint x;
     gint y;
     gint button;
-    Time time;
-
-    ObActionsInteractiveState interactive;
-};
 
-struct _ObActionsGlobalData {
-    ObActionsAnyData any;
-};
-
-struct _ObActionsClientData {
-    ObActionsAnyData any;
-
-    struct _ObClient *c;
+    struct _ObClient *client;
     ObFrameContext context;
 };
 
-struct _ObActionsSelectorData {
-    ObActionsAnyData any;
-
-    GSList *actions;
-};
-
 void actions_startup(gboolean reconfigure);
 void actions_shutdown(gboolean reconfigure);
 
+/*! Use this if the actions created from this name may be interactive */
+gboolean actions_register_i(const gchar *name,
+                            ObActionsIDataSetupFunc setup,
+                            ObActionsDataFreeFunc free,
+                            ObActionsRunFunc run);
+
 gboolean actions_register(const gchar *name,
-                          gboolean interactive,
                           ObActionsDataSetupFunc setup,
-                          ObActionsDataParseFunc parse,
                           ObActionsDataFreeFunc free,
                           ObActionsRunFunc run);
+
+gboolean actions_set_shutdown(const gchar *name,
+                              ObActionsShutdownFunc shutdown);
+gboolean actions_set_modifies_focused_window(const gchar *name,
+                                             gboolean modifies);
+gboolean actions_set_can_stop(const gchar *name,
+                              gboolean modifies);
+
+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);
+
+/*! 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(void);
+
+/*! Pass in a GSList of ObActionsAct's to be run. */
+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);
+void actions_interactive_cancel_act(void);
+
+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);
This page took 0.02955 seconds and 4 git commands to generate.