qulogic/libgnt

Finch: better UI for menus

2014-04-26, Tomasz Wasilczyk
192e8ff66e5f
Parents 2df252827bbd
Children 52014b84442d
Finch: better UI for menus
  • +27 -10
    gntmenu.c
  • --- a/gntmenu.c Sat Apr 26 19:55:55 2014 +0200
    +++ b/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);