]> Dogcows Code - chaz/openbox/blobdiff - openbox/actions.h
make mouse use the new action stuff
[chaz/openbox] / openbox / actions.h
index e2a8499f2b39b33809e54c571542ac9b02958195..2cafa3063ddfcbf0e6e9f0267b1282f62d671ac1 100644 (file)
    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>
+#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,
@@ -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);
This page took 0.027186 seconds and 4 git commands to generate.