X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenu.c;h=5efb0c353ded4d1499e13a612e60fa19e9f210ab;hb=ffba11aeb059bef0b4876eb6aad2a8a24e2db6f1;hp=3e38c0f99ddfb3ae5b8b653924b697750b045c97;hpb=615cbd96075905d75533f9b615c4ee6a75f4f9a4;p=chaz%2Fopenbox diff --git a/openbox/menu.c b/openbox/menu.c index 3e38c0f9..5efb0c35 100644 --- a/openbox/menu.c +++ b/openbox/menu.c @@ -68,19 +68,29 @@ static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, gpointer data) { ObMenuParseState *state = data; - gchar *name = NULL, *title = NULL; + gchar *name = NULL, *title = NULL, *plugin = NULL; if (!parse_attr_string("id", node, &name)) goto parse_menu_fail; if (!g_hash_table_lookup(menu_hash, name)) { - if (!parse_attr_string("label", node, &title)) - goto parse_menu_fail; - - if (menu_new(name, title, NULL)) { - state->menus = g_slist_prepend(state->menus, name); - parse_tree(i, doc, node->xmlChildrenNode); - state->menus = g_slist_delete_link(state->menus, state->menus); + if (parse_attr_string("plugin", node, &plugin)) { + if (!plugin_open(plugin, i)) + goto parse_menu_fail; + plugin_start(plugin); + if (!g_hash_table_lookup(menu_hash, name)) + g_warning("Specified plugin '%s' did not provide the " + "menu '%s'", plugin, name); + goto parse_menu_fail; + } else { + if (!parse_attr_string("label", node, &title)) + goto parse_menu_fail; + + if (menu_new(name, title, NULL)) { + state->menus = g_slist_prepend(state->menus, name); + parse_tree(i, doc, node->xmlChildrenNode); + state->menus = g_slist_delete_link(state->menus, state->menus); + } } } @@ -90,6 +100,7 @@ static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, parse_menu_fail: g_free(name); g_free(title); + g_free(plugin); } @@ -202,7 +213,16 @@ static ObMenuEntry* menu_entry_new(ObMenu *menu, ObMenuEntryType type, gint id) self->type = type; self->menu = menu; self->id = id; - self->enabled = TRUE; + + switch (type) { + case OB_MENU_ENTRY_TYPE_NORMAL: + self->data.normal.enabled = TRUE; + break; + case OB_MENU_ENTRY_TYPE_SUBMENU: + case OB_MENU_ENTRY_TYPE_SEPARATOR: + break; + } + return self; }