From 1045079482453424f8320de99639390e3020eb72 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Tue, 12 Aug 2003 19:18:21 +0000 Subject: [PATCH] adjust for changes to the parsing api. split the menu into its own file. --- Makefile.am | 3 +- data/menu | 38 +++++++++++++++++ data/rc3 | 35 +--------------- openbox/config.c | 74 +++++++++++++++++++++++++-------- openbox/config.h | 7 +++- openbox/menu.c | 63 ++++++++++++++++++++++------ openbox/menu.h | 7 +++- openbox/mouse.c | 18 ++++---- openbox/openbox.c | 16 ++++--- openbox/plugin.c | 23 +++++----- openbox/plugin.h | 8 ++-- plugins/interface.h | 4 +- plugins/menu/fifo_menu.c | 18 ++++---- plugins/menu/include_menu.c | 2 +- plugins/menu/timed_menu.c | 26 ++++++------ plugins/placement/placement.c | 6 +-- plugins/resistance/resistance.c | 6 +-- 17 files changed, 230 insertions(+), 124 deletions(-) create mode 100644 data/menu diff --git a/Makefile.am b/Makefile.am index cb82d10f..b4aeea19 100644 --- a/Makefile.am +++ b/Makefile.am @@ -414,7 +414,8 @@ dist_om4ob_theme_DATA = \ ## data ## dist_rc_DATA = \ - data/rc3 + data/rc3 \ + data/menu dist_desktopfiles_DATA = \ data/openbox.desktop diff --git a/data/menu b/data/menu new file mode 100644 index 00000000..c3b69fd1 --- /dev/null +++ b/data/menu @@ -0,0 +1,38 @@ + + + + + + xterm + + + mozilla + + + gaim + + + strange-quark + + + + + crack-attack + + + xfrisk + + + quake3 + + + + + + + + + + + + diff --git a/data/rc3 b/data/rc3 index ae3263a0..bd56233c 100644 --- a/data/rc3 +++ b/data/rc3 @@ -310,39 +310,8 @@ - - - - xterm - - - mozilla - - - gaim - - - strange-quark - - - - - crack-attack - - - xfrisk - - - quake3 - - - - - - - - - + + ~/.openbox/menu diff --git a/openbox/config.c b/openbox/config.c index 9e32609d..a3c236fc 100644 --- a/openbox/config.c +++ b/openbox/config.c @@ -36,6 +36,18 @@ guint config_keyboard_reset_state; gint config_mouse_threshold; gint config_mouse_dclicktime; +gchar *config_menu_path; + +gchar *expand_tilde(const gchar *f) +{ + if (!f) + return NULL; + else if (f[0] != '~') + return g_strdup(f); + else + return g_strconcat(g_get_home_dir(), f+1, NULL); +} + /* @@ -46,7 +58,8 @@ gint config_mouse_dclicktime; */ -static void parse_key(xmlDocPtr doc, xmlNodePtr node, GList *keylist) +static void parse_key(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, + GList *keylist) { char *key; ObAction *action; @@ -57,6 +70,7 @@ static void parse_key(xmlDocPtr doc, xmlNodePtr node, GList *keylist) key = parse_string(doc, n); translate_key(key, &config_keyboard_reset_state, &config_keyboard_reset_keycode); + g_free(key); } n = parse_find_node("keybind", node); @@ -64,7 +78,7 @@ static void parse_key(xmlDocPtr doc, xmlNodePtr node, GList *keylist) if (parse_attr_string("key", n, &key)) { keylist = g_list_append(keylist, key); - parse_key(doc, n->xmlChildrenNode, keylist); + parse_key(i, doc, n->xmlChildrenNode, keylist); it = g_list_last(keylist); g_free(it->data); @@ -94,9 +108,10 @@ static void parse_key(xmlDocPtr doc, xmlNodePtr node, GList *keylist) } } -static void parse_keyboard(xmlDocPtr doc, xmlNodePtr node, void *d) +static void parse_keyboard(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, + void *d) { - parse_key(doc, node->xmlChildrenNode, NULL); + parse_key(i, doc, node->xmlChildrenNode, NULL); } /* @@ -109,7 +124,8 @@ static void parse_keyboard(xmlDocPtr doc, xmlNodePtr node, void *d) */ -static void parse_mouse(xmlDocPtr doc, xmlNodePtr node, void *d) +static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, + void *d) { xmlNodePtr n, nbut, nact; char *buttonstr; @@ -182,7 +198,8 @@ static void parse_mouse(xmlDocPtr doc, xmlNodePtr node, void *d) } } -static void parse_focus(xmlDocPtr doc, xmlNodePtr node, void *d) +static void parse_focus(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, + void *d) { xmlNodePtr n; @@ -200,7 +217,8 @@ static void parse_focus(xmlDocPtr doc, xmlNodePtr node, void *d) config_focus_popup = parse_bool(doc, n); } -static void parse_theme(xmlDocPtr doc, xmlNodePtr node, void *d) +static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, + void *d) { xmlNodePtr n; @@ -216,7 +234,8 @@ static void parse_theme(xmlDocPtr doc, xmlNodePtr node, void *d) } } -static void parse_desktops(xmlDocPtr doc, xmlNodePtr node, void *d) +static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, + void *d) { xmlNodePtr n; @@ -244,7 +263,8 @@ static void parse_desktops(xmlDocPtr doc, xmlNodePtr node, void *d) config_desktop_popup = parse_bool(doc, n); } -static void parse_resize(xmlDocPtr doc, xmlNodePtr node, void *d) +static void parse_resize(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, + void *d) { xmlNodePtr n; @@ -254,7 +274,7 @@ static void parse_resize(xmlDocPtr doc, xmlNodePtr node, void *d) config_redraw_resize = parse_bool(doc, n); } -static void parse_dock(xmlDocPtr doc, xmlNodePtr node, void *d) +static void parse_dock(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, void *d) { xmlNodePtr n; @@ -314,7 +334,21 @@ static void parse_dock(xmlDocPtr doc, xmlNodePtr node, void *d) config_dock_hide_timeout = parse_int(doc, n); } -void config_startup() +static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, void *d) +{ + xmlNodePtr n; + + node = node->xmlChildrenNode; + if ((n = parse_find_node("location", node))) { + gchar *c; + + c = parse_string(doc, n); + config_menu_path = expand_tilde(c); + g_free(c); + } +} + +void config_startup(ObParseInst *i) { config_focus_new = TRUE; config_focus_follow = FALSE; @@ -322,23 +356,23 @@ void config_startup() config_focus_last_on_desktop = TRUE; config_focus_popup = TRUE; - parse_register("focus", parse_focus, NULL); + parse_register(i, "focus", parse_focus, NULL); config_theme = NULL; config_title_layout = g_strdup("NLIMC"); - parse_register("theme", parse_theme, NULL); + parse_register(i, "theme", parse_theme, NULL); config_desktops_num = 4; config_desktops_names = NULL; config_desktop_popup = TRUE; - parse_register("desktops", parse_desktops, NULL); + parse_register(i, "desktops", parse_desktops, NULL); config_redraw_resize = TRUE; - parse_register("resize", parse_resize, NULL); + parse_register(i, "resize", parse_resize, NULL); config_dock_layer = OB_STACKING_LAYER_TOP; config_dock_pos = OB_DIRECTION_NORTHEAST; @@ -349,17 +383,21 @@ void config_startup() config_dock_hide = FALSE; config_dock_hide_timeout = 3000; - parse_register("dock", parse_dock, NULL); + parse_register(i, "dock", parse_dock, NULL); translate_key("C-g", &config_keyboard_reset_state, &config_keyboard_reset_keycode); - parse_register("keyboard", parse_keyboard, NULL); + parse_register(i, "keyboard", parse_keyboard, NULL); config_mouse_threshold = 3; config_mouse_dclicktime = 200; - parse_register("mouse", parse_mouse, NULL); + parse_register(i, "mouse", parse_mouse, NULL); + + config_menu_path = NULL; + + parse_register(i, "menu", parse_menu, NULL); } void config_shutdown() diff --git a/openbox/config.h b/openbox/config.h index fe4fb605..ab1b7493 100644 --- a/openbox/config.h +++ b/openbox/config.h @@ -6,6 +6,8 @@ #include +struct _ObParseInst; + /*! Should new windows be focused */ extern gboolean config_focus_new; /*! Focus windows when the mouse enters them */ @@ -65,7 +67,10 @@ extern gint config_mouse_threshold; double-click */ extern gint config_mouse_dclicktime; -void config_startup(); +/*! User-specified path to the menu file */ +extern gchar *config_menu_path; + +void config_startup(struct _ObParseInst *i); void config_shutdown(); #endif diff --git a/openbox/menu.c b/openbox/menu.c index 0f2eff42..b29594d7 100644 --- a/openbox/menu.c +++ b/openbox/menu.c @@ -4,10 +4,12 @@ #include "stacking.h" #include "client.h" #include "grab.h" +#include "config.h" #include "screen.h" #include "geom.h" #include "plugin.h" #include "misc.h" +#include "parser/parse.h" GHashTable *menu_hash = NULL; GList *menu_visible = NULL; @@ -18,14 +20,16 @@ GList *menu_visible = NULL; #define ENTRY_EVENTMASK (EnterWindowMask | LeaveWindowMask | \ ButtonPressMask | ButtonReleaseMask) -static void parse_menu(xmlDocPtr doc, xmlNodePtr node, void *data) +static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, + gpointer data) { - parse_menu_full(doc, node, data, TRUE); + g_message("%s", __FUNCTION__); + parse_menu_full(i, doc, node, data, TRUE); } -void parse_menu_full(xmlDocPtr doc, xmlNodePtr node, void *data, - gboolean newmenu) +void parse_menu_full(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, + gpointer data, gboolean newmenu) { ObAction *act; xmlNodePtr nact; @@ -42,11 +46,12 @@ void parse_menu_full(xmlDocPtr doc, xmlNodePtr node, void *data, if (parse_attr_string("plugin", node, &plugin)) { PluginMenuCreateData data; + data.parse_inst = i; data.doc = doc; data.node = node; data.parent = menu; - if (plugin_open_reopen(plugin)) + if (plugin_open_reopen(plugin, i)) parent = plugin_create(plugin, &data); g_free(plugin); } else @@ -67,12 +72,12 @@ void parse_menu_full(xmlDocPtr doc, xmlNodePtr node, void *data, data.doc = doc; data.node = node; data.parent = menu; - if (plugin_open_reopen(plugin)) + if (plugin_open_reopen(plugin, i)) parent = plugin_create(plugin, &data); g_free(plugin); } else { parent = menu; - parse_menu(doc, node, &parent); + parse_menu(i, doc, node, &parent); menu_add_entry(menu, menu_entry_new_submenu(parent->label, parent)); } @@ -147,15 +152,12 @@ void menu_entry_free(ObMenuEntry *self) XDestroyWindow(ob_display, self->submenu_pic); g_free(self); } - -void menu_startup() + +void menu_startup(ObParseInst *i) { menu_hash = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify)menu_destroy_hash_key, (GDestroyNotify)menu_destroy_hash_value); - - parse_register("menu", parse_menu, NULL); - } void menu_shutdown() @@ -163,6 +165,43 @@ void menu_shutdown() g_hash_table_destroy(menu_hash); } +void menu_parse() +{ + ObParseInst *i; + xmlDocPtr doc; + xmlNodePtr node; + gchar *p; + gboolean loaded = FALSE; + + i = parse_startup(); + + if (config_menu_path) + if (!(loaded = + parse_load(config_menu_path, "openbox_menu", &doc, &node))) + g_warning("Failed to load menu from '%s'", config_menu_path); + if (!loaded) { + p = g_build_filename(g_get_home_dir(), ".openbox", "menu", NULL); + if (!(loaded = + parse_load(p, "openbox_menu", &doc, &node))) + g_warning("Failed to load menu from '%s'", p); + g_free(p); + } + if (!loaded) { + p = g_build_filename(RCDIR, "menu", NULL); + if (!(loaded = + parse_load(p, "openbox_menu", &doc, &node))) + g_warning("Failed to load menu from '%s'", p); + g_free(p); + } + + if (loaded) { + parse_register(i, "menu", parse_menu, NULL); + parse_tree(i, doc, node->xmlChildrenNode); + } + + parse_shutdown(i); +} + static Window createWindow(Window parent, unsigned long mask, XSetWindowAttributes *attrib) { diff --git a/openbox/menu.h b/openbox/menu.h index 2ecbb5cd..1adac022 100644 --- a/openbox/menu.h +++ b/openbox/menu.h @@ -9,6 +9,7 @@ #include struct _ObClient; +struct _ObParseInst; typedef struct _ObMenu ObMenu; typedef struct _ObMenuEntry ObMenuEntry; @@ -125,6 +126,7 @@ struct _ObMenuEntry } MenuEntry; typedef struct PluginMenuCreateData{ + struct _ObParseInst *parse_inst; xmlDocPtr doc; xmlNodePtr node; ObMenu *parent; @@ -134,6 +136,8 @@ typedef struct PluginMenuCreateData{ void menu_startup(); void menu_shutdown(); +void menu_parse(); + void menu_noop(); #define menu_new(l, n, p) \ @@ -190,7 +194,8 @@ void menu_render(ObMenu *self); void menu_render_full(ObMenu *self); /*so plugins can call it? */ -void parse_menu_full(xmlDocPtr doc, xmlNodePtr node, void *data, gboolean new); +void parse_menu_full(struct _ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, + void *data, gboolean new); void menu_control_mouseover(ObMenuEntry *entry, gboolean enter); void menu_control_keyboard_nav(unsigned int key); #endif diff --git a/openbox/mouse.c b/openbox/mouse.c index 21612484..bb768928 100644 --- a/openbox/mouse.c +++ b/openbox/mouse.c @@ -83,9 +83,9 @@ static void clearall() } } -static void fire_button(ObMouseAction a, ObFrameContext context, - ObClient *c, guint state, - guint button, int x, int y) +static gboolean fire_button(ObMouseAction a, ObFrameContext context, + ObClient *c, guint state, + guint button, int x, int y) { GSList *it; ObMouseBinding *b; @@ -96,7 +96,7 @@ static void fire_button(ObMouseAction a, ObFrameContext context, break; } /* if not bound, then nothing to do! */ - if (it == NULL) return; + if (it == NULL) return FALSE; for (it = b->actions[a]; it; it = it->next) { ObAction *act = it->data; @@ -131,11 +131,12 @@ static void fire_button(ObMouseAction a, ObFrameContext context, act->func(&act->data); } } + return TRUE; } -static void fire_motion(ObMouseAction a, ObFrameContext context, ObClient *c, - guint state, guint button, int x_root, int y_root, - guint32 corner) +static gboolean fire_motion(ObMouseAction a, ObFrameContext context, + ObClient *c, guint state, guint button, + int x_root, int y_root, guint32 corner) { GSList *it; ObMouseBinding *b; @@ -146,7 +147,7 @@ static void fire_motion(ObMouseAction a, ObFrameContext context, ObClient *c, break; } /* if not bound, then nothing to do! */ - if (it == NULL) return; + if (it == NULL) return FALSE; for (it = b->actions[a]; it; it = it->next) { ObAction *act = it->data; @@ -170,6 +171,7 @@ static void fire_motion(ObMouseAction a, ObFrameContext context, ObClient *c, act->func(&act->data); } } + return TRUE; } static guint32 pick_corner(int x, int y, int cx, int cy, int cw, int ch) diff --git a/openbox/openbox.c b/openbox/openbox.c index 631395cc..5c28fcf6 100644 --- a/openbox/openbox.c +++ b/openbox/openbox.c @@ -210,8 +210,10 @@ int main(int argc, char **argv) startup_save(); if (screen_annex()) { /* it will be ours! */ + ObParseInst *i; + /* startup the parsing so everything can register sections of the rc */ - parse_startup(); + i = parse_startup(); /* anything that is going to read data from the rc file needs to be in this group */ @@ -224,16 +226,18 @@ int main(int argc, char **argv) window_startup(); plugin_startup(); /* load the plugins specified in the pluginrc */ - plugin_loadall(); + plugin_loadall(i); /* set up the kernel config shit */ - config_startup(); - menu_startup(); + config_startup(i); + menu_startup(i); /* parse/load user options */ if (parse_load_rc(&doc, &node)) - parse_tree(doc, node->xmlChildrenNode, NULL); + parse_tree(i, doc, node->xmlChildrenNode); /* we're done with parsing now, kill it */ - parse_shutdown(); + parse_shutdown(i); + + menu_parse(); /* load the theme specified in the rc file */ ob_rr_theme = RrThemeNew(ob_rr_inst, config_theme); diff --git a/openbox/plugin.c b/openbox/plugin.c index e95d03e9..9b8e2d59 100644 --- a/openbox/plugin.c +++ b/openbox/plugin.c @@ -1,4 +1,5 @@ #include "plugins/interface.h" +#include "parser/parse.h" #include #include @@ -92,7 +93,7 @@ void plugin_shutdown() g_datalist_clear(&plugins); } -gboolean plugin_open_full(char *name, gboolean reopen) +gboolean plugin_open_full(char *name, gboolean reopen, ObParseInst *i) { Plugin *p; @@ -107,18 +108,18 @@ gboolean plugin_open_full(char *name, gboolean reopen) g_warning("failed to load plugin '%s'", name); return FALSE; } - p->config(); + p->config(i); g_datalist_set_data_full(&plugins, name, p, (GDestroyNotify) plugin_free); return TRUE; } -gboolean plugin_open(char *name) { - return plugin_open_full(name, FALSE); +gboolean plugin_open(char *name, ObParseInst *i) { + return plugin_open_full(name, FALSE, i); } -gboolean plugin_open_reopen(char *name) { - return plugin_open_full(name, TRUE); +gboolean plugin_open_reopen(char *name, ObParseInst *i) { + return plugin_open_full(name, TRUE, i); } void plugin_close(char *name) @@ -136,7 +137,7 @@ void plugin_startall() g_datalist_foreach(&plugins, (GDataForeachFunc)foreach_start, NULL); } -void plugin_loadall() +void plugin_loadall(ObParseInst *i) { GIOChannel *io; GError *err; @@ -156,18 +157,18 @@ void plugin_loadall() if (io == NULL) { /* load the default plugins */ - plugin_open("placement"); - plugin_open("resistance"); + plugin_open("placement", i); + plugin_open("resistance", i); /* XXX rm me when the parser loads me magically */ - plugin_open("client_menu"); + plugin_open("client_menu", i); } else { /* load the plugins in the rc file */ while (g_io_channel_read_line(io, &name, NULL, NULL, &err) == G_IO_STATUS_NORMAL) { g_strstrip(name); if (name[0] != '\0' && name[0] != '#') - plugin_open(name); + plugin_open(name, i); g_free(name); } g_io_channel_unref(io); diff --git a/openbox/plugin.h b/openbox/plugin.h index 38da2086..6d14c64c 100644 --- a/openbox/plugin.h +++ b/openbox/plugin.h @@ -1,16 +1,18 @@ #ifndef __plugin_h #define __plugin_h +struct _ObParseInst; + void plugin_startup(); void plugin_shutdown(); -void plugin_loadall(); +void plugin_loadall(struct _ObParseInst *i); void plugin_startall(); /* default plugin */ -gboolean plugin_open(char *name); +gboolean plugin_open(char *name, struct _ObParseInst *i); /* load a plugin, but don't warn about reopens. for menus */ -gboolean plugin_open_reopen(char *name); +gboolean plugin_open_reopen(char *name, struct _ObParseInst *i); void plugin_close(char *name); /* call plugin's generic constructor */ diff --git a/plugins/interface.h b/plugins/interface.h index 8c5c6458..52b46f32 100644 --- a/plugins/interface.h +++ b/plugins/interface.h @@ -1,8 +1,10 @@ #ifndef __plugins_interface_h #define __plugins_interface_h +struct _ObParseInst; + /* plugin_setup_config() */ -typedef void (*PluginSetupConfig)(void); +typedef void (*PluginSetupConfig)(struct _ObParseInst *i); /* plugin_startup() */ typedef void (*PluginStartup)(void); diff --git a/plugins/menu/fifo_menu.c b/plugins/menu/fifo_menu.c index cb35579e..c096a9d3 100644 --- a/plugins/menu/fifo_menu.c +++ b/plugins/menu/fifo_menu.c @@ -101,6 +101,7 @@ void fifo_menu_handler(int fd, void *d) { num_realloc); if (num_read == 0) { /* eof */ + ObParseInst *i; xmlDocPtr doc; xmlNodePtr node; @@ -109,16 +110,15 @@ void fifo_menu_handler(int fd, void *d) { FIFO_MENU_DATA(menu)->buf[FIFO_MENU_DATA(menu)->buflen] = '\0'; - doc = xmlParseMemory(FIFO_MENU_DATA(menu)->buf, - FIFO_MENU_DATA(menu)->buflen); + i = parse_startup(); + + if (parse_load_mem(FIFO_MENU_DATA(menu)->buf, + FIFO_MENU_DATA(menu)->buflen, + "fifo_menu", &doc, &node)) + parse_menu_full(i, doc, node, menu, FALSE); + + parse_shutdown(i); - node = xmlDocGetRootElement(doc); - - if (node && - !xmlStrcasecmp(node->name, (const xmlChar*) "fifo_menu")) { - parse_menu_full(doc, node, menu, FALSE); - } - fifo_menu_clean_up(menu); event_remove_fd(FIFO_MENU_DATA(menu)->handler->fd); diff --git a/plugins/menu/include_menu.c b/plugins/menu/include_menu.c index 2335f9e0..2133e9d2 100644 --- a/plugins/menu/include_menu.c +++ b/plugins/menu/include_menu.c @@ -46,7 +46,7 @@ void *plugin_create(PluginMenuCreateData *data) if (doc) { xmlNodePtr node = xmlDocGetRootElement(doc); if (node) { - parse_menu_full(doc, node, m, FALSE); + parse_menu_full(data->parse_inst, doc, node, m, FALSE); } xmlFreeDoc(doc); } diff --git a/plugins/menu/timed_menu.c b/plugins/menu/timed_menu.c index 38a20edc..83ae5aa8 100644 --- a/plugins/menu/timed_menu.c +++ b/plugins/menu/timed_menu.c @@ -125,6 +125,7 @@ void timed_menu_read_pipe(int fd, void *d) TIMED_MENU_DATA(menu)->buf + TIMED_MENU_DATA(menu)->buflen, num_realloc); if (num_read == 0) { + ObParseInst *i; xmlDocPtr doc; xmlNodePtr node; @@ -133,15 +134,14 @@ void timed_menu_read_pipe(int fd, void *d) TIMED_MENU_DATA(menu)->buf[TIMED_MENU_DATA(menu)->buflen] = '\0'; - doc = xmlParseMemory(TIMED_MENU_DATA(menu)->buf, - TIMED_MENU_DATA(menu)->buflen); + i = parse_startup(); - node = xmlDocGetRootElement(doc); + if (parse_load_mem(TIMED_MENU_DATA(menu)->buf, + TIMED_MENU_DATA(menu)->buflen, + "timed_menu", &doc, &node)) + parse_menu_full(i, doc, node, menu, FALSE); - if (node && - !xmlStrcasecmp(node->name, (const xmlChar*) "timed_menu")) { - parse_menu_full(doc, node, menu, FALSE); - } + parse_shutdown(i); timed_menu_clean_up(menu); } else if (num_read > 0) { @@ -205,6 +205,7 @@ void timed_menu_timeout_handler(ObTimer *t, void *d) } if (stat_buf.st_mtime > TIMED_MENU_DATA(data)->mtime) { + ObParseInst *i; xmlDocPtr doc; xmlNodePtr node; @@ -214,14 +215,13 @@ void timed_menu_timeout_handler(ObTimer *t, void *d) data->invalid = TRUE; menu_clear(data); - doc = xmlParseFile(TIMED_MENU_DATA(data)->command); + i = parse_startup(); - node = xmlDocGetRootElement(doc); + if (parse_load(TIMED_MENU_DATA(data)->command, + "timed_menu", &doc, &node)) + parse_menu_full(i, doc, node, data, FALSE); - if (node && - !xmlStrcasecmp(node->name, (const xmlChar*) "timed_menu")) { - parse_menu_full(doc, node, data, FALSE); - } + parse_shutdown(i); timed_menu_clean_up(data); } diff --git a/plugins/placement/placement.c b/plugins/placement/placement.c index e1c29df6..18c9c39b 100644 --- a/plugins/placement/placement.c +++ b/plugins/placement/placement.c @@ -10,7 +10,7 @@ static gboolean history; -static void parse_xml(xmlDocPtr doc, xmlNodePtr node, void *d) +static void parse_xml(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, void *d) { xmlNodePtr n; @@ -19,11 +19,11 @@ static void parse_xml(xmlDocPtr doc, xmlNodePtr node, void *d) history = parse_bool(doc, n); } -void plugin_setup_config() +void plugin_setup_config(ObParseInst *i) { history = TRUE; - parse_register("placement", parse_xml, NULL); + parse_register(i, "placement", parse_xml, NULL); } static Rect* pick_head(ObClient *c) diff --git a/plugins/resistance/resistance.c b/plugins/resistance/resistance.c index 8a787603..f5e68052 100644 --- a/plugins/resistance/resistance.c +++ b/plugins/resistance/resistance.c @@ -10,7 +10,7 @@ static int win_resistance; static int edge_resistance; -static void parse_xml(xmlDocPtr doc, xmlNodePtr node, void *d) +static void parse_xml(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, void *d) { xmlNodePtr n; @@ -21,11 +21,11 @@ static void parse_xml(xmlDocPtr doc, xmlNodePtr node, void *d) edge_resistance = parse_int(doc, n); } -void plugin_setup_config() +void plugin_setup_config(ObParseInst *i) { win_resistance = edge_resistance = DEFAULT_RESISTANCE; - parse_register("resistance", parse_xml, NULL); + parse_register(i, "resistance", parse_xml, NULL); } static void resist_move(ObClient *c, int *x, int *y) -- 2.45.2