X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=plugins%2Fmenu%2Ffifo_menu.c;h=c096a9d3ac7975143d180e20f415c1051c82eef3;hb=5baa7c802a500ee30fe9719f226d88923ee6e59d;hp=fc5ed0e1e3e07105f3f205efae9559ec8dd5c6a3;hpb=fd19711e6a7cdc63f10b79cedc7ff54d7a9d2e81;p=chaz%2Fopenbox diff --git a/plugins/menu/fifo_menu.c b/plugins/menu/fifo_menu.c index fc5ed0e1..c096a9d3 100644 --- a/plugins/menu/fifo_menu.c +++ b/plugins/menu/fifo_menu.c @@ -1,3 +1,25 @@ +/* + * $Header$ + * + * FFIO menu plugin + * Provides a menu from a FIFO located in ~/.openbox/fifo_menu/id + * Example: + * rc3: + * + * Menu format + * + * + * + * + * bsetbg "/home/woodblock/.openbox/backgrounds/GLOVE.png" + * + * + * + * + * + * If the attribute pid="true" is in the + */ + #include #include #include @@ -79,22 +101,24 @@ void fifo_menu_handler(int fd, void *d) { num_realloc); if (num_read == 0) { /* eof */ + ObParseInst *i; + xmlDocPtr doc; + xmlNodePtr node; + menu->invalid = TRUE; menu_clear(menu); FIFO_MENU_DATA(menu)->buf[FIFO_MENU_DATA(menu)->buflen] = '\0'; - xmlDocPtr 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); - xmlNodePtr node = xmlDocGetRootElement(doc); - - if (node && - !xmlStrcasecmp(node->name, (const xmlChar*) "fifo_menu")) { - if ((node = parse_find_node("item", node->xmlChildrenNode))) - parse_menu_full(doc, node, menu, FALSE); - } - fifo_menu_clean_up(menu); event_remove_fd(FIFO_MENU_DATA(menu)->handler->fd); @@ -130,6 +154,11 @@ void plugin_destroy (ObMenu *m) FIFO_MENU_DATA(m)->fifo = NULL; } + if (FIFO_MENU_DATA(m)->buf != NULL) { + g_free(FIFO_MENU_DATA(m)->buf); + FIFO_MENU_DATA(m)->buf = NULL; + } + g_free(m->plugin_data); menu_free(m->name); @@ -159,9 +188,11 @@ void *plugin_create(PluginMenuCreateData *data) m = menu_new( (label != NULL ? label : ""), (id != NULL ? id : PLUGIN_NAME), data->parent); - menu_add_entry(data->parent, menu_entry_new_submenu( - (label != NULL ? label : ""), - m)); + + if (data->parent) + menu_add_entry(data->parent, menu_entry_new_submenu( + (label != NULL ? label : ""), + m)); g_free(label); g_free(id);