+/* -*- 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);
+ }
+}