#include "gettext.h"
#include "obt/xml.h"
#include "obt/paths.h"
+#include "imageload.h"
typedef struct _ObMenuParseState ObMenuParseState;
{
ObMenuParseState *state = data;
gchar *label;
+ gchar *icon;
+ ObMenuEntry *e;
if (state->parent) {
+ /* Don't try to extract "icon" attribute if icons in user-defined
+ menus are not enabled. */
+ if (!(config_menu_user_show_icons &&
+ obt_xml_attr_string(node, "icon", &icon)))
+ {
+ icon = NULL;
+ }
+
if (obt_xml_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(node);
- if (a)
- acts = g_slist_append(acts, a);
- }
- menu_add_normal(state->parent, -1, label, acts, TRUE);
+ node = obt_xml_find_node(node->children, "action");
+ while (node) {
+ ObActionsAct *action = actions_parse(node);
+ if (action)
+ acts = g_slist_append(acts, action);
+ node = obt_xml_find_node(node->next, "action");
+ }
+ e = menu_add_normal(state->parent, -1, label, acts, TRUE);
+
+ if (icon) { /* Icon will be used. */
+ e->data.normal.icon = RrImageFetchFromFile(ob_rr_icons, icon);
+ if (e->data.normal.icon)
+ e->data.normal.icon_alpha = 0xff;
+ g_free(icon);
+ }
g_free(label);
}
}