X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenu.c;h=524220c0af14325eb691924ff1ea640928d44bf6;hb=8c9fb63baaf7d6245cccc584359bf09359663bea;hp=77d9548c0da34069884a41d57042230849f9751a;hpb=fc120a75308855b738a42b1fde9d6e0d276f3bf9;p=chaz%2Fopenbox diff --git a/openbox/menu.c b/openbox/menu.c index 77d9548c..524220c0 100644 --- a/openbox/menu.c +++ b/openbox/menu.c @@ -36,7 +36,6 @@ #include "gettext.h" #include "obt/xml.h" #include "obt/paths.h" -#include "imageload.h" typedef struct _ObMenuParseState ObMenuParseState; @@ -275,29 +274,39 @@ static void parse_menu_item(xmlNodePtr node, gpointer data) 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; - } + menus are not enabled. */ if (obt_xml_attr_string(node, "label", &label)) { + xmlNodePtr c; GSList *acts = NULL; - node = obt_xml_find_node(node->children, "action"); - while (node) { - ObActionsAct *action = actions_parse(node); + c = obt_xml_find_node(node->children, "action"); + while (c) { + ObActionsAct *action = actions_parse(c); if (action) acts = g_slist_append(acts, action); - node = obt_xml_find_node(node->next, "action"); + c = 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 (config_menu_show_icons && + obt_xml_attr_string(node, "icon", &icon)) + { + RrImage *ic; + + ic = RrImageCacheFindName(ob_rr_icons, icon); + if (ic) + RrImageRef(ic); + else { + ic = RrImageNew(ob_rr_icons); + if (!RrImageAddPictureName(ic, icon)) + RrImageUnref(ic); /* no need to keep it around */ + } + e->data.normal.icon = ic; + if (e->data.normal.icon) e->data.normal.icon_alpha = 0xff; + g_free(icon); } g_free(label);