From 9dacac5e5e6b9ed86e76680b048bc227d8866ac6 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Fri, 22 Jun 2007 03:45:53 +0000 Subject: [PATCH] added the debug action --- Makefile.am | 1 + openbox/action.c | 18 ------------- openbox/actions.c | 11 +++++--- openbox/actions/all.c | 1 + openbox/actions/all.h | 1 + openbox/actions/debug.c | 58 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 68 insertions(+), 22 deletions(-) create mode 100644 openbox/actions/debug.c diff --git a/Makefile.am b/Makefile.am index 222eefd3..c7335588 100644 --- a/Makefile.am +++ b/Makefile.am @@ -156,6 +156,7 @@ openbox_openbox_SOURCES = \ gettext.h \ openbox/actions/all.c \ openbox/actions/all.h \ + openbox/actions/debug.c \ openbox/actions/execute.c \ openbox/actions.c \ openbox/actions.h \ diff --git a/openbox/action.c b/openbox/action.c index df3037da..d706e370 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -1005,24 +1005,6 @@ ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, if (parse_attr_string("name", node, &actname)) { if ((act = action_from_string(actname, uact))) { - if (act->func == action_execute || act->func == action_restart) { - if ((n = parse_find_node("execute", node->xmlChildrenNode))) { - gchar *s = parse_string(doc, n); - act->data.execute.path = parse_expand_tilde(s); - g_free(s); - } - if ((n = parse_find_node("startupnotify", node->xmlChildrenNode))) { - xmlNodePtr m; - if ((m = parse_find_node("enabled", n->xmlChildrenNode))) - act->data.execute.startupnotify = parse_bool(doc, m); - if ((m = parse_find_node("name", n->xmlChildrenNode))) - act->data.execute.name = parse_string(doc, m); - if ((m = parse_find_node("icon", n->xmlChildrenNode))) - act->data.execute.icon_name = parse_string(doc, m); - } - } else if (act->func == action_debug) { - if ((n = parse_find_node("string", node->xmlChildrenNode))) - act->data.debug.string = parse_string(doc, n); } else if (act->func == action_showmenu) { if ((n = parse_find_node("menu", node->xmlChildrenNode))) act->data.showmenu.name = parse_string(doc, n); diff --git a/openbox/actions.c b/openbox/actions.c index 44a39cb5..9a5d193c 100644 --- a/openbox/actions.c +++ b/openbox/actions.c @@ -83,14 +83,15 @@ gboolean actions_register(const gchar *name, GSList *it; ObActionsDefinition *def; + g_assert(run != NULL); + g_assert((i_input == NULL) == (i_cancel == NULL)); + for (it = registered; it; it = g_slist_next(it)) { def = it->data; if (!g_ascii_strcasecmp(name, def->name)) /* already registered */ return FALSE; } - g_assert((i_input == NULL) == (i_cancel == NULL)); - def = g_new(ObActionsDefinition, 1); def->ref = 1; def->name = g_strdup(name); @@ -156,7 +157,8 @@ ObActionsAct* actions_parse(ObParseInst *i, if (parse_attr_string("name", node, &name)) { if ((act = actions_parse_string(name))) /* there is more stuff to parse here */ - act->options = act->def->setup(i, doc, node->xmlChildrenNode); + if (act->def->setup) + act->options = act->def->setup(i, doc, node->xmlChildrenNode); g_free(name); } @@ -178,7 +180,8 @@ void actions_act_unref(ObActionsAct *act) { if (act && --act->ref == 0) { /* free the action specific options */ - act->def->free(act->options); + if (act->def->free) + act->def->free(act->options); /* unref the definition */ actions_definition_unref(act->def); g_free(act); diff --git a/openbox/actions/all.c b/openbox/actions/all.c index 7c0b253e..09eae59a 100644 --- a/openbox/actions/all.c +++ b/openbox/actions/all.c @@ -3,4 +3,5 @@ void action_all_startup() { action_execute_startup(); + action_debug_startup(); } diff --git a/openbox/actions/all.h b/openbox/actions/all.h index 599c29fc..b93f140a 100644 --- a/openbox/actions/all.h +++ b/openbox/actions/all.h @@ -4,5 +4,6 @@ void action_all_startup(); void action_execute_startup(); +void action_debug_startup(); #endif diff --git a/openbox/actions/debug.c b/openbox/actions/debug.c new file mode 100644 index 00000000..f219e059 --- /dev/null +++ b/openbox/actions/debug.c @@ -0,0 +1,58 @@ +#include "openbox/actions.h" +#include + +typedef struct { + gchar *str; +} Options; + +static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); +static void free_func(gpointer options); +static gboolean run_func(ObActionsData *data, gpointer options); +/* +static gboolean i_input_func(guint initial_state, + XEvent *e, + gpointer options, + gboolean *used); +static void i_cancel_func(gpointer options); +*/ + +void action_debug_startup() +{ + actions_register("Debug", + setup_func, + free_func, + run_func, + NULL, NULL); +} + +static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +{ + xmlNodePtr n; + Options *o; + + o = g_new0(Options, 1); + + if ((n = parse_find_node("string", node))) + o->str = parse_string(doc, n); + return o; +} + +static void free_func(gpointer options) +{ + Options *o = options; + + if (o) { + g_free(o->str); + g_free(o); + } +} + +/* Always return FALSE because its not interactive */ +static gboolean run_func(ObActionsData *data, gpointer options) +{ + Options *o = options; + + if (o->str) g_print("%s\n", o->str); + + return FALSE; +} -- 2.45.2