diff options
| author | Dana Jansens <danakj@orodu.net> | 2007-07-27 01:37:28 -0400 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2008-01-20 01:36:55 -0500 |
| commit | fdabb69f4f25596df972caa76c85c2aeba26226e (patch) | |
| tree | 2566f1a229a65e54cdffd88a255301d0bf7fa3a7 | |
| parent | 0667bbc3e2fbd3fa39206e843560735524840d35 (diff) | |
update openbox to use the current parser interface in libobt
there is also some random bug fixes for other libobt stuff in here.
38 files changed, 640 insertions, 1415 deletions
diff --git a/Makefile.am b/Makefile.am index 483f2d42..ed68b185 100644 --- a/Makefile.am +++ b/Makefile.am @@ -24,7 +24,6 @@ check_PROGRAMS = \ render/rendertest lib_LTLIBRARIES = \ - parser/libobparser.la \ render/libobrender.la \ obt/libobt.la @@ -45,7 +44,7 @@ render_rendertest_CPPFLAGS = \ $(GLIB_CFLAGS) \ -DG_LOG_DOMAIN=\"RenderTest\" render_rendertest_LDADD = \ - parser/libobparser.la \ + obt/libobt.la \ render/libobrender.la \ $(GLIB_LIBS) \ $(PANGO_LIBS) \ @@ -65,7 +64,7 @@ render_libobrender_la_CPPFLAGS = \ render_libobrender_la_LDFLAGS = \ -version-info $(RR_CURRENT):$(RR_REVISION):$(RR_AGE) render_libobrender_la_LIBADD = \ - parser/libobparser.la \ + obt/libobt.la \ $(X_LIBS) \ $(PANGO_LIBS) \ $(XFT_LIBS) \ @@ -92,24 +91,6 @@ render_libobrender_la_SOURCES = \ render/theme.h \ render/theme.c -## parser ## - -parser_libobparser_la_CPPFLAGS = \ - $(GLIB_CFLAGS) \ - $(XML_CFLAGS) \ - -DG_LOG_DOMAIN=\"ObParser\" \ - -DLOCALEDIR=\"$(localedir)\" \ - -DDATADIR=\"$(datadir)\" \ - -DCONFIGDIR=\"$(configdir)\" -parser_libobparser_la_LDFLAGS = \ - -version-info $(RR_CURRENT):$(RR_REVISION):$(RR_AGE) -parser_libobparser_la_LIBADD = \ - $(GLIB_LIBS) \ - $(XML_LIBS) -parser_libobparser_la_SOURCES = \ - parser/parse.h \ - parser/parse.c - ## obt ## obt_libobt_la_CPPFLAGS = \ @@ -173,7 +154,6 @@ openbox_openbox_LDADD = \ $(EFENCE_LIBS) \ $(LIBINTL) \ render/libobrender.la \ - parser/libobparser.la \ obt/libobt.la openbox_openbox_LDFLAGS = -export-dynamic openbox_openbox_SOURCES = \ @@ -398,9 +378,16 @@ pubinclude_HEADERS = \ render/mask.h \ render/render.h \ render/theme.h \ - parser/parse.h \ obt/display.h \ + obt/display.c \ + obt/keyboard.h \ + obt/keyboard.c \ obt/mainloop.h \ + obt/mainloop.c \ + obt/parse.h \ + obt/parse.c \ + obt/prop.h \ + obt/prop.c \ obt/util.h nodist_pubinclude_HEADERS = \ @@ -408,7 +395,6 @@ nodist_pubinclude_HEADERS = \ nodist_pkgconfig_DATA = \ render/obrender-4.0.pc \ - parser/obparser-4.0.pc \ obt/obt-4.0.pc ## data ## @@ -469,7 +455,6 @@ dist_noinst_DATA = \ doc/openbox-kde-session.1.sgml \ doc/openbox-kde-session.1.in \ render/obrender-4.0.pc.in \ - parser/obparser-4.0.pc.in \ obt/obt-4.0.pc.in \ tools/themeupdate/themeupdate.py \ tests/hideshow.py \ diff --git a/configure.ac b/configure.ac index bfcff7a1..8e01ca14 100644 --- a/configure.ac +++ b/configure.ac @@ -179,7 +179,6 @@ AC_CONFIG_FILES([ m4/Makefile po/Makefile.in render/obrender-4.0.pc - parser/obparser-4.0.pc obt/obt-4.0.pc version.h ]) diff --git a/obt/parse.c b/obt/parse.c index 68b1b87f..61fe5b82 100644 --- a/obt/parse.c +++ b/obt/parse.c @@ -62,7 +62,7 @@ static void destfunc(struct Callback *c) g_free(c); } -ObtParseInst* obt_parse_instance_new() +ObtParseInst* obt_parse_instance_new(void) { ObtParseInst *i = g_new(ObtParseInst, 1); i->ref = 1; @@ -87,8 +87,20 @@ void obt_parse_instance_unref(ObtParseInst *i) } } -void parse_register(ObtParseInst *i, const gchar *tag, - ObtParseCallback func, gpointer data) +xmlDocPtr obt_parse_instance_doc(ObtParseInst *i) +{ + g_assert(i->doc); /* a doc is open? */ + return i->doc; +} + +xmlNodePtr obt_parse_instance_root(ObtParseInst *i) +{ + g_assert(i->doc); /* a doc is open? */ + return i->root; +} + +void obt_parse_register(ObtParseInst *i, const gchar *tag, + ObtParseCallback func, gpointer data) { struct Callback *c; @@ -119,7 +131,10 @@ static gboolean load_file(ObtParseInst *i, gchar *path; struct stat s; - path = g_build_filename(it->data, domain, filename, NULL); + if (!domain && !filename) /* given a full path to the file */ + path = g_strdup(it->data); + else + path = g_build_filename(it->data, domain, filename, NULL); if (stat(path, &s) >= 0) { /* XML_PARSE_BLANKS is needed apparently, or the tree can end up @@ -154,6 +169,24 @@ static gboolean load_file(ObtParseInst *i, return r; } +gboolean obt_parse_load_file(ObtParseInst *i, + const gchar *path, + const gchar *root_node) +{ + GSList *paths; + gboolean r; + + paths = g_slist_append(NULL, g_strdup(path)); + + r = load_file(i, NULL, NULL, root_node, paths); + + while (paths) { + g_free(paths->data); + paths = g_slist_delete_link(paths, paths); + } + return r; +} + gboolean obt_parse_load_config_file(ObtParseInst *i, const gchar *domain, const gchar *filename, @@ -266,7 +299,7 @@ void obt_parse_tree(ObtParseInst *i, xmlNodePtr node) while (node) { struct Callback *c = g_hash_table_lookup(i->callbacks, node->name); - if (c) c->func(i, i->doc, node, c->data); + if (c) c->func(node, c->data); node = node->next; } } @@ -415,7 +448,7 @@ static GSList* split_paths(const gchar *paths) return list; } -void parse_paths_startup() +void parse_paths_startup(void) { const gchar *path; @@ -477,7 +510,7 @@ void parse_paths_startup() (GSListFunc) g_slist_prepend); } -void parse_paths_shutdown() +void parse_paths_shutdown(void) { GSList *it; @@ -553,22 +586,22 @@ gboolean parse_mkdir_path(const gchar *path, gint mode) return ret; } -const gchar* parse_xdg_config_home_path() +const gchar* parse_xdg_config_home_path(void) { return xdg_config_home_path; } -const gchar* parse_xdg_data_home_path() +const gchar* parse_xdg_data_home_path(void) { return xdg_data_home_path; } -GSList* parse_xdg_config_dir_paths() +GSList* parse_xdg_config_dir_paths(void) { return xdg_config_dir_paths; } -GSList* parse_xdg_data_dir_paths() +GSList* parse_xdg_data_dir_paths(void) { return xdg_data_dir_paths; } diff --git a/obt/parse.h b/obt/parse.h index 09729a5a..3a541a0d 100644 --- a/obt/parse.h +++ b/obt/parse.h @@ -28,13 +28,15 @@ G_BEGIN_DECLS typedef struct _ObtParseInst ObtParseInst; -typedef void (*ObtParseCallback)(ObtParseInst *i, xmlDocPtr doc, - xmlNodePtr node, gpointer data); +typedef void (*ObtParseCallback)(xmlNodePtr node, gpointer data); ObtParseInst* obt_parse_instance_new(); void obt_parse_instance_ref(ObtParseInst *inst); void obt_parse_instance_unref(ObtParseInst *inst); +gboolean obt_parse_load_file(ObtParseInst *inst, + const gchar *path, + const gchar *root_node); gboolean obt_parse_load_config_file(ObtParseInst *inst, const gchar *domain, const gchar *filename, @@ -51,6 +53,9 @@ gboolean obt_parse_load_theme_file(ObtParseInst *inst, gboolean obt_parse_load_mem(ObtParseInst *inst, gpointer data, guint len, const gchar *root_node); +xmlDocPtr obt_parse_instance_doc(ObtParseInst *inst); +xmlNodePtr obt_parse_instance_root(ObtParseInst *inst); + void obt_parse_close(ObtParseInst *inst); void obt_parse_register(ObtParseInst *inst, const gchar *tag, @@ -60,7 +65,7 @@ void obt_parse_tree(ObtParseInst *i, xmlNodePtr node); /* helpers */ -xmlNodePtr obt_parse_find_node(xmlNodePtr node, const gchar *tag); +xmlNodePtr obt_parse_find_node(xmlNodePtr node, const gchar *name); gboolean obt_parse_node_contains (xmlNodePtr node, const gchar *val); gchar *obt_parse_node_string (xmlNodePtr node); @@ -410,12 +410,11 @@ void obt_prop_set_array32(Window win, Atom prop, Atom type, gulong *val, void obt_prop_set_string_locale(Window win, Atom prop, const gchar *val) { - const gchar *s[2] = { val, NULL }; + gchar const *s[2] = { val, NULL }; obt_prop_set_strings_locale(win, prop, s); } -void obt_prop_set_strings_locale(Window win, Atom prop, - const gchar **strs) +void obt_prop_set_strings_locale(Window win, Atom prop, gchar const **strs) { gint i, count; gchar **lstrs; @@ -445,10 +444,10 @@ void obt_prop_set_string_utf8(Window win, Atom prop, const gchar *val) PropModeReplace, (const guchar*)val, strlen(val)); } -void obt_prop_set_strings_utf8(Window win, Atom prop, const gchar **strs) +void obt_prop_set_strings_utf8(Window win, Atom prop, gchar const **strs) { GString *str; - const gchar **s; + gchar const **s; str = g_string_sized_new(0); for (s = strs; *s; ++s) { @@ -225,10 +225,8 @@ void obt_prop_set_array32(Window win, Atom prop, Atom type, gulong *val, guint num); void obt_prop_set_string_locale(Window win, Atom prop, const gchar *val); void obt_prop_set_string_utf8(Window win, Atom prop, const gchar *val); -void obt_prop_set_strings_locale(Window win, Atom prop, - const gchar **strs); -void obt_prop_set_strings_utf8(Window win, Atom prop, - const gchar **strs); +void obt_prop_set_strings_locale(Window win, Atom prop, gchar const **strs); +void obt_prop_set_strings_utf8(Window win, Atom prop, gchar const **strs); void obt_prop_erase(Window win, Atom prop); diff --git a/openbox/actions.c b/openbox/actions.c index 0c84489a..9ff20a41 100644 --- a/openbox/actions.c +++ b/openbox/actions.c @@ -158,23 +158,21 @@ ObActionsAct* actions_parse_string(const gchar *name) if ((act = actions_build_act_from_string(name))) if (act->def->setup) - act->options = act->def->setup(NULL, NULL, NULL); + act->options = act->def->setup(NULL); return act; } -ObActionsAct* actions_parse(ObParseInst *i, - xmlDocPtr doc, - xmlNodePtr node) +ObActionsAct* actions_parse(xmlNodePtr node) { gchar *name; ObActionsAct *act = NULL; - if (parse_attr_string("name", node, &name)) { + if (obt_parse_attr_string(node, "name", &name)) { if ((act = actions_build_act_from_string(name))) /* there is more stuff to parse here */ if (act->def->setup) - act->options = act->def->setup(i, doc, node->xmlChildrenNode); + act->options = act->def->setup(node->xmlChildrenNode); g_free(name); } diff --git a/openbox/actions.h b/openbox/actions.h index 477e4ba1..32a94060 100644 --- a/openbox/actions.h +++ b/openbox/actions.h @@ -18,7 +18,8 @@ #include "misc.h" #include "frame.h" -#include "parser/parse.h" +#include "obt/parse.h" + #include <glib.h> #include <X11/Xlib.h> @@ -30,8 +31,7 @@ typedef struct _ObActionsGlobalData ObActionsGlobalData; typedef struct _ObActionsClientData ObActionsClientData; typedef struct _ObActionsSelectorData ObActionsSelectorData; -typedef gpointer (*ObActionsDataSetupFunc)(ObParseInst *i, - xmlDocPtr doc, xmlNodePtr node); +typedef gpointer (*ObActionsDataSetupFunc)(xmlNodePtr node); typedef void (*ObActionsDataFreeFunc)(gpointer options); typedef gboolean (*ObActionsRunFunc)(ObActionsData *data, gpointer options); @@ -64,9 +64,7 @@ gboolean actions_register(const gchar *name, ObActionsInteractiveInputFunc i_input, ObActionsInteractiveCancelFunc i_cancel); -ObActionsAct* actions_parse(ObParseInst *i, - xmlDocPtr doc, - xmlNodePtr node); +ObActionsAct* actions_parse(xmlNodePtr node); ObActionsAct* actions_parse_string(const gchar *name); gboolean actions_act_is_interactive(ObActionsAct *act); diff --git a/openbox/actions/addremovedesktop.c b/openbox/actions/addremovedesktop.c index 8125b9bb..b6e621ab 100644 --- a/openbox/actions/addremovedesktop.c +++ b/openbox/actions/addremovedesktop.c @@ -7,36 +7,28 @@ typedef struct { gboolean add; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static gpointer setup_add_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static gpointer setup_remove_func(ObParseInst *i, - xmlDocPtr doc, xmlNodePtr node); -static void free_func(gpointer options); +static gpointer setup_func(xmlNodePtr node); +static gpointer setup_add_func(xmlNodePtr node); +static gpointer setup_remove_func(xmlNodePtr node); static gboolean run_func(ObActionsData *data, gpointer options); void action_addremovedesktop_startup(void) { - actions_register("AddDesktop", - setup_add_func, - free_func, - run_func, + actions_register("AddDesktop", setup_add_func, g_free, run_func, NULL, NULL); - actions_register("RemoveDesktop", - setup_remove_func, - free_func, - run_func, + actions_register("RemoveDesktop", setup_remove_func, g_free, run_func, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_new0(Options, 1); - if ((n = parse_find_node("where", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "where"))) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "last")) o->current = FALSE; else if (!g_ascii_strcasecmp(s, "current")) @@ -47,28 +39,20 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) return o; } -static gpointer setup_add_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_add_func(xmlNodePtr node) { - Options *o = setup_func(i, doc, node); + Options *o = setup_func(node); o->add = TRUE; return o; } -static gpointer setup_remove_func(ObParseInst *i, - xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_remove_func(xmlNodePtr node) { - Options *o = setup_func(i, doc, node); + Options *o = setup_func(node); o->add = FALSE; return o; } -static void free_func(gpointer options) -{ - Options *o = options; - - g_free(o); -} - /* Always return FALSE because its not interactive */ static gboolean run_func(ObActionsData *data, gpointer options) { diff --git a/openbox/actions/cyclewindows.c b/openbox/actions/cyclewindows.c index 059db93f..70f146af 100644 --- a/openbox/actions/cyclewindows.c +++ b/openbox/actions/cyclewindows.c @@ -20,11 +20,9 @@ typedef struct { static gboolean cycling = FALSE; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static gpointer setup_forward_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); -static gpointer setup_backward_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); +static gpointer setup_func(xmlNodePtr node); +static gpointer setup_forward_func(xmlNodePtr node); +static gpointer setup_backward_func(xmlNodePtr node); static void free_func(gpointer options); static gboolean run_func(ObActionsData *data, gpointer options); static gboolean i_input_func(guint initial_state, @@ -43,7 +41,7 @@ void action_cyclewindows_startup(void) run_func, i_input_func, i_cancel_func); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; @@ -52,29 +50,29 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o->dialog = TRUE; o->bar = TRUE; - if ((n = parse_find_node("linear", node))) - o->linear = parse_bool(doc, n); - if ((n = parse_find_node("dialog", node))) - o->dialog = parse_bool(doc, n); - if ((n = parse_find_node("bar", node))) - o->bar = parse_bool(doc, n); - if ((n = parse_find_node("raise", node))) - o->raise = parse_bool(doc, n); - if ((n = parse_find_node("panels", node))) - o->dock_windows = parse_bool(doc, n); - if ((n = parse_find_node("desktop", node))) - o->desktop_windows = parse_bool(doc, n); - if ((n = parse_find_node("allDesktops", node))) - o->all_desktops = parse_bool(doc, n); - - if ((n = parse_find_node("finalactions", node))) { + if ((n = obt_parse_find_node(node, "linear"))) + o->linear = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "dialog"))) + o->dialog = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "bar"))) + o->bar = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "raise"))) + o->raise = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "panels"))) + o->dock_windows = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "desktop"))) + o->desktop_windows = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "allDesktops"))) + o->all_desktops = obt_parse_node_bool(n); + + if ((n = obt_parse_find_node(node, "finalactions"))) { xmlNodePtr m; - m = parse_find_node("action", n->xmlChildrenNode); + m = obt_parse_find_node(n->xmlChildrenNode, "action"); while (m) { - ObActionsAct *action = actions_parse(i, doc, m); + ObActionsAct *action = actions_parse(m); if (action) o->actions = g_slist_prepend(o->actions, action); - m = parse_find_node("action", m->next); + m = obt_parse_find_node(m->next, "action"); } } else { @@ -89,18 +87,16 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) return o; } -static gpointer setup_forward_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_forward_func(xmlNodePtr node) { - Options *o = setup_func(i, doc, node); + Options *o = setup_func(node); o->forward = TRUE; return o; } -static gpointer setup_backward_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_backward_func(xmlNodePtr node) { - Options *o = setup_func(i, doc, node); + Options *o = setup_func(node); o->forward = FALSE; return o; } diff --git a/openbox/actions/debug.c b/openbox/actions/debug.c index f71b685d..99e838a6 100644 --- a/openbox/actions/debug.c +++ b/openbox/actions/debug.c @@ -5,39 +5,32 @@ typedef struct { gchar *str; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); +static gpointer setup_func(xmlNodePtr node); static void free_func(gpointer options); static gboolean run_func(ObActionsData *data, gpointer options); void action_debug_startup(void) { - actions_register("Debug", - setup_func, - free_func, - run_func, - NULL, NULL); + actions_register("Debug", setup_func, free_func, run_func, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_new0(Options, 1); - if ((n = parse_find_node("string", node))) - o->str = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "string"))) + o->str = obt_parse_node_string(n); return o; } static void free_func(gpointer options) { Options *o = options; - - if (o) { - g_free(o->str); - g_free(o); - } + g_free(o->str); + g_free(o); } /* Always return FALSE because its not interactive */ diff --git a/openbox/actions/desktop.c b/openbox/actions/desktop.c index 69275252..b50534d1 100644 --- a/openbox/actions/desktop.c +++ b/openbox/actions/desktop.c @@ -26,10 +26,8 @@ typedef struct { gboolean follow; } Options; -static gpointer setup_go_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); -static gpointer setup_send_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); +static gpointer setup_go_func(xmlNodePtr node); +static gpointer setup_send_func(xmlNodePtr node); static gboolean run_func(ObActionsData *data, gpointer options); void action_desktop_startup(void) @@ -40,8 +38,7 @@ void action_desktop_startup(void) NULL, NULL); } -static gpointer setup_go_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_go_func(xmlNodePtr node) { xmlNodePtr n; Options *o; @@ -53,8 +50,8 @@ static gpointer setup_go_func(ObParseInst *i, xmlDocPtr doc, /* wrap by default - it's handy! */ o->rel.wrap = TRUE; - if ((n = parse_find_node("to", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "to"))) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "last")) o->type = LAST; else if (!g_ascii_strcasecmp(s, "next")) { @@ -89,29 +86,28 @@ static gpointer setup_go_func(ObParseInst *i, xmlDocPtr doc, } else { o->type = ABSOLUTE; - o->abs.desktop = parse_int(doc, n) - 1; + o->abs.desktop = obt_parse_node_int(n) - 1; } g_free(s); } - if ((n = parse_find_node("wrap", node))) - o->rel.wrap = parse_bool(doc, n); + if ((n = obt_parse_find_node(node, "wrap"))) + o->rel.wrap = obt_parse_node_bool(n); return o; } -static gpointer setup_send_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_send_func(xmlNodePtr node) { xmlNodePtr n; Options *o; - o = setup_go_func(i, doc, node); + o = setup_go_func(node); o->send = TRUE; o->follow = TRUE; - if ((n = parse_find_node("follow", node))) - o->follow = parse_bool(doc, n); + if ((n = obt_parse_find_node(node, "follow"))) + o->follow = obt_parse_node_bool(n); return o; } diff --git a/openbox/actions/directionalwindows.c b/openbox/actions/directionalwindows.c index c575d84e..05b841d3 100644 --- a/openbox/actions/directionalwindows.c +++ b/openbox/actions/directionalwindows.c @@ -20,11 +20,9 @@ typedef struct { static gboolean cycling = FALSE; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static gpointer setup_cycle_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); -static gpointer setup_target_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); +static gpointer setup_func(xmlNodePtr node); +static gpointer setup_cycle_func(xmlNodePtr node); +static gpointer setup_target_func(xmlNodePtr node); static void free_func(gpointer options); static gboolean run_func(ObActionsData *data, gpointer options); static gboolean i_input_func(guint initial_state, @@ -43,7 +41,7 @@ void action_directionalwindows_startup(void) run_func, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; @@ -52,18 +50,18 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o->dialog = TRUE; o->bar = TRUE; - if ((n = parse_find_node("dialog", node))) - o->dialog = parse_bool(doc, n); - if ((n = parse_find_node("bar", node))) - o->bar = parse_bool(doc, n); - if ((n = parse_find_node("raise", node))) - o->raise = parse_bool(doc, n); - if ((n = parse_find_node("panels", node))) - o->dock_windows = parse_bool(doc, n); - if ((n = parse_find_node("desktop", node))) - o->desktop_windows = parse_bool(doc, n); - if ((n = parse_find_node("direction", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "dialog"))) + o->dialog = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "bar"))) + o->bar = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "raise"))) + o->raise = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "panels"))) + o->dock_windows = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "desktop"))) + o->desktop_windows = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "direction"))) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "north") || !g_ascii_strcasecmp(s, "up")) o->direction = OB_DIRECTION_NORTH; @@ -87,14 +85,14 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) g_free(s); } - if ((n = parse_find_node("finalactions", node))) { + if ((n = obt_parse_find_node(node, "finalactions"))) { xmlNodePtr m; - m = parse_find_node("action", n->xmlChildrenNode); + m = obt_parse_find_node(n->xmlChildrenNode, "action"); while (m) { - ObActionsAct *action = actions_parse(i, doc, m); + ObActionsAct *action = actions_parse(m); if (action) o->actions = g_slist_prepend(o->actions, action); - m = parse_find_node("action", m->next); + m = obt_parse_find_node(m->next, "action"); } } else { @@ -109,18 +107,16 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) return o; } -static gpointer setup_cycle_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_cycle_func(xmlNodePtr node) { - Options *o = setup_func(i, doc, node); + Options *o = setup_func(node); o->interactive = TRUE; return o; } -static gpointer setup_target_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_target_func(xmlNodePtr node) { - Options *o = setup_func(i, doc, node); + Options *o = setup_func(node); o->interactive = FALSE; return o; } diff --git a/openbox/actions/execute.c b/openbox/actions/execute.c index 02de0154..51bcaac2 100644 --- a/openbox/actions/execute.c +++ b/openbox/actions/execute.c @@ -12,7 +12,7 @@ typedef struct { gchar *sn_wmclass; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); +static gpointer setup_func(xmlNodePtr node); static void free_func(gpointer options); static gboolean run_func(ObActionsData *data, gpointer options); /* @@ -25,38 +25,34 @@ static void i_cancel_func(gpointer options); void action_execute_startup(void) { - actions_register("Execute", - setup_func, - free_func, - run_func, - NULL, NULL); + actions_register("Execute", setup_func, free_func, run_func, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_new0(Options, 1); - if ((n = parse_find_node("command", node)) || - (n = parse_find_node("execute", node))) + if ((n = obt_parse_find_node(node, "command")) || + (n = obt_parse_find_node(node, "execute"))) { - gchar *s = parse_string(doc, n); + gchar *s = obt_parse_node_string(n); o->cmd = parse_expand_tilde(s); g_free(s); } - if ((n = parse_find_node("startupnotify", node))) { + if ((n = obt_parse_find_node(node, "startupnotify"))) { xmlNodePtr m; - if ((m = parse_find_node("enabled", n->xmlChildrenNode))) - o->sn = parse_bool(doc, m); - if ((m = parse_find_node("name", n->xmlChildrenNode))) - o->sn_name = parse_string(doc, m); - if ((m = parse_find_node("icon", n->xmlChildrenNode))) - o->sn_icon = parse_string(doc, m); - if ((m = parse_find_node("wmclass", n->xmlChildrenNode))) - o->sn_wmclass = parse_string(doc, m); + if ((m = obt_parse_find_node(n->xmlChildrenNode, "enabled"))) + o->sn = obt_parse_node_bool(m); + if ((m = obt_parse_find_node(n->xmlChildrenNode, "name"))) + o->sn_name = obt_parse_node_string(m); + if ((m = obt_parse_find_node(n->xmlChildrenNode, "icon"))) + o->sn_icon = obt_parse_node_string(m); + if ((m = obt_parse_find_node(n->xmlChildrenNode, "wmclass"))) + o->sn_wmclass = obt_parse_node_string(m); } return o; } diff --git a/openbox/actions/focus.c b/openbox/actions/focus.c index 67c1479f..67640a4d 100644 --- a/openbox/actions/focus.c +++ b/openbox/actions/focus.c @@ -7,38 +7,26 @@ typedef struct { gboolean here; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static void free_func(gpointer options); +static gpointer setup_func(xmlNodePtr node); static gboolean run_func(ObActionsData *data, gpointer options); void action_focus_startup(void) { - actions_register("Focus", - setup_func, - free_func, - run_func, - NULL, NULL); + actions_register("Focus", setup_func, g_free, run_func, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_new0(Options, 1); - if ((n = parse_find_node("here", node))) - o->here = parse_bool(doc, n); + if ((n = obt_parse_find_node(node, "here"))) + o->here = obt_parse_node_bool(n); return o; } -static void free_func(gpointer options) -{ - Options *o = options; - - g_free(o); -} - /* Always return FALSE because its not interactive */ static gboolean run_func(ObActionsData *data, gpointer options) { diff --git a/openbox/actions/growtoedge.c b/openbox/actions/growtoedge.c index 630ead10..a37e3a26 100644 --- a/openbox/actions/growtoedge.c +++ b/openbox/actions/growtoedge.c @@ -10,27 +10,19 @@ typedef struct { gboolean shrink; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static gpointer setup_shrink_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static void free_func(gpointer options); +static gpointer setup_func(xmlNodePtr node); +static gpointer setup_shrink_func(xmlNodePtr node); static gboolean run_func(ObActionsData *data, gpointer options); void action_growtoedge_startup(void) { - actions_register("GrowToEdge", - setup_func, - free_func, - run_func, - NULL, NULL); - - actions_register("ShrinkToEdge", - setup_shrink_func, - free_func, - run_func, - NULL, NULL); + actions_register("GrowToEdge", setup_func, + g_free, run_func, NULL, NULL); + actions_register("ShrinkToEdge", setup_shrink_func, + g_free, run_func, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; @@ -39,8 +31,8 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o->dir = OB_DIRECTION_NORTH; o->shrink = FALSE; - if ((n = parse_find_node("direction", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "direction"))) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "north") || !g_ascii_strcasecmp(s, "up")) o->dir = OB_DIRECTION_NORTH; @@ -59,23 +51,16 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) return o; } -static gpointer setup_shrink_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_shrink_func(xmlNodePtr node) { Options *o; - o = setup_func(i, doc, node); + o = setup_func(node); o->shrink = TRUE; return o; } -static void free_func(gpointer options) -{ - Options *o = options; - - g_free(o); -} - static gboolean do_grow(ObActionsData *data, gint x, gint y, gint w, gint h) { gint realw, realh, lw, lh; diff --git a/openbox/actions/if.c b/openbox/actions/if.c index a35c61fc..8d2f281f 100644 --- a/openbox/actions/if.c +++ b/openbox/actions/if.c @@ -23,81 +23,77 @@ typedef struct { GSList *elseacts; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); +static gpointer setup_func(xmlNodePtr node); static void free_func(gpointer options); static gboolean run_func(ObActionsData *data, gpointer options); void action_if_startup(void) { - actions_register("If", - setup_func, - free_func, - run_func, - NULL, NULL); + actions_register("If", setup_func, free_func, run_func, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_new0(Options, 1); - if ((n = parse_find_node("shaded", node))) { - if (parse_bool(doc, n)) + if ((n = obt_parse_find_node(node, "shaded"))) { + if (obt_parse_node_bool(n)) o->shaded_on = TRUE; else o->shaded_off = TRUE; } - if ((n = parse_find_node("maximized", node))) { - if (parse_bool(doc, n)) + if ((n = obt_parse_find_node(node, "maximized"))) { + if (obt_parse_node_bool(n)) o->maxfull_on = TRUE; else o->maxfull_off = TRUE; } - if ((n = parse_find_node("maximizedhorizontal", node))) { - if (parse_bool(doc, n)) + if ((n = obt_parse_find_node(node, "maximizedhorizontal"))) { + if (obt_parse_node_bool(n)) o->maxhorz_on = TRUE; else o->maxhorz_off = TRUE; } - if ((n = parse_find_node("maximizedvertical", node))) { - if (parse_bool(doc, n)) + if ((n = obt_parse_find_node(node, "maximizedvertical"))) { + if (obt_parse_node_bool(n)) o->maxvert_on = TRUE; else o->maxvert_off = TRUE; } - if ((n = parse_find_node("iconified", node))) { - if (parse_bool(doc, n)) + if ((n = obt_parse_find_node(node, "iconified"))) { + if (obt_parse_node_bool(n)) o->iconic_on = TRUE; else o->iconic_off = TRUE; } - if ((n = parse_find_node("focused", node))) { - if (parse_bool(doc, n)) + if ((n = obt_parse_find_node(node, "focused"))) { + if (obt_parse_node_bool(n)) o->focused = TRUE; else o->unfocused = TRUE; } - if ((n = parse_find_node("then", node))) { + if ((n = obt_parse_find_node(node, "then"))) { xmlNodePtr m; - m = parse_find_node("action", n->xmlChildrenNode); + m = obt_parse_find_node(n->xmlChildrenNode, "action"); while (m) { - ObActionsAct *action = actions_parse(i, doc, m); + ObActionsAct *action = actions_parse(m); if (action) o->thenacts = g_slist_prepend(o->thenacts, action); - m = parse_find_node("action", m->next); + m = obt_parse_find_node(m->next, "action"); } } - if ((n = parse_find_node("else", node))) { + if ((n = obt_parse_find_node(node, "else"))) { xmlNodePtr m; - m = parse_find_node("action", n->xmlChildrenNode); + m = obt_parse_find_node(n->xmlChildrenNode, "action"); while (m) { - ObActionsAct *action = actions_parse(i, doc, m); + ObActionsAct *action = actions_parse(m); if (action) o->elseacts = g_slist_prepend(o->elseacts, action); - m = parse_find_node("action", m->next); + m = obt_parse_find_node(m->next, "action"); } } @@ -108,6 +104,15 @@ static void free_func(gpointer options) { Options *o = options; + while (o->thenacts) { + actions_act_unref(o->thenacts->data); + o->thenacts = g_slist_delete_link(o->thenacts, o->thenacts); + } + while (o->elseacts) { + actions_act_unref(o->elseacts->data); + o->elseacts = g_slist_delete_link(o->elseacts, o->elseacts); + } + g_free(o); } diff --git a/openbox/actions/layer.c b/openbox/actions/layer.c index 92fa4806..bbfda572 100644 --- a/openbox/actions/layer.c +++ b/openbox/actions/layer.c @@ -6,11 +6,9 @@ typedef struct { gboolean toggle; } Options; -static gpointer setup_func_top(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static gpointer setup_func_bottom(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); -static gpointer setup_func_send(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); +static gpointer setup_func_top(xmlNodePtr node); +static gpointer setup_func_bottom(xmlNodePtr node); +static gpointer setup_func_send(xmlNodePtr node); static gboolean run_func(ObActionsData *data, gpointer options); void action_layer_startup(void) @@ -23,7 +21,7 @@ void action_layer_startup(void) run_func, NULL, NULL); } -static gpointer setup_func_top(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func_top(xmlNodePtr node) { Options *o = g_new0(Options, 1); o->layer = 1; @@ -31,8 +29,7 @@ static gpointer setup_func_top(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) return o; } -static gpointer setup_func_bottom(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_func_bottom(xmlNodePtr node) { Options *o = g_new0(Options, 1); o->layer = -1; @@ -40,16 +37,15 @@ static gpointer setup_func_bottom(ObParseInst *i, xmlDocPtr doc, return o; } -static gpointer setup_func_send(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_func_send(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_new0(Options, 1); - if ((n = parse_find_node("layer", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "layer"))) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "above") || !g_ascii_strcasecmp(s, "top")) o->layer = 1; diff --git a/openbox/actions/maximize.c b/openbox/actions/maximize.c index bb6f470a..45e8b38e 100644 --- a/openbox/actions/maximize.c +++ b/openbox/actions/maximize.c @@ -12,7 +12,7 @@ typedef struct { MaxDirection dir; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); +static gpointer setup_func(xmlNodePtr node); static gboolean run_func_on(ObActionsData *data, gpointer options); static gboolean run_func_off(ObActionsData *data, gpointer options); static gboolean run_func_toggle(ObActionsData *data, gpointer options); @@ -27,7 +27,7 @@ void action_maximize_startup(void) NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; @@ -35,8 +35,8 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o = g_new0(Options, 1); o->dir = BOTH; - if ((n = parse_find_node("direction", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "direction"))) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "vertical") || !g_ascii_strcasecmp(s, "vert")) o->dir = VERT; diff --git a/openbox/actions/moverelative.c b/openbox/actions/moverelative.c index 1d1189cd..ccdff545 100644 --- a/openbox/actions/moverelative.c +++ b/openbox/actions/moverelative.c @@ -9,41 +9,29 @@ typedef struct { gint y; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static void free_func(gpointer options); +static gpointer setup_func(xmlNodePtr node); static gboolean run_func(ObActionsData *data, gpointer options); void action_moverelative_startup(void) { - actions_register("MoveRelative", - setup_func, - free_func, - run_func, - NULL, NULL); + actions_register("MoveRelative", setup_func, g_free, run_func, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_new0(Options, 1); - if ((n = parse_find_node("x", node))) - o->x = parse_int(doc, n); - if ((n = parse_find_node("y", node))) - o->y = parse_int(doc, n); + if ((n = obt_parse_find_node(node, "x"))) + o->x = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "y"))) + o->y = obt_parse_node_int(n); return o; } -static void free_func(gpointer options) -{ - Options *o = options; - - g_free(o); -} - /* Always return FALSE because its not interactive */ static gboolean run_func(ObActionsData *data, gpointer options) { diff --git a/openbox/actions/moveresizeto.c b/openbox/actions/moveresizeto.c index 860bf73a..d355dafd 100644 --- a/openbox/actions/moveresizeto.c +++ b/openbox/actions/moveresizeto.c @@ -21,23 +21,18 @@ typedef struct { gint monitor; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static void free_func(gpointer options); +static gpointer setup_func(xmlNodePtr node); static gboolean run_func(ObActionsData *data, gpointer options); void action_moveresizeto_startup(void) { - actions_register("MoveResizeTo", - setup_func, - free_func, - run_func, - NULL, NULL); + actions_register("MoveResizeTo", setup_func, g_free, run_func, NULL, NULL); } -static void parse_coord(xmlDocPtr doc, xmlNodePtr n, gint *pos, +static void parse_coord(xmlNodePtr n, gint *pos, gboolean *opposite, gboolean *center) { - gchar *s = parse_string(doc, n); + gchar *s = obt_parse_node_string(n); if (g_ascii_strcasecmp(s, "current") != 0) { if (!g_ascii_strcasecmp(s, "center")) *center = TRUE; @@ -53,7 +48,7 @@ static void parse_coord(xmlDocPtr doc, xmlNodePtr n, gint *pos, g_free(s); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; @@ -65,32 +60,32 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o->h = G_MININT; o->monitor = CURRENT_MONITOR; - if ((n = parse_find_node("x", node))) - parse_coord(doc, n, &o->x, &o->xopposite, &o->xcenter); + if ((n = obt_parse_find_node(node, "x"))) + parse_coord(n, &o->x, &o->xopposite, &o->xcenter); - if ((n = parse_find_node("y", node))) - parse_coord(doc, n, &o->y, &o->yopposite, &o->ycenter); + if ((n = obt_parse_find_node(node, "y"))) + parse_coord(n, &o->y, &o->yopposite, &o->ycenter); - if ((n = parse_find_node("width", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "width"))) { + gchar *s = obt_parse_node_string(n); if (g_ascii_strcasecmp(s, "current") != 0) - o->w = parse_int(doc, n); + o->w = obt_parse_node_int(n); g_free(s); } - if ((n = parse_find_node("height", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "height"))) { + gchar *s = obt_parse_node_string(n); if (g_ascii_strcasecmp(s, "current") != 0) - o->h = parse_int(doc, n); + o->h = obt_parse_node_int(n); g_free(s); } - if ((n = parse_find_node("monitor", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "monitor"))) { + gchar *s = obt_parse_node_string(n); if (g_ascii_strcasecmp(s, "current") != 0) { if (!g_ascii_strcasecmp(s, "all")) o->monitor = ALL_MONITORS; else - o->monitor = parse_int(doc, n) - 1; + o->monitor = obt_parse_node_int(n) - 1; } g_free(s); } @@ -98,13 +93,6 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) return o; } -static void free_func(gpointer options) -{ - Options *o = options; - - g_free(o); -} - /* Always return FALSE because its not interactive */ static gboolean run_func(ObActionsData *data, gpointer options) { diff --git a/openbox/actions/movetoedge.c b/openbox/actions/movetoedge.c index 5941bde9..f360ddd0 100644 --- a/openbox/actions/movetoedge.c +++ b/openbox/actions/movetoedge.c @@ -9,20 +9,15 @@ typedef struct { ObDirection dir; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static void free_func(gpointer options); +static gpointer setup_func(xmlNodePtr node); static gboolean run_func(ObActionsData *data, gpointer options); void action_movetoedge_startup(void) { - actions_register("MoveToEdge", - setup_func, - free_func, - run_func, - NULL, NULL); + actions_register("MoveToEdge", setup_func, g_free, run_func, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; @@ -30,8 +25,8 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o = g_new0(Options, 1); o->dir = OB_DIRECTION_NORTH; - if ((n = parse_find_node("direction", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "direction"))) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "north") || !g_ascii_strcasecmp(s, "up")) o->dir = OB_DIRECTION_NORTH; @@ -50,13 +45,6 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) return o; } -static void free_func(gpointer options) -{ - Options *o = options; - - g_free(o); -} - /* Always return FALSE because its not interactive */ static gboolean run_func(ObActionsData *data, gpointer options) { diff --git a/openbox/actions/resize.c b/openbox/actions/resize.c index e073ed2f..47f45f5b 100644 --- a/openbox/actions/resize.c +++ b/openbox/actions/resize.c @@ -9,8 +9,7 @@ typedef struct { guint32 corner; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static void free_func(gpointer options); +static gpointer setup_func(xmlNodePtr node); static gboolean run_func(ObActionsData *data, gpointer options); static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch, @@ -18,22 +17,18 @@ static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch, void action_resize_startup(void) { - actions_register("Resize", - setup_func, - free_func, - run_func, - NULL, NULL); + actions_register("Resize", setup_func, g_free, run_func, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_new0(Options, 1); - if ((n = parse_find_node("edge", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "edge"))) { + gchar *s = obt_parse_node_string(n); o->corner_specified = TRUE; if (!g_ascii_strcasecmp(s, "top")) @@ -60,13 +55,6 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) return o; } -static void free_func(gpointer options) -{ - Options *o = options; - - g_free(o); -} - /* Always return FALSE because its not interactive */ static gboolean run_func(ObActionsData *data, gpointer options) { diff --git a/openbox/actions/resizerelative.c b/openbox/actions/resizerelative.c index f705c292..5742e1fc 100644 --- a/openbox/actions/resizerelative.c +++ b/openbox/actions/resizerelative.c @@ -11,47 +11,36 @@ typedef struct { gint bottom; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static void free_func(gpointer options); +static gpointer setup_func(xmlNodePtr node); static gboolean run_func(ObActionsData *data, gpointer options); void action_resizerelative_startup(void) { - actions_register("ResizeRelative", - setup_func, - free_func, - run_func, + actions_register("ResizeRelative", setup_func, g_free, run_func, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_new0(Options, 1); - if ((n = parse_find_node("left", node))) - o->left = parse_int(doc, n); - if ((n = parse_find_node("right", node))) - o->right = parse_int(doc, n); - if ((n = parse_find_node("top", node)) || - (n = parse_find_node("up", node))) - o->top = parse_int(doc, n); - if ((n = parse_find_node("bottom", node)) || - (n = parse_find_node("down", node))) - o->bottom = parse_int(doc, n); + if ((n = obt_parse_find_node(node, "left"))) + o->left = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "right"))) + o->right = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "top")) || + (n = obt_parse_find_node(node, "up"))) + o->top = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "bottom")) || + (n = obt_parse_find_node(node, "down"))) + o->bottom = obt_parse_node_int(n); return o; } -static void free_func(gpointer options) -{ - Options *o = options; - - g_free(o); -} - /* Always return FALSE because its not interactive */ static gboolean run_func(ObActionsData *data, gpointer options) { diff --git a/openbox/actions/restart.c b/openbox/actions/restart.c index 4b52f9d3..0afe8bf0 100644 --- a/openbox/actions/restart.c +++ b/openbox/actions/restart.c @@ -5,30 +5,26 @@ typedef struct { gchar *cmd; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); +static gpointer setup_func(xmlNodePtr node); static void free_func(gpointer options); static gboolean run_func(ObActionsData *data, gpointer options); void action_restart_startup(void) { - actions_register("Restart", - setup_func, - free_func, - run_func, - NULL, NULL); + actions_register("Restart", setup_func, free_func, run_func, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_new0(Options, 1); - if ((n = parse_find_node("command", node)) || - (n = parse_find_node("execute", node))) + if ((n = obt_parse_find_node(node, "command")) || + (n = obt_parse_find_node(node, "execute"))) { - gchar *s = parse_string(doc, n); + gchar *s = obt_parse_node_string(n); o->cmd = parse_expand_tilde(s); g_free(s); } @@ -38,11 +34,8 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) static void free_func(gpointer options) { Options *o = options; - - if (o) { - g_free(o->cmd); - g_free(o); - } + g_free(o->cmd); + g_free(o); } /* Always return FALSE because its not interactive */ diff --git a/openbox/actions/showmenu.c b/openbox/actions/showmenu.c index c1d53e41..9590bd15 100644 --- a/openbox/actions/showmenu.c +++ b/openbox/actions/showmenu.c @@ -6,7 +6,7 @@ typedef struct { gchar *name; } Options; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); +static gpointer setup_func(xmlNodePtr node); static void free_func(gpointer options); static gboolean run_func(ObActionsData *data, gpointer options); @@ -16,15 +16,15 @@ void action_showmenu_startup(void) NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_new0(Options, 1); - if ((n = parse_find_node("menu", node))) - o->name = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "menu"))) + o->name = obt_parse_node_string(n); return o; } diff --git a/openbox/config.c b/openbox/config.c index 420ac553..70e44d76 100644 --- a/openbox/config.c +++ b/openbox/config.c @@ -24,7 +24,6 @@ #include "translate.h" #include "client.h" #include "screen.h" -#include "parser/parse.h" #include "openbox.h" #include "gettext.h" @@ -141,10 +140,9 @@ void config_app_settings_copy_non_defaults(const ObAppSettings *src, } } -static void config_parse_gravity_coord(xmlDocPtr doc, xmlNodePtr node, - GravityCoord *c) +static void config_parse_gravity_coord(xmlNodePtr node, GravityCoord *c) { - gchar *s = parse_string(doc, node); + gchar *s = obt_parse_node_string(node); if (!g_ascii_strcasecmp(s, "center")) c->center = TRUE; else { @@ -186,10 +184,9 @@ static void config_parse_gravity_coord(xmlDocPtr doc, xmlNodePtr node, the monitor, so <position><x>center</x></position><monitor>2</monitor> will center the window on the second monitor. */ -static void parse_per_app_settings(ObParseInst *inst, xmlDocPtr doc, - xmlNodePtr node, gpointer data) +static void parse_per_app_settings(xmlNodePtr node, gpointer d) { - xmlNodePtr app = parse_find_node("application", node->children); + xmlNodePtr app = obt_parse_find_node(node->children, "application"); gchar *name = NULL, *class = NULL, *role = NULL; gboolean name_set, class_set; gboolean x_pos_given; @@ -197,8 +194,8 @@ static void parse_per_app_settings(ObParseInst *inst, xmlDocPtr doc, while (app) { name_set = class_set = x_pos_given = FALSE; - class_set = parse_attr_string("class", app, &class); - name_set = parse_attr_string("name", app, &name); + class_set = obt_parse_attr_string(app, "class", &class); + name_set = obt_parse_attr_string(app, "name", &name); if (class_set || name_set) { xmlNodePtr n, c; ObAppSettings *settings = config_create_app_settings();; @@ -209,55 +206,53 @@ static void parse_per_app_settings(ObParseInst *inst, xmlDocPtr doc, if (class_set) settings->class = g_pattern_spec_new(class); - if (parse_attr_string("role", app, &role)) + if (obt_parse_attr_string(app, "role", &role)) settings->role = g_pattern_spec_new(role); - if ((n = parse_find_node("decor", app->children))) - if (!parse_contains("default", doc, n)) - settings->decor = parse_bool(doc, n); + if ((n = obt_parse_find_node(app->children, "decor"))) + if (!obt_parse_node_contains(n, "default")) + settings->decor = obt_parse_node_bool(n); - if ((n = parse_find_node("shade", app->children))) - if (!parse_contains("default", doc, n)) - settings->shade = parse_bool(doc, n); + if ((n = obt_parse_find_node(app->children, "shade"))) + if (!obt_parse_node_contains(n, "default")) + settings->shade = obt_parse_node_bool(n); - if ((n = parse_find_node("position", app->children))) { - if ((c = parse_find_node("x", n->children))) - if (!parse_contains("default", doc, c)) { - config_parse_gravity_coord(doc, c, - &settings->position.x); + if ((n = obt_parse_find_node(app->children, "position"))) { + if ((c = obt_parse_find_node(n->children, "x"))) + if (!obt_parse_node_contains(c, "default")) { + config_parse_gravity_coord(c, &settings->position.x); x_pos_given = TRUE; } - if (x_pos_given && (c = parse_find_node("y", n->children))) - if (!parse_contains("default", doc, c)) { - config_parse_gravity_coord(doc, c, - &settings->position.y); + if (x_pos_given && (c = obt_parse_find_node(n->children, "y"))) + if (!obt_parse_node_contains("default", doc, c)) { + config_parse_gravity_coord(c, &settings->position.y); settings->pos_given = TRUE; } if (settings->pos_given && - (c = parse_find_node("monitor", n->children))) - if (!parse_contains("default", doc, c)) { - gchar *s = parse_string(doc, c); + (c = obt_parse_find_node(n->children, "monitor"))) + if (!obt_parse_node_contains(c, "default")) { + gchar *s = obt_parse_node_string(c); if (!g_ascii_strcasecmp(s, "mouse")) settings->monitor = 0; else - settings->monitor = parse_int(doc, c) + 1; + settings->monitor = obt_parse_node_int(c) + 1; g_free(s); } } - if ((n = parse_find_node("focus", app->children))) - if (!parse_contains("default", doc, n)) - settings->focus = parse_bool(doc, n); + if ((n = obt_parse_find_node(app->children, "focus"))) + if (!obt_parse_node_contains(n, "default")) + settings->focus = obt_parse_node_bool(n); - if ((n = parse_find_node("desktop", app->children))) { - if (!parse_contains("default", doc, n)) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(app->children, "desktop"))) { + if (!obt_parse_node_contains(n, "default")) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "all")) settings->desktop = DESKTOP_ALL; else { - gint i = parse_int(doc, n); + gint i = obt_parse_node_int(n); if (i > 0) settings->desktop = i; } @@ -265,9 +260,9 @@ static void parse_per_app_settings(ObParseInst *inst, xmlDocPtr doc, } } - if ((n = parse_find_node("layer", app->children))) - if (!parse_contains("default", doc, n)) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(app->children, "layer"))) + if (!obt_parse_node_contains(n, "default")) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "above")) settings->layer = 1; else if (!g_ascii_strcasecmp(s, "below")) @@ -277,25 +272,25 @@ static void parse_per_app_settings(ObParseInst *inst, xmlDocPtr doc, g_free(s); } - if ((n = parse_find_node("iconic", app->children))) - if (!parse_contains("default", doc, n)) - settings->iconic = parse_bool(doc, n); + if ((n = obt_parse_find_node(app->children, "iconic"))) + if (!obt_parse_node_contains(n, "default")) + settings->iconic = obt_parse_node_bool(n); - if ((n = parse_find_node("skip_pager", app->children))) - if (!parse_contains("default", doc, n)) - settings->skip_pager = parse_bool(doc, n); + if ((n = obt_parse_find_node(app->children, "skip_pager"))) + if (!obt_parse_node_contains(n, "default")) + settings->skip_pager = obt_parse_node_bool(n); - if ((n = parse_find_node("skip_taskbar", app->children))) - if (!parse_contains("default", doc, n)) - settings->skip_taskbar = parse_bool(doc, n); + if ((n = obt_parse_find_node(app->children, "skip_taskbar"))) + if (!obt_parse_node_contains(n, "default")) + settings->skip_taskbar = obt_parse_node_bool(n); - if ((n = parse_find_node("fullscreen", app->children))) - if (!parse_contains("default", doc, n)) - settings->fullscreen = parse_bool(doc, n); + if ((n = obt_parse_find_node(app->children, "fullscreen"))) + if (!obt_parse_node_contains(n, "default")) + settings->fullscreen = obt_parse_node_bool(n); - if ((n = parse_find_node("maximized", app->children))) - if (!parse_contains("default", doc, n)) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(app->children, "maximized"))) + if (!obt_parse_node_contains(n, "default")) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "horizontal")) { settings->max_horz = TRUE; settings->max_vert = FALSE; @@ -304,7 +299,7 @@ static void parse_per_app_settings(ObParseInst *inst, xmlDocPtr doc, settings->max_vert = TRUE; } else settings->max_horz = settings->max_vert = - parse_bool(doc, n); + obt_parse_node_bool(n); g_free(s); } @@ -316,7 +311,7 @@ static void parse_per_app_settings(ObParseInst *inst, xmlDocPtr doc, name = class = role = NULL; } - app = parse_find_node("application", app->next); + app = obt_parse_find_node(app->next, "application"); } } @@ -330,34 +325,33 @@ static void parse_per_app_settings(ObParseInst *inst, xmlDocPtr doc, */ -static void parse_key(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - GList *keylist) +static void parse_key(xmlNodePtr node, GList *keylist) { gchar *key; xmlNodePtr n; gboolean is_chroot = FALSE; - if (!parse_attr_string("key", node, &key)) + if (!obt_parse_attr_string(node, "key", &key)) return; - parse_attr_bool("chroot", node, &is_chroot); + obt_parse_attr_bool(node, "chroot", &is_chroot); keylist = g_list_append(keylist, key); - if ((n = parse_find_node("keybind", node->children))) { + if ((n = obt_parse_find_node(node->children, "keybind"))) { while (n) { - parse_key(i, doc, n, keylist); - n = parse_find_node("keybind", n->next); + parse_key(n, keylist); + n = obt_parse_find_node(n->next, "keybind"); } } - else if ((n = parse_find_node("action", node->children))) { + else if ((n = obt_parse_find_node(node->children, "action"))) { while (n) { ObActionsAct *action; - action = actions_parse(i, doc, n); + action = actions_parse(n); if (action) keyboard_bind(keylist, action); - n = parse_find_node("action", n->next); + n = obt_parse_find_node(n->next, "action"); } } @@ -368,25 +362,24 @@ static void parse_key(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, keylist = g_list_delete_link(keylist, g_list_last(keylist)); } -static void parse_keyboard(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_keyboard(xmlNodePtr node, gpointer d) { xmlNodePtr n; gchar *key; keyboard_unbind_all(); - if ((n = parse_find_node("chainQuitKey", node->children))) { - key = parse_string(doc, n); + if ((n = obt_parse_find_node(node->children, "chainQuitKey"))) { + key = obt_parse_node_string(n); translate_key(key, &config_keyboard_reset_state, &config_keyboard_reset_keycode); g_free(key); } - if ((n = parse_find_node("keybind", node->children))) + if ((n = obt_parse_find_node(node->children, "keybind"))) while (n) { - parse_key(i, doc, n, NULL); - n = parse_find_node("keybind", n->next); + parse_key(n, NULL); + n = obt_parse_find_node(n->next, "keybind"); } } @@ -400,8 +393,7 @@ static void parse_keyboard(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, */ -static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_mouse(xmlNodePtr node, gpointer d) { xmlNodePtr n, nbut, nact; gchar *buttonstr; @@ -412,137 +404,133 @@ static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, node = node->children; - if ((n = parse_find_node("dragThreshold", node))) - config_mouse_threshold = parse_int(doc, n); - if ((n = parse_find_node("doubleClickTime", node))) - config_mouse_dclicktime = parse_int(doc, n); - if ((n = parse_find_node("screenEdgeWarpTime", node))) - config_mouse_screenedgetime = parse_int(doc, n); + if ((n = obt_parse_find_node(node, "dragThreshold"))) + config_mouse_threshold = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "doubleClickTime"))) + config_mouse_dclicktime = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "screenEdgeWarpTime"))) + config_mouse_screenedgetime = obt_parse_node_int(n); - n = parse_find_node("context", node); + n = obt_parse_find_node(node, "context"); while (n) { - if (!parse_attr_string("name", n, &contextstr)) + if (!obt_parse_attr_string(n, "name", &contextstr)) goto next_n; - nbut = parse_find_node("mousebind", n->children); + nbut = obt_parse_find_node(n->children, "mousebind"); while (nbut) { - if (!parse_attr_string("button", nbut, &buttonstr)) + if (!obt_parse_attr_string(nbut, "button", &buttonstr)) goto next_nbut; - if (parse_attr_contains("press", nbut, "action")) { + if (obt_parse_attr_contains(nbut, "action", "press")) { mact = OB_MOUSE_ACTION_PRESS; - } else if (parse_attr_contains("release", nbut, "action")) { + } else if (obt_parse_attr_contains(nbut, "action", "release")) { mact = OB_MOUSE_ACTION_RELEASE; - } else if (parse_attr_contains("click", nbut, "action")) { + } else if (obt_parse_attr_contains(nbut, "action", "click")) { mact = OB_MOUSE_ACTION_CLICK; - } else if (parse_attr_contains("doubleclick", nbut,"action")) { + } else if (obt_parse_attr_contains(nbut, "action","doubleclick")) { mact = OB_MOUSE_ACTION_DOUBLE_CLICK; - } else if (parse_attr_contains("drag", nbut, "action")) { + } else if (obt_parse_attr_contains(nbut, "action", "drag")) { mact = OB_MOUSE_ACTION_MOTION; } else goto next_nbut; - nact = parse_find_node("action", nbut->children); + nact = obt_parse_find_node(nbut->children, "action"); while (nact) { ObActionsAct *action; - if ((action = actions_parse(i, doc, nact))) + if ((action = actions_parse(nact))) mouse_bind(buttonstr, contextstr, mact, action); - nact = parse_find_node("action", nact->next); + nact = obt_parse_find_node(nact->next, "action"); } g_free(buttonstr); next_nbut: - nbut = parse_find_node("mousebind", nbut->next); + nbut = obt_parse_find_node(nbut->next, "mousebind"); } g_free(contextstr); next_n: - n = parse_find_node("context", n->next); + n = obt_parse_find_node(n->next, "context"); } } -static void parse_focus(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_focus(xmlNodePtr node, gpointer d) { xmlNodePtr n; node = node->children; - if ((n = parse_find_node("focusNew", node))) - config_focus_new = parse_bool(doc, n); - if ((n = parse_find_node("followMouse", node))) - config_focus_follow = parse_bool(doc, n); - if ((n = parse_find_node("focusDelay", node))) - config_focus_delay = parse_int(doc, n); - if ((n = parse_find_node("raiseOnFocus", node))) - config_focus_raise = parse_bool(doc, n); - if ((n = parse_find_node("focusLast", node))) - config_focus_last = parse_bool(doc, n); - if ((n = parse_find_node("underMouse", node))) - config_focus_under_mouse = parse_bool(doc, n); + if ((n = obt_parse_find_node(node, "focusNew"))) + config_focus_new = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "followMouse"))) + config_focus_follow = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "focusDelay"))) + config_focus_delay = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "raiseOnFocus"))) + config_focus_raise = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "focusLast"))) + config_focus_last = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "underMouse"))) + config_focus_under_mouse = obt_parse_node_bool(n); } -static void parse_placement(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_placement(xmlNodePtr node, gpointer d) { xmlNodePtr n; node = node->children; - if ((n = parse_find_node("policy", node))) - if (parse_contains("UnderMouse", doc, n)) + if ((n = obt_parse_find_node(node, "policy"))) + if (obt_parse_node_contains(n, "UnderMouse")) config_place_policy = OB_PLACE_POLICY_MOUSE; - if ((n = parse_find_node("center", node))) - config_place_center = parse_bool(doc, n); - if ((n = parse_find_node("active", node))) - config_place_active = parse_bool(doc, n); + if ((n = obt_parse_find_node(node, "center"))) + config_place_center = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "active"))) + config_place_active = obt_parse_node_bool(n); } -static void parse_margins(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_margins(xmlNodePtr node, gpointer d) { xmlNodePtr n; node = node->children; - if ((n = parse_find_node("top", node))) - config_margins.top = MAX(0, parse_int(doc, n)); - if ((n = parse_find_node("left", node))) - config_margins.left = MAX(0, parse_int(doc, n)); - if ((n = parse_find_node("right", node))) - config_margins.right = MAX(0, parse_int(doc, n)); - if ((n = parse_find_node("bottom", node))) - config_margins.bottom = MAX(0, parse_int(doc, n)); + if ((n = obt_parse_find_node(node, "top"))) + config_margins.top = MAX(0, obt_parse_node_int(n)); + if ((n = obt_parse_find_node(node, "left"))) + config_margins.left = MAX(0, obt_parse_node_int(n)); + if ((n = obt_parse_find_node(node, "right"))) + config_margins.right = MAX(0, obt_parse_node_int(n)); + if ((n = obt_parse_find_node(node, "bottom"))) + config_margins.bottom = MAX(0, obt_parse_node_int(n)); } -static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_theme(xmlNodePtr node, gpointer d) { xmlNodePtr n; node = node->children; - if ((n = parse_find_node("name", node))) { + if ((n = obt_parse_find_node(node, "name"))) { gchar *c; g_free(config_theme); - c = parse_string(doc, n); + c = obt_parse_node_string(n); config_theme = parse_expand_tilde(c); g_free(c); } - if ((n = parse_find_node("titleLayout", node))) { + if ((n = obt_parse_find_node(node, "titleLayout"))) { gchar *c, *d; g_free(config_title_layout); - config_title_layout = parse_string(doc, n); + config_title_layout = obt_parse_node_string(n); /* replace duplicates with spaces */ for (c = config_title_layout; *c != '\0'; ++c) for (d = c+1; *d != '\0'; ++d) if (*c == *d) *d = ' '; } - if ((n = parse_find_node("keepBorder", node))) - config_theme_keepborder = parse_bool(doc, n); - if ((n = parse_find_node("animateIconify", node))) - config_animate_iconify = parse_bool(doc, n); + if ((n = obt_parse_find_node(node, "keepBorder"))) + config_theme_keepborder = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "animateIconify"))) + config_animate_iconify = obt_parse_node_bool(n); - n = parse_find_node("font", node); + n = obt_parse_find_node(node, "font"); while (n) { xmlNodePtr fnode; RrFont **font; @@ -551,35 +539,35 @@ static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, RrFontWeight weight = RrDefaultFontWeight; RrFontSlant slant = RrDefaultFontSlant; - if (parse_attr_contains("ActiveWindow", n, "place")) + if (obt_parse_attr_contains(n, "place", "ActiveWindow")) font = &config_font_activewindow; - else if (parse_attr_contains("InactiveWindow", n, "place")) + else if (obt_parse_attr_contains(n, "place", "InactiveWindow")) font = &config_font_inactivewindow; - else if (parse_attr_contains("MenuHeader", n, "place")) + else if (obt_parse_attr_contains(n, "place", "MenuHeader")) font = &config_font_menutitle; - else if (parse_attr_contains("MenuItem", n, "place")) + else if (obt_parse_attr_contains(n, "place", "MenuItem")) font = &config_font_menuitem; - else if (parse_attr_contains("OnScreenDisplay", n, "place")) + else if (obt_parse_attr_contains(n, "place", "OnScreenDisplay")) font = &config_font_osd; else goto next_font; - if ((fnode = parse_find_node("name", n->children))) { + if ((fnode = obt_parse_find_node(n->children, "name"))) { g_free(name); - name = parse_string(doc, fnode); + name = obt_parse_node_string(fnode); } - if ((fnode = parse_find_node("size", n->children))) { - int s = parse_int(doc, fnode); + if ((fnode = obt_parse_find_node(n->children, "size"))) { + int s = obt_parse_node_int(fnode); if (s > 0) size = s; } - if ((fnode = parse_find_node("weight", n->children))) { - gchar *w = parse_string(doc, fnode); + if ((fnode = obt_parse_find_node(n->children, "weight"))) { + gchar *w = obt_parse_node_string(fnode); if (!g_ascii_strcasecmp(w, "Bold")) weight = RR_FONTWEIGHT_BOLD; g_free(w); } - if ((fnode = parse_find_node("slant", n->children))) { - gchar *s = parse_string(doc, fnode); + if ((fnode = obt_parse_find_node(n->children, "slant"))) { + gchar *s = obt_parse_node_string(fnode); if (!g_ascii_strcasecmp(s, "Italic")) slant = RR_FONTSLANT_ITALIC; if (!g_ascii_strcasecmp(s, "Oblique")) @@ -590,28 +578,27 @@ static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, *font = RrFontOpen(ob_rr_inst, name, size, weight, slant); g_free(name); next_font: - n = parse_find_node("font", n->next); + n = obt_parse_find_node(n->next, "font"); } } -static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_desktops(xmlNodePtr node, gpointer d) { xmlNodePtr n; node = node->children; - if ((n = parse_find_node("number", node))) { - gint d = parse_int(doc, n); + if ((n = obt_parse_find_node(node, "number"))) { + gint d = obt_parse_node_int(n); if (d > 0) config_desktops_num = d; } - if ((n = parse_find_node("firstdesk", node))) { - gint d = parse_int(doc, n); + if ((n = obt_parse_find_node(node, "firstdesk"))) { + gint d = obt_parse_node_int(n); if (d > 0) config_screen_firstdesk = (unsigned) d; } - if ((n = parse_find_node("names", node))) { + if ((n = obt_parse_find_node(node, "names"))) { GSList *it; xmlNodePtr nname; @@ -620,123 +607,122 @@ static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, g_slist_free(config_desktops_names); config_desktops_names = NULL; - nname = parse_find_node("name", n->children); + nname = obt_parse_find_node(n->children, "name"); while (nname) { - config_desktops_names = g_slist_append(config_desktops_names, - parse_string(doc, nname)); - nname = parse_find_node("name", nname->next); + config_desktops_names = + g_slist_append(config_desktops_names, + obt_parse_node_string(nname)); + nname = obt_parse_find_node(nname->next, "name"); } } - if ((n = parse_find_node("popupTime", node))) - config_desktop_popup_time = parse_int(doc, n); + if ((n = obt_parse_find_node(node, "popupTime"))) + config_desktop_popup_time = obt_parse_node_int(n); } -static void parse_resize(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_resize(xmlNodePtr node, gpointer d) { xmlNodePtr n; node = node->children; - if ((n = parse_find_node("drawContents", node))) - config_resize_redraw = parse_bool(doc, n); - if ((n = parse_find_node("popupShow", node))) { - config_resize_popup_show = parse_int(doc, n); - if (parse_contains("Always", doc, n)) + if ((n = obt_parse_find_node(node, "drawContents"))) + config_resize_redraw = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "popupShow"))) { + config_resize_popup_show = obt_parse_node_int(n); + if (obt_parse_node_contains(n, "Always")) config_resize_popup_show = 2; - else if (parse_contains("Never", doc, n)) + else if (obt_parse_node_contains(n, "Never")) config_resize_popup_show = 0; - else if (parse_contains("Nonpixel", doc, n)) + else if (obt_parse_node_contains(n, "Nonpixel")) config_resize_popup_show = 1; } - if ((n = parse_find_node("popupPosition", node))) { - if (parse_contains("Top", doc, n)) + if ((n = obt_parse_find_node(node, "popupPosition"))) { + if (obt_parse_node_contains(n, "Top")) config_resize_popup_pos = OB_RESIZE_POS_TOP; - else if (parse_contains("Center", doc, n)) + else if (obt_parse_node_contains(n, "Center")) config_resize_popup_pos = OB_RESIZE_POS_CENTER; - else if (parse_contains("Fixed", doc, n)) { + else if (obt_parse_node_contains(n, "Fixed")) { config_resize_popup_pos = OB_RESIZE_POS_FIXED; - if ((n = parse_find_node("popupFixedPosition", node))) { + if ((n = obt_parse_find_node(node, "popupFixedPosition"))) { xmlNodePtr n2; - if ((n2 = parse_find_node("x", n->children))) - config_parse_gravity_coord(doc, n2, + if ((n2 = obt_parse_find_node(n->children, "x"))) + config_parse_gravity_coord(n2, &config_resize_popup_fixed.x); - if ((n2 = parse_find_node("y", n->children))) - config_parse_gravity_coord(doc, n2, + if ((n2 = obt_parse_find_node(n->children, "y"))) + config_parse_gravity_coord(n2, &config_resize_popup_fixed.y); } } } } -static void parse_dock(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_dock(xmlNodePtr node, gpointer d) { xmlNodePtr n; node = node->children; - if ((n = parse_find_node("position", node))) { - if (parse_contains("TopLeft", doc, n)) + if ((n = obt_parse_find_node(node, "position"))) { + if (obt_parse_node_contains(n, "TopLeft")) config_dock_floating = FALSE, config_dock_pos = OB_DIRECTION_NORTHWEST; - else if (parse_contains("Top", doc, n)) + else if (obt_parse_node_contains(n, "Top")) config_dock_floating = FALSE, config_dock_pos = OB_DIRECTION_NORTH; - else if (parse_contains("TopRight", doc, n)) + else if (obt_parse_node_contains(n, "TopRight")) config_dock_floating = FALSE, config_dock_pos = OB_DIRECTION_NORTHEAST; - else if (parse_contains("Right", doc, n)) + else if (obt_parse_node_contains(n, "Right")) config_dock_floating = FALSE, config_dock_pos = OB_DIRECTION_EAST; - else if (parse_contains("BottomRight", doc, n)) + else if (obt_parse_node_contains(n, "BottomRight")) config_dock_floating = FALSE, config_dock_pos = OB_DIRECTION_SOUTHEAST; - else if (parse_contains("Bottom", doc, n)) + else if (obt_parse_node_contains(n, "Bottom")) config_dock_floating = FALSE, config_dock_pos = OB_DIRECTION_SOUTH; - else if (parse_contains("BottomLeft", doc, n)) + else if (obt_parse_node_contains(n, "BottomLeft")) config_dock_floating = FALSE, config_dock_pos = OB_DIRECTION_SOUTHWEST; - else if (parse_contains("Left", doc, n)) + else if (obt_parse_node_contains(n, "Left")) config_dock_floating = FALSE, config_dock_pos = OB_DIRECTION_WEST; - else if (parse_contains("Floating", doc, n)) + else if (obt_parse_node_contains(n, "Floating")) config_dock_floating = TRUE; } if (config_dock_floating) { - if ((n = parse_find_node("floatingX", node))) - config_dock_x = parse_int(doc, n); - if ((n = parse_find_node("floatingY", node))) - config_dock_y = parse_int(doc, n); + if ((n = obt_parse_find_node(node, "floatingX"))) + config_dock_x = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "floatingY"))) + config_dock_y = obt_parse_node_int(n); } else { - if ((n = parse_find_node("noStrut", node))) - config_dock_nostrut = parse_bool(doc, n); + if ((n = obt_parse_find_node(node, "noStrut"))) + config_dock_nostrut = obt_parse_node_bool(n); } - if ((n = parse_find_node("stacking", node))) { - if (parse_contains("above", doc, n)) - config_dock_layer = OB_STACKING_LAYER_ABOVE; - else if (parse_contains("normal", doc, n)) + if ((n = obt_parse_find_node(node, "stacking"))) { + if (obt_parse_node_contains(n, "normal")) config_dock_layer = OB_STACKING_LAYER_NORMAL; - else if (parse_contains("below", doc, n)) + else if (obt_parse_node_contains(n, "below")) config_dock_layer = OB_STACKING_LAYER_BELOW; + else if (obt_parse_node_contains(n, "above")) + config_dock_layer = OB_STACKING_LAYER_ABOVE; } - if ((n = parse_find_node("direction", node))) { - if (parse_contains("horizontal", doc, n)) + if ((n = obt_parse_find_node(node, "direction"))) { + if (obt_parse_node_contains(n, "horizontal")) config_dock_orient = OB_ORIENTATION_HORZ; - else if (parse_contains("vertical", doc, n)) + else if (obt_parse_node_contains(n, "vertical")) config_dock_orient = OB_ORIENTATION_VERT; } - if ((n = parse_find_node("autoHide", node))) - config_dock_hide = parse_bool(doc, n); - if ((n = parse_find_node("hideDelay", node))) - config_dock_hide_delay = parse_int(doc, n); - if ((n = parse_find_node("showDelay", node))) - config_dock_show_delay = parse_int(doc, n); - if ((n = parse_find_node("moveButton", node))) { - gchar *str = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "autoHide"))) + config_dock_hide = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "hideDelay"))) + config_dock_hide_delay = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "showDelay"))) + config_dock_show_delay = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "moveButton"))) { + gchar *str = obt_parse_node_string(n); guint b, s; if (translate_button(str, &s, &b)) { config_dock_app_move_button = b; @@ -748,40 +734,38 @@ static void parse_dock(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } } -static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_menu(xmlNodePtr node, gpointer d) { xmlNodePtr n; for (node = node->children; node; node = node->next) { if (!xmlStrcasecmp(node->name, (const xmlChar*) "file")) { gchar *c; - c = parse_string(doc, node); + c = obt_parse_node_string(node); config_menu_files = g_slist_append(config_menu_files, parse_expand_tilde(c)); g_free(c); } - if ((n = parse_find_node("hideDelay", node))) - config_menu_hide_delay = parse_int(doc, n); - if ((n = parse_find_node("middle", node))) - config_menu_middle = parse_bool(doc, n); - if ((n = parse_find_node("submenuShowDelay", node))) - config_submenu_show_delay = parse_int(doc, n); - if ((n = parse_find_node("applicationIcons", node))) - config_menu_client_list_icons = parse_bool(doc, n); + if ((n = obt_parse_find_node(node, "hideDelay"))) + config_menu_hide_delay = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "middle"))) + config_menu_middle = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "submenuShowDelay"))) + config_submenu_show_delay = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "applicationIcons"))) + config_menu_client_list_icons = obt_parse_node_bool(n); } } -static void parse_resistance(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_resistance(xmlNodePtr node, gpointer d) { xmlNodePtr n; node = node->children; - if ((n = parse_find_node("strength", node))) - config_resist_win = parse_int(doc, n); - if ((n = parse_find_node("screen_edge_strength", node))) - config_resist_edge = parse_int(doc, n); + if ((n = obt_parse_find_node(node, "strength"))) + config_resist_win = obt_parse_node_int(n); + if ((n = obt_parse_find_node(node, "screen_edge_strength"))) + config_resist_edge = obt_parse_node_int(n); } typedef struct @@ -872,7 +856,7 @@ static void bind_default_mouse(void) actions_parse_string(it->actname)); } -void config_startup(ObParseInst *i) +void config_startup(ObtParseInst *i) { config_focus_new = TRUE; config_focus_follow = FALSE; @@ -881,17 +865,17 @@ void config_startup(ObParseInst *i) config_focus_last = TRUE; config_focus_under_mouse = FALSE; - parse_register(i, "focus", parse_focus, NULL); + obt_parse_register(i, "focus", parse_focus, NULL); config_place_policy = OB_PLACE_POLICY_SMART; config_place_center = TRUE; config_place_active = FALSE; - parse_register(i, "placement", parse_placement, NULL); + obt_parse_register(i, "placement", parse_placement, NULL); STRUT_PARTIAL_SET(config_margins, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - parse_register(i, "margins", parse_margins, NULL); + obt_parse_register(i, "margins", parse_margins, NULL); config_theme = NULL; @@ -904,14 +888,14 @@ void config_startup(ObParseInst *i) config_font_menuitem = NULL; config_font_menutitle = NULL; - parse_register(i, "theme", parse_theme, NULL); + obt_parse_register(i, "theme", parse_theme, NULL); config_desktops_num = 4; config_screen_firstdesk = 1; config_desktops_names = NULL; config_desktop_popup_time = 875; - parse_register(i, "desktops", parse_desktops, NULL); + obt_parse_register(i, "desktops", parse_desktops, NULL); config_resize_redraw = TRUE; config_resize_popup_show = 1; /* nonpixel increments */ @@ -919,7 +903,7 @@ void config_startup(ObParseInst *i) GRAVITY_COORD_SET(config_resize_popup_fixed.x, 0, FALSE, FALSE); GRAVITY_COORD_SET(config_resize_popup_fixed.y, 0, FALSE, FALSE); - parse_register(i, "resize", parse_resize, NULL); + obt_parse_register(i, "resize", parse_resize, NULL); config_dock_layer = OB_STACKING_LAYER_ABOVE; config_dock_pos = OB_DIRECTION_NORTHEAST; @@ -934,14 +918,14 @@ void config_startup(ObParseInst *i) config_dock_app_move_button = 2; /* middle */ config_dock_app_move_modifiers = 0; - parse_register(i, "dock", parse_dock, NULL); + obt_parse_register(i, "dock", parse_dock, NULL); translate_key("C-g", &config_keyboard_reset_state, &config_keyboard_reset_keycode); bind_default_keyboard(); - parse_register(i, "keyboard", parse_keyboard, NULL); + obt_parse_register(i, "keyboard", parse_keyboard, NULL); config_mouse_threshold = 8; config_mouse_dclicktime = 200; @@ -949,12 +933,12 @@ void config_startup(ObParseInst *i) bind_default_mouse(); - parse_register(i, "mouse", parse_mouse, NULL); + obt_parse_register(i, "mouse", parse_mouse, NULL); config_resist_win = 10; config_resist_edge = 20; - parse_register(i, "resistance", parse_resistance, NULL); + obt_parse_register(i, "resistance", parse_resistance, NULL); config_menu_hide_delay = 250; config_menu_middle = FALSE; @@ -962,11 +946,11 @@ void config_startup(ObParseInst *i) config_menu_client_list_icons = TRUE; config_menu_files = NULL; - parse_register(i, "menu", parse_menu, NULL); + obt_parse_register(i, "menu", parse_menu, NULL); config_per_app_settings = NULL; - parse_register(i, "applications", parse_per_app_settings, NULL); + obt_parse_register(i, "applications", parse_per_app_settings, NULL); } void config_shutdown(void) diff --git a/openbox/config.h b/openbox/config.h index 240b04f1..ac188e31 100644 --- a/openbox/config.h +++ b/openbox/config.h @@ -26,11 +26,10 @@ #include "geom.h" #include "moveresize.h" #include "render/render.h" +#include "obt/parse.h" #include <glib.h> -struct _ObParseInst; - typedef struct _ObAppSettings ObAppSettings; struct _ObAppSettings @@ -183,7 +182,7 @@ extern GSList *config_menu_files; /*! Per app settings */ extern GSList *config_per_app_settings; -void config_startup(struct _ObParseInst *i); +void config_startup(ObtParseInst *i); void config_shutdown(); /*! Create an ObAppSettings structure with the default values */ diff --git a/openbox/menu.c b/openbox/menu.c index 67aff620..97af104e 100644 --- a/openbox/menu.c +++ b/openbox/menu.c @@ -34,7 +34,7 @@ #include "client_list_menu.h" #include "client_list_combined_menu.h" #include "gettext.h" -#include "parser/parse.h" +#include "obt/parse.h" typedef struct _ObMenuParseState ObMenuParseState; @@ -45,18 +45,14 @@ struct _ObMenuParseState }; static GHashTable *menu_hash = NULL; -static ObParseInst *menu_parse_inst; +static ObtParseInst *menu_parse_inst; static ObMenuParseState menu_parse_state; static gboolean menu_can_hide = FALSE; static void menu_destroy_hash_value(ObMenu *self); -static void parse_menu_item(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data); -static void parse_menu_separator(ObParseInst *i, - xmlDocPtr doc, xmlNodePtr node, - gpointer data); -static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data); +static void parse_menu_item(xmlNodePtr node, gpointer data); +static void parse_menu_separator(xmlNodePtr node, gpointer data); +static void parse_menu(xmlNodePtr node, gpointer data); static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut, gchar **strippedlabel, guint *position, gboolean *always_show); @@ -71,8 +67,6 @@ static void client_dest(ObClient *client, gpointer data) void menu_startup(gboolean reconfig) { - xmlDocPtr doc; - xmlNodePtr node; gboolean loaded = FALSE; GSList *it; @@ -83,29 +77,39 @@ void menu_startup(gboolean reconfig) client_list_combined_menu_startup(reconfig); client_menu_startup(); - menu_parse_inst = parse_startup(); + menu_parse_inst = obt_parse_instance_new(); menu_parse_state.parent = NULL; menu_parse_state.pipe_creator = NULL; - parse_register(menu_parse_inst, "menu", parse_menu, &menu_parse_state); - parse_register(menu_parse_inst, "item", parse_menu_item, - &menu_parse_state); - parse_register(menu_parse_inst, "separator", - parse_menu_separator, &menu_parse_state); + obt_parse_register(menu_parse_inst, "menu", parse_menu, &menu_parse_state); + obt_parse_register(menu_parse_inst, "item", parse_menu_item, + &menu_parse_state); + obt_parse_register(menu_parse_inst, "separator", + parse_menu_separator, &menu_parse_state); for (it = config_menu_files; it; it = g_slist_next(it)) { - if (parse_load_menu(it->data, &doc, &node)) { + if (obt_parse_load_config_file(menu_parse_inst, + "openbox", + it->data, + "openbox_menu")) + { loaded = TRUE; - parse_tree(menu_parse_inst, doc, node->children); - xmlFreeDoc(doc); + obt_parse_tree(menu_parse_inst, + obt_parse_instance_root(menu_parse_inst)->children); + obt_parse_close(menu_parse_inst); } else g_message(_("Unable to find a valid menu file '%s'"), (const gchar*)it->data); } if (!loaded) { - if (parse_load_menu("menu.xml", &doc, &node)) { - parse_tree(menu_parse_inst, doc, node->children); - xmlFreeDoc(doc); + if (obt_parse_load_config_file(menu_parse_inst, + "openbox", + "menu.xml", + "openbox_menu")) + { + obt_parse_tree(menu_parse_inst, + obt_parse_instance_root(menu_parse_inst)->children); + obt_parse_close(menu_parse_inst); } else g_message(_("Unable to find a valid menu file '%s'"), "menu.xml"); @@ -122,7 +126,7 @@ void menu_shutdown(gboolean reconfig) if (!reconfig) client_remove_destroy_notify(client_dest); - parse_shutdown(menu_parse_inst); + obt_parse_instance_unref(menu_parse_inst); menu_parse_inst = NULL; client_list_menu_shutdown(reconfig); @@ -156,7 +160,6 @@ void menu_clear_pipe_caches(void) void menu_pipe_execute(ObMenu *self) { - xmlDocPtr doc; xmlNodePtr node; gchar *output; GError *err = NULL; @@ -173,13 +176,13 @@ void menu_pipe_execute(ObMenu *self) return; } - if (parse_load_mem(output, strlen(output), - "openbox_pipe_menu", &doc, &node)) + if (obt_parse_load_mem(menu_parse_inst, output, strlen(output), + "openbox_pipe_menu")) { menu_parse_state.pipe_creator = self; menu_parse_state.parent = self; - parse_tree(menu_parse_inst, doc, node->children); - xmlFreeDoc(doc); + obt_parse_tree(menu_parse_inst, node->children); + obt_parse_close(menu_parse_inst); } else { g_message(_("Invalid output from pipe-menu '%s'"), self->execute); } @@ -262,19 +265,18 @@ static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut, return shortcut; } -static void parse_menu_item(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_menu_item(xmlNodePtr node, gpointer data) { ObMenuParseState *state = data; gchar *label; if (state->parent) { - if (parse_attr_string("label", node, &label)) { + if (obt_parse_attr_string(node, "label", &label)) { GSList *acts = NULL; for (node = node->children; node; node = node->next) if (!xmlStrcasecmp(node->name, (const xmlChar*) "action")) { - ObActionsAct *a = actions_parse(i, doc, node); + ObActionsAct *a = actions_parse(node); if (a) acts = g_slist_append(acts, a); } @@ -284,16 +286,14 @@ static void parse_menu_item(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } } -static void parse_menu_separator(ObParseInst *i, - xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_menu_separator(xmlNodePtr node, gpointer data) { ObMenuParseState *state = data; if (state->parent) { gchar *label; - if (!parse_attr_string("label", node, &label)) + if (!obt_parse_attr_string(node, "label", &label)) label = NULL; menu_add_separator(state->parent, -1, label); @@ -301,30 +301,29 @@ static void parse_menu_separator(ObParseInst *i, } } -static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data) +static void parse_menu(xmlNodePtr node, gpointer data) { ObMenuParseState *state = data; gchar *name = NULL, *title = NULL, *script = NULL; ObMenu *menu; - if (!parse_attr_string("id", node, &name)) + if (!obt_parse_attr_string(node, "id", &name)) goto parse_menu_fail; if (!g_hash_table_lookup(menu_hash, name)) { - if (!parse_attr_string("label", node, &title)) + if (!obt_parse_attr_string(node, "label", &title)) goto parse_menu_fail; if ((menu = menu_new(name, title, TRUE, NULL))) { menu->pipe_creator = state->pipe_creator; - if (parse_attr_string("execute", node, &script)) { + if (obt_parse_attr_string(node, "execute", &script)) { menu->execute = parse_expand_tilde(script); } else { ObMenu *old; old = state->parent; state->parent = menu; - parse_tree(i, doc, node->children); + obt_parse_tree(menu_parse_inst, node->children); state->parent = old; } } diff --git a/openbox/menu.h b/openbox/menu.h index 8832a124..d759a993 100644 --- a/openbox/menu.h +++ b/openbox/menu.h @@ -22,7 +22,7 @@ #include "window.h" #include "geom.h" #include "render/render.h" -#include "parser/parse.h" +#include "obt/parse.h" #include <glib.h> diff --git a/openbox/openbox.c b/openbox/openbox.c index aefe6851..2cab7e27 100644 --- a/openbox/openbox.c +++ b/openbox/openbox.c @@ -42,11 +42,12 @@ #include "ping.h" #include "mainloop.h" #include "gettext.h" -#include "parser/parse.h" #include "render/render.h" #include "render/theme.h" #include "obt/display.h" #include "obt/prop.h" +#include "obt/keyboard.h" +#include "obt/parse.h" #ifdef HAVE_FCNTL_H # include <fcntl.h> @@ -214,13 +215,11 @@ gint main(gint argc, gchar **argv) keys[OB_KEY_DOWN] = obt_keyboard_keysym_to_keycode(XK_Down); { - ObParseInst *i; - xmlDocPtr doc; - xmlNodePtr node; + ObtParseInst *i; /* startup the parsing so everything can register sections of the rc */ - i = parse_startup(); + i = obt_parse_instance_new(); /* register all the available actions */ actions_startup(reconfigure); @@ -228,9 +227,11 @@ gint main(gint argc, gchar **argv) config_startup(i); /* parse/load user options */ - if (parse_load_rc(NULL, &doc, &node)) { - parse_tree(i, doc, node->xmlChildrenNode); - parse_close(doc); + if (obt_parse_load_config_file(i, "openbox", "rc.xml", + "openbox_config")) + { + obt_parse_tree(i, obt_parse_instance_root(i)->children); + obt_parse_close(i); } else g_message(_("Unable to find a valid config file, using some simple defaults")); @@ -241,7 +242,7 @@ gint main(gint argc, gchar **argv) */ /* we're done with parsing now, kill it */ - parse_shutdown(i); + obt_parse_instance_unref(i); } /* load the theme specified in the rc file */ diff --git a/openbox/resist.c b/openbox/resist.c index f21eb8e6..3bcb95ff 100644 --- a/openbox/resist.c +++ b/openbox/resist.c @@ -17,14 +17,13 @@ See the COPYING file for a copy of the GNU General Public License. */ +#include "resist.h" #include "client.h" #include "frame.h" #include "stacking.h" #include "screen.h" #include "dock.h" #include "config.h" -#include "resist.h" -#include "parser/parse.h" #include <glib.h> diff --git a/openbox/session.c b/openbox/session.c index 9eb0da9b..22b47e78 100644 --- a/openbox/session.c +++ b/openbox/session.c @@ -40,7 +40,7 @@ GList* session_state_find(struct _ObClient *c) { return NULL; } #include "client.h" #include "focus.h" #include "gettext.h" -#include "parser/parse.h" +#include "obt/parse.h" #include <time.h> #include <errno.h> @@ -651,101 +651,106 @@ GList* session_state_find(ObClient *c) static void session_load_file(const gchar *path) { - xmlDocPtr doc; + ObtParseInst *i; xmlNodePtr node, n, m; GList *it, *inext; - if (!parse_load(path, "openbox_session", &doc, &node)) + i = obt_parse_instance_new(); + + if (!obt_parse_load_file(i, path, "openbox_session")) { + obt_parse_instance_unref(i); return; + } + node = obt_parse_instance_root(i); - if ((n = parse_find_node("desktop", node->children))) - session_desktop = parse_int(doc, n); + if ((n = obt_parse_find_node(node->children, "desktop"))) + session_desktop = obt_parse_node_int(n); - if ((n = parse_find_node("numdesktops", node->children))) - session_num_desktops = parse_int(doc, n); + if ((n = obt_parse_find_node(node->children, "numdesktops"))) + session_num_desktops = obt_parse_node_int(n); - if ((n = parse_find_node("desktoplayout", node->children))) { + if ((n = obt_parse_find_node(node->children, "desktoplayout"))) { /* make sure they are all there for it to be valid */ - if ((m = parse_find_node("orientation", n->children))) - session_desktop_layout.orientation = parse_int(doc, m); - if (m && (m = parse_find_node("startcorner", n->children))) - session_desktop_layout.start_corner = parse_int(doc, m); - if (m && (m = parse_find_node("columns", n->children))) - session_desktop_layout.columns = parse_int(doc, m); - if (m && (m = parse_find_node("rows", n->children))) - session_desktop_layout.rows = parse_int(doc, m); + if ((m = obt_parse_find_node(n->children, "orientation"))) + session_desktop_layout.orientation = obt_parse_node_int(m); + if (m && (m = obt_parse_find_node(n->children, "startcorner"))) + session_desktop_layout.start_corner = obt_parse_node_int(m); + if (m && (m = obt_parse_find_node(n->children, "columns"))) + session_desktop_layout.columns = obt_parse_node_int(m); + if (m && (m = obt_parse_find_node(n->children, "rows"))) + session_desktop_layout.rows = obt_parse_node_int(m); session_desktop_layout_present = m != NULL; } - if ((n = parse_find_node("desktopnames", node->children))) { - for (m = parse_find_node("name", n->children); m; - m = parse_find_node("name", m->next)) + if ((n = obt_parse_find_node(node->children, "desktopnames"))) { + for (m = obt_parse_find_node(n->children, "name"); m; + m = obt_parse_find_node(m->next, "name")) { session_desktop_names = g_slist_append(session_desktop_names, - parse_string(doc, m)); + obt_parse_node_string(m)); } } - for (node = parse_find_node("window", node->children); node != NULL; - node = parse_find_node("window", node->next)) + for (node = obt_parse_find_node(node->children, "window"); node != NULL; + node = obt_parse_find_node(node->next, "window")) { ObSessionState *state; state = g_new0(ObSessionState, 1); - if (!parse_attr_string("id", node, &state->id)) - if (!parse_attr_string("command", node, &state->command)) + if (!obt_parse_attr_string(node, "id", &state->id)) + if (!obt_parse_attr_string(node, "command", &state->command)) goto session_load_bail; - if (!(n = parse_find_node("name", node->children))) + if (!(n = obt_parse_find_node(node->children, "name"))) goto session_load_bail; - state->name = parse_string(doc, n); - if (!(n = parse_find_node("class", node->children))) + state->name = obt_parse_node_string(n); + if (!(n = obt_parse_find_node(node->children, "class"))) goto session_load_bail; - state->class = parse_string(doc, n); - if (!(n = parse_find_node("role", node->children))) + state->class = obt_parse_node_string(n); + if (!(n = obt_parse_find_node(node->children, "role"))) goto session_load_bail; - state->role = parse_string(doc, n); - if (!(n = parse_find_node("windowtype", node->children))) + state->role = obt_parse_node_string(n); + if (!(n = obt_parse_find_node(node->children, "windowtype"))) goto session_load_bail; - state->type = parse_int(doc, n); - if (!(n = parse_find_node("desktop", node->children))) + state->type = obt_parse_node_int(n); + if (!(n = obt_parse_find_node(node->children, "desktop"))) goto session_load_bail; - state->desktop = parse_int(doc, n); - if (!(n = parse_find_node("x", node->children))) + state->desktop = obt_parse_node_int(n); + if (!(n = obt_parse_find_node(node->children, "x"))) goto session_load_bail; - state->x = parse_int(doc, n); - if (!(n = parse_find_node("y", node->children))) + state->x = obt_parse_node_int(n); + if (!(n = obt_parse_find_node(node->children, "y"))) goto session_load_bail; - state->y = parse_int(doc, n); - if (!(n = parse_find_node("width", node->children))) + state->y = obt_parse_node_int(n); + if (!(n = obt_parse_find_node(node->children, "width"))) goto session_load_bail; - state->w = parse_int(doc, n); - if (!(n = parse_find_node("height", node->children))) + state->w = obt_parse_node_int(n); + if (!(n = obt_parse_find_node(node->children, "height"))) goto session_load_bail; - state->h = parse_int(doc, n); + state->h = obt_parse_node_int(n); state->shaded = - parse_find_node("shaded", node->children) != NULL; + obt_parse_find_node(node->children, "shaded") != NULL; state->iconic = - parse_find_node("iconic", node->children) != NULL; + obt_parse_find_node(node->children, "iconic") != NULL; state->skip_pager = - parse_find_node("skip_pager", node->children) != NULL; + obt_parse_find_node(node->children, "skip_pager") != NULL; state->skip_taskbar = - parse_find_node("skip_taskbar", node->children) != NULL; + obt_parse_find_node(node->children, "skip_taskbar") != NULL; state->fullscreen = - parse_find_node("fullscreen", node->children) != NULL; + obt_parse_find_node(node->children, "fullscreen") != NULL; state->above = - parse_find_node("above", node->children) != NULL; + obt_parse_find_node(node->children, "above") != NULL; state->below = - parse_find_node("below", node->children) != NULL; + obt_parse_find_node(node->children, "below") != NULL; state->max_horz = - parse_find_node("max_horz", node->children) != NULL; + obt_parse_find_node(node->children, "max_horz") != NULL; state->max_vert = - parse_find_node("max_vert", node->children) != NULL; + obt_parse_find_node(node->children, "max_vert") != NULL; state->undecorated = - parse_find_node("undecorated", node->children) != NULL; + obt_parse_find_node(node->children, "undecorated") != NULL; state->focused = - parse_find_node("focused", node->children) != NULL; + obt_parse_find_node(node->children, "focused") != NULL; /* save this. they are in the file in stacking order, so preserve that order here */ @@ -800,7 +805,7 @@ static void session_load_file(const gchar *path) } } - xmlFreeDoc(doc); + obt_parse_instance_unref(i); } #endif diff --git a/parser/Makefile b/parser/Makefile deleted file mode 100644 index b90edacf..00000000 --- a/parser/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -all clean install: - $(MAKE) -C .. -$(MAKEFLAGS) $@ - -.PHONY: all clean install diff --git a/parser/obparser-4.0.pc.in b/parser/obparser-4.0.pc.in deleted file mode 100644 index 75d04c99..00000000 --- a/parser/obparser-4.0.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: ObParser -Description: Openbox config file parsing library -Version: @VERSION@ -Requires: libxml-2.0 glib-2.0 -Libs: -L${libdir} -lobparser -Cflags: -I${includedir}/openbox/@OB_VERSION@ diff --git a/parser/parse.c b/parser/parse.c deleted file mode 100644 index 6daa8517..00000000 --- a/parser/parse.c +++ /dev/null @@ -1,533 +0,0 @@ -/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- - - parse.c for the Openbox window manager - Copyright (c) 2003-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 "parse.h" -#include <glib.h> -#include <string.h> -#include <errno.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <unistd.h> - -static gboolean xdg_start; -static gchar *xdg_config_home_path; -static gchar *xdg_data_home_path; -static GSList *xdg_config_dir_paths; -static GSList *xdg_data_dir_paths; - -struct Callback { - gchar *tag; - ParseCallback func; - gpointer data; -}; - -struct _ObParseInst { - GHashTable *callbacks; -}; - -static void destfunc(struct Callback *c) -{ - g_free(c->tag); - g_free(c); -} - -ObParseInst* parse_startup(void) -{ - ObParseInst *i = g_new(ObParseInst, 1); - i->callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, - (GDestroyNotify)destfunc); - return i; -} - -void parse_shutdown(ObParseInst *i) -{ - if (i) { - g_hash_table_destroy(i->callbacks); - g_free(i); - } -} - -void parse_register(ObParseInst *i, const gchar *tag, - ParseCallback func, gpointer data) -{ - struct Callback *c; - - if ((c = g_hash_table_lookup(i->callbacks, tag))) { - g_error("Tag '%s' already registered", tag); - return; - } - - c = g_new(struct Callback, 1); - c->tag = g_strdup(tag); - c->func = func; - c->data = data; - g_hash_table_insert(i->callbacks, c->tag, c); -} - -gboolean parse_load_rc(const gchar *type, xmlDocPtr *doc, xmlNodePtr *root) -{ - GSList *it; - gboolean r = FALSE; - gchar *fname; - - if (type == NULL) - fname = g_strdup("rc.xml"); - else - fname = g_strdup_printf("rc-%s.xml", type); - - for (it = xdg_config_dir_paths; !r && it; it = g_slist_next(it)) { - gchar *path; - - path = g_build_filename(it->data, "openbox", fname, NULL); - r = parse_load(path, "openbox_config", doc, root); - g_free(path); - } - g_free(fname); - - return r; -} - -gboolean parse_load_theme(const gchar *name, xmlDocPtr *doc, xmlNodePtr *root, - gchar **retpath) -{ - GSList *it; - gchar *path; - gboolean r = FALSE; - gchar *eng; - - /* backward compatibility.. */ - path = g_build_filename(g_get_home_dir(), ".themes", name, - "openbox-3", "themerc.xml", NULL); - if (parse_load(path, "openbox_theme", doc, root) && - parse_attr_string("engine", *root, &eng)) - { - if (!strcmp(eng, "box")) { - *retpath = g_path_get_dirname(path); - r = TRUE; - } - g_free(eng); - } - g_free(path); - - if (!r) { - for (it = xdg_data_dir_paths; !r && it; it = g_slist_next(it)) { - path = g_build_filename(it->data, "themes", name, "openbox-3", - "themerc.xml", NULL); - if (parse_load(path, "openbox_theme", doc, root) && - parse_attr_string("engine", *root, &eng)) - { - if (!strcmp(eng, "box")) { - *retpath = g_path_get_dirname(path); - r = TRUE; - } - g_free(eng); - } - g_free(path); - } - } - return r; -} - -gboolean parse_load_menu(const gchar *file, xmlDocPtr *doc, xmlNodePtr *root) -{ - GSList *it; - gchar *path; - gboolean r = FALSE; - - if (file[0] == '/') { - r = parse_load(file, "openbox_menu", doc, root); - } else { - for (it = xdg_config_dir_paths; !r && it; it = g_slist_next(it)) { - path = g_build_filename(it->data, "openbox", file, NULL); - r = parse_load(path, "openbox_menu", doc, root); - g_free(path); - } - } - return r; -} - -gboolean parse_load(const gchar *path, const gchar *rootname, - xmlDocPtr *doc, xmlNodePtr *root) -{ - struct stat s; - - if (stat(path, &s) < 0) - return FALSE; - - /* XML_PARSE_BLANKS is needed apparently. When it loads a theme file, - without this option, the tree is weird and has extra nodes in it. */ - if ((*doc = xmlReadFile(path, NULL, - XML_PARSE_NOBLANKS | XML_PARSE_RECOVER))) { - *root = xmlDocGetRootElement(*doc); - if (!*root) { - xmlFreeDoc(*doc); - *doc = NULL; - g_message("%s is an empty document", path); - } else { - if (xmlStrcmp((*root)->name, (const xmlChar*)rootname)) { - xmlFreeDoc(*doc); - *doc = NULL; - g_message("XML Document %s is of wrong type. Root " - "node is not '%s'", path, rootname); - } - } - } - if (!*doc) - return FALSE; - return TRUE; -} - -gboolean parse_load_mem(gpointer data, guint len, const gchar *rootname, - xmlDocPtr *doc, xmlNodePtr *root) -{ - if ((*doc = xmlParseMemory(data, len))) { - *root = xmlDocGetRootElement(*doc); - if (!*root) { - xmlFreeDoc(*doc); - *doc = NULL; - g_message("Given memory is an empty document"); - } else { - if (xmlStrcmp((*root)->name, (const xmlChar*)rootname)) { - xmlFreeDoc(*doc); - *doc = NULL; - g_message("XML Document in given memory is of wrong " - "type. Root node is not '%s'\n", rootname); - } - } - } - if (!*doc) - return FALSE; - return TRUE; -} - -void parse_close(xmlDocPtr doc) -{ - xmlFreeDoc(doc); -} - -void parse_tree(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) -{ - while (node) { - struct Callback *c = g_hash_table_lookup(i->callbacks, node->name); - - if (c) - c->func(i, doc, node, c->data); - - node = node->next; - } -} - -gchar *parse_string(xmlDocPtr doc, xmlNodePtr node) -{ - xmlChar *c = xmlNodeListGetString(doc, node->children, TRUE); - gchar *s = g_strdup(c ? (gchar*)c : ""); - xmlFree(c); - return s; -} - -gint parse_int(xmlDocPtr doc, xmlNodePtr node) -{ - xmlChar *c = xmlNodeListGetString(doc, node->children, TRUE); - gint i = c ? atoi((gchar*)c) : 0; - xmlFree(c); - return i; -} - -gboolean parse_bool(xmlDocPtr doc, xmlNodePtr node) -{ - xmlChar *c = xmlNodeListGetString(doc, node->children, TRUE); - gboolean b = FALSE; - if (c && !xmlStrcasecmp(c, (const xmlChar*) "true")) - b = TRUE; - else if (c && !xmlStrcasecmp(c, (const xmlChar*) "yes")) - b = TRUE; - else if (c && !xmlStrcasecmp(c, (const xmlChar*) "on")) - b = TRUE; - xmlFree(c); - return b; -} - -gboolean parse_contains(const gchar *val, xmlDocPtr doc, xmlNodePtr node) -{ - xmlChar *c = xmlNodeListGetString(doc, node->children, TRUE); - gboolean r; - r = !xmlStrcasecmp(c, (const xmlChar*) val); - xmlFree(c); - return r; -} - -xmlNodePtr parse_find_node(const gchar *tag, xmlNodePtr node) -{ - while (node) { - if (!xmlStrcmp(node->name, (const xmlChar*) tag)) - return node; - node = node->next; - } - return NULL; -} - -gboolean parse_attr_bool(const gchar *name, xmlNodePtr node, gboolean *value) -{ - xmlChar *c = xmlGetProp(node, (const xmlChar*) name); - gboolean r = FALSE; - if (c) { - if (!xmlStrcasecmp(c, (const xmlChar*) "true")) - *value = TRUE, r = TRUE; - else if (!xmlStrcasecmp(c, (const xmlChar*) "yes")) - *value = TRUE, r = TRUE; - else if (!xmlStrcasecmp(c, (const xmlChar*) "on")) - *value = TRUE, r = TRUE; - else if (!xmlStrcasecmp(c, (const xmlChar*) "false")) - *value = FALSE, r = TRUE; - else if (!xmlStrcasecmp(c, (const xmlChar*) "no")) - *value = FALSE, r = TRUE; - else if (!xmlStrcasecmp(c, (const xmlChar*) "off")) - *value = FALSE, r = TRUE; - } - xmlFree(c); - return r; -} - -gboolean parse_attr_int(const gchar *name, xmlNodePtr node, gint *value) -{ - xmlChar *c = xmlGetProp(node, (const xmlChar*) name); - gboolean r = FALSE; - if (c) { - *value = atoi((gchar*)c); - r = TRUE; - } - xmlFree(c); - return r; -} - -gboolean parse_attr_string(const gchar *name, xmlNodePtr node, gchar **value) -{ - xmlChar *c = xmlGetProp(node, (const xmlChar*) name); - gboolean r = FALSE; - if (c) { - *value = g_strdup((gchar*)c); - r = TRUE; - } - xmlFree(c); - return r; -} - -gboolean parse_attr_contains(const gchar *val, xmlNodePtr node, - const gchar *name) -{ - xmlChar *c = xmlGetProp(node, (const xmlChar*) name); - gboolean r = FALSE; - if (c) - r = !xmlStrcasecmp(c, (const xmlChar*) val); - xmlFree(c); - return r; -} - -static gint slist_path_cmp(const gchar *a, const gchar *b) -{ - return strcmp(a, b); -} - -typedef GSList* (*GSListFunc) (gpointer list, gconstpointer data); - -static GSList* slist_path_add(GSList *list, gpointer data, GSListFunc func) -{ - g_assert(func); - - if (!data) - return list; - - if (!g_slist_find_custom(list, data, (GCompareFunc) slist_path_cmp)) - list = func(list, data); - else - g_free(data); - - return list; -} - -static GSList* split_paths(const gchar *paths) -{ - GSList *list = NULL; - gchar **spl, **it; - - if (!paths) - return NULL; - spl = g_strsplit(paths, ":", -1); - for (it = spl; *it; ++it) - list = slist_path_add(list, *it, (GSListFunc) g_slist_append); - g_free(spl); - return list; -} - -void parse_paths_startup(void) -{ - const gchar *path; - - if (xdg_start) - return; - xdg_start = TRUE; - - path = g_getenv("XDG_CONFIG_HOME"); - if (path && path[0] != '\0') /* not unset or empty */ - xdg_config_home_path = g_build_filename(path, NULL); - else - xdg_config_home_path = g_build_filename(g_get_home_dir(), ".config", - NULL); - - path = g_getenv("XDG_DATA_HOME"); - if (path && path[0] != '\0') /* not unset or empty */ - xdg_data_home_path = g_build_filename(path, NULL); - else - xdg_data_home_path = g_build_filename(g_get_home_dir(), ".local", - "share", NULL); - - path = g_getenv("XDG_CONFIG_DIRS"); - if (path && path[0] != '\0') /* not unset or empty */ - xdg_config_dir_paths = split_paths(path); - else { - xdg_config_dir_paths = slist_path_add(xdg_config_dir_paths, - g_strdup(CONFIGDIR), - (GSListFunc) g_slist_append); - xdg_config_dir_paths = slist_path_add(xdg_config_dir_paths, - g_build_filename - (G_DIR_SEPARATOR_S, - "etc", "xdg", NULL), - (GSListFunc) g_slist_append); - } - xdg_config_dir_paths = slist_path_add(xdg_config_dir_paths, - g_strdup(xdg_config_home_path), - (GSListFunc) g_slist_prepend); - - path = g_getenv("XDG_DATA_DIRS"); - if (path && path[0] != '\0') /* not unset or empty */ - xdg_data_dir_paths = split_paths(path); - else { - xdg_data_dir_paths = slist_path_add(xdg_data_dir_paths, - g_strdup(DATADIR), - (GSListFunc) g_slist_append); - xdg_data_dir_paths = slist_path_add(xdg_data_dir_paths, - g_build_filename - (G_DIR_SEPARATOR_S, - "usr", "local", "share", NULL), - (GSListFunc) g_slist_append); - xdg_data_dir_paths = slist_path_add(xdg_data_dir_paths, - g_build_filename - (G_DIR_SEPARATOR_S, - "usr", "share", NULL), - (GSListFunc) g_slist_append); - } - xdg_data_dir_paths = slist_path_add(xdg_data_dir_paths, - g_strdup(xdg_data_home_path), - (GSListFunc) g_slist_prepend); -} - -void parse_paths_shutdown(void) -{ - GSList *it; - - if (!xdg_start) - return; - xdg_start = FALSE; - - for (it = xdg_config_dir_paths; it; it = g_slist_next(it)) - g_free(it->data); - g_slist_free(xdg_config_dir_paths); - xdg_config_dir_paths = NULL; - for (it = xdg_data_dir_paths; it; it = g_slist_next(it)) - g_free(it->data); - g_slist_free(xdg_data_dir_paths); - xdg_data_dir_paths = NULL; - g_free(xdg_config_home_path); - xdg_config_home_path = NULL; - g_free(xdg_data_home_path); - xdg_data_home_path = NULL; -} - -gchar *parse_expand_tilde(const gchar *f) -{ - gchar **spl; - gchar *ret; - - if (!f) - return NULL; - spl = g_strsplit(f, "~", 0); - ret = g_strjoinv(g_get_home_dir(), spl); - g_strfreev(spl); - return ret; -} - -gboolean parse_mkdir(const gchar *path, gint mode) -{ - gboolean ret = TRUE; - - g_return_val_if_fail(path != NULL, FALSE); - g_return_val_if_fail(path[0] != '\0', FALSE); - - if (!g_file_test(path, G_FILE_TEST_IS_DIR)) - if (mkdir(path, mode) == -1) - ret = FALSE; - - return ret; -} - -gboolean parse_mkdir_path(const gchar *path, gint mode) -{ - gboolean ret = TRUE; - - g_return_val_if_fail(path != NULL, FALSE); - g_return_val_if_fail(path[0] == '/', FALSE); - - if (!g_file_test(path, G_FILE_TEST_IS_DIR)) { - gchar *c, *e; - - c = g_strdup(path); - e = c; - while ((e = strchr(e + 1, '/'))) { - *e = '\0'; - if (!(ret = parse_mkdir(c, mode))) - goto parse_mkdir_path_end; - *e = '/'; - } - ret = parse_mkdir(c, mode); - - parse_mkdir_path_end: - g_free(c); - } - - return ret; -} - -const gchar* parse_xdg_config_home_path(void) -{ - return xdg_config_home_path; -} - -const gchar* parse_xdg_data_home_path(void) -{ - return xdg_data_home_path; -} - -GSList* parse_xdg_config_dir_paths(void) -{ - return xdg_config_dir_paths; -} - -GSList* parse_xdg_data_dir_paths(void) -{ - return xdg_data_dir_paths; -} diff --git a/parser/parse.h b/parser/parse.h deleted file mode 100644 index 4a8ec9a7..00000000 --- a/parser/parse.h +++ /dev/null @@ -1,98 +0,0 @@ -/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- - - parse.h for the Openbox window manager - Copyright (c) 2003-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. -*/ - -#ifndef __parse_h -#define __parse_h - -#include "version.h" - -#include <libxml/parser.h> -#include <glib.h> - -G_BEGIN_DECLS - -typedef struct _ObParseInst ObParseInst; - -typedef void (*ParseCallback)(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer data); - -ObParseInst* parse_startup(); -void parse_shutdown(ObParseInst *inst); - -/*! Loads Openbox's rc, from the normal paths - @type The configuration type to load, or NULL to use the default. - e.g. "gnome" would load rc-gnome.xml. - */ -gboolean parse_load_rc(const gchar *type, xmlDocPtr *doc, xmlNodePtr *root); -/* Loads an Openbox menu, from the normal paths */ -gboolean parse_load_menu(const gchar *file, xmlDocPtr *doc, xmlNodePtr *root); -/* Loads an Openbox theme, from the normal paths */ -gboolean parse_load_theme(const gchar *name, xmlDocPtr *doc, xmlNodePtr *root, - gchar **path); - -void parse_register(ObParseInst *inst, const gchar *tag, - ParseCallback func, gpointer data); -void parse_tree(ObParseInst *inst, xmlDocPtr doc, xmlNodePtr node); - - -/* open/close */ - -gboolean parse_load(const gchar *path, const gchar *rootname, - xmlDocPtr *doc, xmlNodePtr *root); -gboolean parse_load_mem(gpointer data, guint len, const gchar *rootname, - xmlDocPtr *doc, xmlNodePtr *root); -void parse_close(xmlDocPtr doc); - - -/* helpers */ - -xmlNodePtr parse_find_node(const gchar *tag, xmlNodePtr node); - -gchar *parse_string(xmlDocPtr doc, xmlNodePtr node); -gint parse_int(xmlDocPtr doc, xmlNodePtr node); -gboolean parse_bool(xmlDocPtr doc, xmlNodePtr node); - -gboolean parse_contains(const gchar *val, xmlDocPtr doc, xmlNodePtr node); -gboolean parse_attr_contains(const gchar *val, xmlNodePtr node, - const gchar *name); - -gboolean parse_attr_string(const gchar *name, xmlNodePtr node, gchar **value); -gboolean parse_attr_int(const gchar *name, xmlNodePtr node, gint *value); -gboolean parse_attr_bool(const gchar *name, xmlNodePtr node, gboolean *value); - -/* paths */ - -void parse_paths_startup(); -void parse_paths_shutdown(); - -const gchar* parse_xdg_config_home_path(); -const gchar* parse_xdg_data_home_path(); -GSList* parse_xdg_config_dir_paths(); -GSList* parse_xdg_data_dir_paths(); - -/*! Expands the ~ character to the home directory throughout the given - string */ -gchar *parse_expand_tilde(const gchar *f); -/*! Makes a directory */ -gboolean parse_mkdir(const gchar *path, gint mode); -/*! Makes a directory and all its parents */ -gboolean parse_mkdir_path(const gchar *path, gint mode); - -G_END_DECLS - -#endif diff --git a/render/theme.c b/render/theme.c index 3d357e38..6118cdf9 100644 --- a/render/theme.c +++ b/render/theme.c @@ -23,7 +23,7 @@ #include "mask.h" #include "theme.h" #include "icon.h" -#include "parser/parse.h" +#include "obt/parse.h" #include <X11/Xlib.h> #include <X11/Xresource.h> |
