]> Dogcows Code - chaz/openbox/commitdiff
some first structural stuff for new actions
authorDana Jansens <danakj@orodu.net>
Thu, 21 Jun 2007 22:50:16 +0000 (22:50 +0000)
committerDana Jansens <danakj@orodu.net>
Thu, 21 Jun 2007 22:50:16 +0000 (22:50 +0000)
Makefile.am
openbox/actions.c [new file with mode: 0644]
openbox/actions.h
openbox/openbox.c

index dbecc4346bd3b59c64242ea4afabb5f50b43b2ca..230862a9f20e37dbfc3707c1a6b18cc9f3f34e97 100644 (file)
@@ -156,6 +156,8 @@ openbox_openbox_SOURCES = \
        gettext.h \
        openbox/action.c \
        openbox/action.h \
+       openbox/actions.c \
+       openbox/actions.h \
        openbox/client.c \
        openbox/client.h \
        openbox/client_list_menu.c \
diff --git a/openbox/actions.c b/openbox/actions.c
new file mode 100644 (file)
index 0000000..48778fa
--- /dev/null
@@ -0,0 +1,88 @@
+/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
+
+   actions.h for the Openbox window manager
+   Copyright (c) 2007        Dana Jansens
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   See the COPYING file for a copy of the GNU General Public License.
+*/
+
+#include "actions.h"
+
+static void actions_unregister(ObActionsDefinition *def);
+
+struct _ObActionsDefinition {
+    gchar *name;
+    gboolean interactive;
+
+    ObActionsDataParseFunc parse;
+    ObActionsDataFreeFunc free;
+    ObActionsRunFunc run;
+
+    gpointer action_data;
+};
+
+static GSList *registered = NULL;
+
+
+void actions_startup(gboolean reconfig)
+{
+    if (reconfig) return;
+
+    
+}
+
+void actions_shutdown(gboolean reconfig)
+{
+    if (reconfig) return;
+
+    /* free all the registered actions */
+    while (registered) {
+        actions_unregister(registered->data);
+        registered = g_slist_delete_link(registered, registered);
+    }
+}
+
+gboolean actions_register(const gchar *name,
+                          gboolean interactive,
+                          ObActionsDataSetupFunc setup,
+                          ObActionsDataParseFunc parse,
+                          ObActionsDataFreeFunc free,
+                          ObActionsRunFunc run)
+{
+    GSList *it;
+    ObActionsDefinition *def;
+
+    for (it = registered; it; it = g_slist_next(it)) {
+        def = it->data;
+        if (!g_ascii_strcasecmp(name, def->name)) /* already registered */
+            return FALSE;
+    }
+
+    def = g_new(ObActionsDefinition, 1);
+    def->name = g_strdup(name);
+    def->interactive = interactive;
+    def->parse = parse;
+    def->free = free;
+    def->run = run;
+    def->action_data = setup();
+    return TRUE;
+}
+
+static void actions_unregister(ObActionsDefinition *def)
+{
+    if (def) {
+        def->free(def->action_data);
+        g_free(def->name);
+        g_free(def);
+    }
+}
index e2a8499f2b39b33809e54c571542ac9b02958195..cb1d377f70d9213d8a6534f001d9c48277099364 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>
+
+typedef struct _ObActionsDefinition   ObActionsDefinition;
+typedef struct _ObActionsAnyData      ObActionsAnyData;
+typedef struct _ObActionsGlobalData   ObActionsGlobalData;
+typedef struct _ObActionsClientData   ObActionsClientData;
+typedef struct _ObActionsSelectorData ObActionsSelectorData;
+
 typedef enum {
     OB_ACTION_DONE,
     OB_ACTION_CANCELLED,
@@ -28,17 +39,16 @@ typedef void     (*ObActionsDataParseFunc)(gpointer action_data,
                                            ObParseInst *i,
                                            xmlDocPtr doc, xmlNodePtr node);
 typedef void     (*ObActionsDataFreeFunc)(gpointer action_data);
-typedef void     (*ObActionsRunFunc)(ObActionsAnyData *data);
+typedef void     (*ObActionsRunFunc)(ObActionsAnyData *data,
+                                     gpointer action_data);
 
-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
+*/
 
 struct _ObActionsAnyData {
     ObUserAction uact;
@@ -48,23 +58,21 @@ struct _ObActionsAnyData {
     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;
 };
index ae1232fa7ac10e0e6e6cc96bde3a2a5ea6eda54d..db14afb099731a00aabea13e04d544f9215bfa4b 100644 (file)
@@ -28,6 +28,7 @@
 #include "xerror.h"
 #include "prop.h"
 #include "screen.h"
+#include "actions.h"
 #include "startupnotify.h"
 #include "focus.h"
 #include "focus_cycle.h"
@@ -241,6 +242,8 @@ gint main(gint argc, gchar **argv)
 
                 /* start up config which sets up with the parser */
                 config_startup(i);
+                /* register all the available actions */
+                actions_startup(reconfigure);
 
                 /* parse/load user options */
                 if (parse_load_rc(NULL, &doc, &node)) {
@@ -373,6 +376,7 @@ gint main(gint argc, gchar **argv)
             sn_shutdown(reconfigure);
             window_shutdown(reconfigure);
             event_shutdown(reconfigure);
+            actions_shutdown(reconfigure);
             config_shutdown();
             modkeys_shutdown(reconfigure);
         } while (reconfigure);
This page took 0.027939 seconds and 4 git commands to generate.