static void menu_hide_all(GntMenu *menu) { while (menu->parentmenu) menu = menu->parentmenu; gnt_widget_hide(GNT_WIDGET(menu)); }
static void gnt_menu_hide(GntWidget *widget) { GntMenu *sub, *menu = GNT_MENU(widget); while ((sub = menu->submenu)) gnt_widget_hide(GNT_WIDGET(sub)); if (menu->parentmenu) menu->parentmenu->submenu = NULL; }
static void hide_popup(GntComboBox *box, gboolean set) { gnt_widget_set_size(box->dropdown, box->dropdown->priv.width - 1, box->dropdown->priv.height); if (set) set_selection(box, gnt_tree_get_selection_data(GNT_TREE(box->dropdown))); else gnt_tree_set_selected(GNT_TREE(box->dropdown), box->selected); gnt_widget_hide(box->dropdown->parent); }
static void gnt_menu_toggled(GntTree *tree, gpointer key) { GntMenuItem *item = GNT_MENU_ITEM(key); GntMenu *menu = GNT_MENU(tree); gboolean check = gnt_menuitem_check_get_checked(GNT_MENU_ITEM_CHECK(item)); gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), !check); gnt_menuitem_activate(item); while (menu) { gnt_widget_hide(GNT_WIDGET(menu)); menu = menu->parentmenu; } }
static void ask_before_exit(void) { static GntWidget *win = NULL; GntWidget *bbox, *button; if (wm->menu) { do { gnt_widget_hide(GNT_WIDGET(wm->menu)); if (wm->menu) wm->menu = wm->menu->parentmenu; } while (wm->menu); } if (win) goto raise; win = gnt_vwindow_new(FALSE); gnt_box_add_widget(GNT_BOX(win), gnt_label_new("Are you sure you want to quit?")); gnt_box_set_title(GNT_BOX(win), "Quit?"); gnt_box_set_alignment(GNT_BOX(win), GNT_ALIGN_MID); g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(exit_win_close), &win); bbox = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(win), bbox); button = gnt_button_new("Quit"); g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(exit_confirmed), NULL); gnt_box_add_widget(GNT_BOX(bbox), button); button = gnt_button_new("Cancel"); g_signal_connect_swapped(G_OBJECT(button), "activate", G_CALLBACK(gnt_widget_destroy), win); gnt_box_add_widget(GNT_BOX(bbox), button); gnt_widget_show(win); raise: gnt_wm_raise_window(wm, win); }
static gboolean gnt_menu_key_pressed(GntWidget *widget, const char *text) { GntMenu *menu = GNT_MENU(widget); guint current = menu->selected; if (menu->submenu) { GntMenu *sub = menu; do sub = sub->submenu; while (sub->submenu); if (gnt_widget_key_pressed(GNT_WIDGET(sub), text)) return TRUE; if (menu->type != GNT_MENU_TOPLEVEL) return FALSE; } if ((text[0] == 27 && text[1] == 0) || (menu->type != GNT_MENU_TOPLEVEL && strcmp(text, GNT_KEY_LEFT) == 0)) { /* Escape closes menu */ GntMenu *par = menu->parentmenu; if (par != NULL) { par->submenu = NULL; gnt_widget_hide(widget); } else gnt_widget_hide(widget); if (par && par->type == GNT_MENU_TOPLEVEL) gnt_menu_key_pressed(GNT_WIDGET(par), text); return TRUE; } if (menu->type == GNT_MENU_TOPLEVEL) { GntMenuItem *item; GList *it; if (strcmp(text, GNT_KEY_LEFT) == 0) { 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) { 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); } if (current != menu->selected) { GntMenu *sub = menu->submenu; if (sub) gnt_widget_hide(GNT_WIDGET(sub)); show_submenu(menu); gnt_widget_draw(widget); return TRUE; } } else { if (text[1] == '\0') { if (check_for_trigger(menu, text[0])) return TRUE; } else if (strcmp(text, GNT_KEY_RIGHT) == 0) { GntMenuItem *item = gnt_tree_get_selection_data(GNT_TREE(menu)); if (item && item->submenu) { menuitem_activate(menu, item); return TRUE; } } if (gnt_bindable_perform_action_key(GNT_BINDABLE(widget), text)) return TRUE; return org_key_pressed(widget, text); } return gnt_bindable_perform_action_key(GNT_BINDABLE(widget), text); }