--- a/finch/libgnt/gntmenu.c Sat Apr 26 19:55:55 2014 +0200 +++ b/finch/libgnt/gntmenu.c Sat Apr 26 20:39:33 2014 +0200 @@ -89,7 +89,11 @@ GntMenuItem *item = GNT_MENU_ITEM(iter->data); if (!gnt_menuitem_is_visible(item)) continue; - type = ' ' | gnt_color_pair(GNT_COLOR_HIGHLIGHT); + type = ' '; + if (item->callback || item->submenu) + type |= gnt_color_pair(GNT_COLOR_HIGHLIGHT); + else + type |= gnt_color_pair(GNT_COLOR_DISABLED); if (i == menu->selected) type |= A_REVERSE; item->priv.x = getcurx(widget->window) + widget->priv.x; @@ -121,7 +125,7 @@ static void menu_tree_add(GntMenu *menu, GntMenuItem *item, GntMenuItem *parent) { - char trigger[4] = "\0 )\0"; + char trigger[] = "\0 )\0"; g_return_if_fail(item != NULL); @@ -132,9 +136,12 @@ gnt_tree_add_choice(GNT_TREE(menu), item, gnt_tree_create_row(GNT_TREE(menu), item->text, trigger, " "), parent, NULL); gnt_tree_set_choice(GNT_TREE(menu), item, gnt_menuitem_check_get_checked(GNT_MENU_ITEM_CHECK(item))); - } else + } else { gnt_tree_add_row_last(GNT_TREE(menu), item, gnt_tree_create_row(GNT_TREE(menu), item->text, trigger, item->submenu ? ">" : " "), parent); + if (!item->callback && !item->submenu) + gnt_tree_set_row_color(GNT_TREE(menu), item, GNT_COLOR_DISABLED); + } if (0 && item->submenu) { GntMenu *sub = GNT_MENU(item->submenu); @@ -307,15 +314,25 @@ } if (menu->type == GNT_MENU_TOPLEVEL) { + GntMenuItem *item; + GList *it; if (strcmp(text, GNT_KEY_LEFT) == 0) { - if (menu->selected == 0) - menu->selected = g_list_length(menu->list) - 1; - else - menu->selected--; + do { + if (menu->selected == 0) + menu->selected = g_list_length(menu->list) - 1; + else + menu->selected--; + it = g_list_nth(menu->list, menu->selected); + item = it ? it->data : NULL; + } while (!gnt_menuitem_is_visible(item)); } else if (strcmp(text, GNT_KEY_RIGHT) == 0) { - menu->selected++; - if (menu->selected >= g_list_length(menu->list)) - menu->selected = 0; + do { + menu->selected++; + if (menu->selected >= g_list_length(menu->list)) + menu->selected = 0; + it = g_list_nth(menu->list, menu->selected); + item = it ? it->data : NULL; + } while (!gnt_menuitem_is_visible(item)); } else if (strcmp(text, GNT_KEY_ENTER) == 0 || strcmp(text, GNT_KEY_DOWN) == 0) { gnt_widget_activate(widget);