X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenu.c;h=4a259387009c43bd491fea71fa6162cb1b83d0d6;hb=8fe0cb8989c1fe12b30b9030b446345f25340d35;hp=39e19246e297aadac6d37a5d02aea879a14d851a;hpb=2811fd1992f0e5f784d42a261b3ca483967fb20b;p=chaz%2Fopenbox diff --git a/openbox/menu.c b/openbox/menu.c index 39e19246..4a259387 100644 --- a/openbox/menu.c +++ b/openbox/menu.c @@ -39,20 +39,27 @@ static gboolean menu_open(gchar *file, xmlDocPtr *doc, xmlNodePtr *node) gboolean loaded = TRUE; gchar *p; - p = g_build_filename(g_get_home_dir(), ".openbox", file, NULL); - if (!parse_load(p, "openbox_menu", doc, node)) { - g_free(p); - p = g_build_filename(RCDIR, file, NULL); + if (file[0] == '/') { + if (!parse_load(file, "openbox_menu", doc, node)) { + g_warning("Failed to load menu from '%s'", file); + loaded = FALSE; + } + } else { + p = g_build_filename(g_get_home_dir(), ".openbox", file, NULL); if (!parse_load(p, "openbox_menu", doc, node)) { g_free(p); - p = g_strdup(file); + p = g_build_filename(RCDIR, file, NULL); if (!parse_load(p, "openbox_menu", doc, node)) { - g_warning("Failed to load menu from '%s'", file); - loaded = FALSE; + g_free(p); + p = g_strdup(file); + if (!parse_load(p, "openbox_menu", doc, node)) { + g_warning("Failed to load menu from '%s'", file); + loaded = FALSE; + } } } + g_free(p); } - g_free(p); return loaded; } @@ -89,13 +96,13 @@ void menu_startup(gboolean reconfig) for (it = config_menu_files; it; it = g_slist_next(it)) { if (menu_open(it->data, &doc, &node)) { loaded = TRUE; - parse_tree(menu_parse_inst, doc, node->xmlChildrenNode); + parse_tree(menu_parse_inst, doc, node->children); xmlFreeDoc(doc); } } if (!loaded) { if (menu_open("menu.xml", &doc, &node)) { - parse_tree(menu_parse_inst, doc, node->xmlChildrenNode); + parse_tree(menu_parse_inst, doc, node->children); xmlFreeDoc(doc); } } @@ -149,7 +156,7 @@ void menu_pipe_execute(ObMenu *self) menu_parse_state.pipe_creator = self; menu_parse_state.parent = self; - parse_tree(menu_parse_inst, doc, node->xmlChildrenNode); + parse_tree(menu_parse_inst, doc, node->children); xmlFreeDoc(doc); } else { g_warning("Invalid output from pipe-menu: %s", self->execute); @@ -178,9 +185,11 @@ static void parse_menu_item(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, if (parse_attr_string("label", node, &label)) { GSList *acts = NULL; - for (node = node->xmlChildrenNode; node; node = node->next) + for (node = node->children; node; node = node->next) if (!xmlStrcasecmp(node->name, (const xmlChar*) "action")) - acts = g_slist_append(acts, action_parse(i, doc, node)); + acts = g_slist_append(acts, action_parse + (i, doc, node, + OB_USER_ACTION_MENU_SELECTION)); menu_add_normal(state->parent, -1, label, acts); g_free(label); } @@ -220,7 +229,7 @@ static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, old = state->parent; state->parent = menu; - parse_tree(i, doc, node->xmlChildrenNode); + parse_tree(i, doc, node->children); state->parent = old; } }