static char* create_menu(char* menu_file) { GtkWidget *menuitem; char init_file[PATH_MAX]; char icon[PATH_MAX]; char title[MAX_LINE_LENGTH]; strcpy(init_file,fluxbox_init_file()); strcpy(menu_file,fluxbox_menu_file(init_file,menu_file)); g_print("Fluxbox init file: %s\n",init_file); g_print("Fluxbox menu file: %s\n",menu_file); menu[0] = gtk_menu_new(); menu_title(menu_file,title); menuitem = gtk_menu_item_new_with_label(title==NULL? "Fluxbox menu" : title); gtk_menu_shell_append(GTK_MENU_SHELL(menu[0]), menuitem); gtk_menu_shell_append(GTK_MENU_SHELL(menu[0]), gtk_separator_menu_item_new()); proc_lines(menu_file); gtk_menu_shell_append(GTK_MENU_SHELL(menu[0]), gtk_separator_menu_item_new()); menuitem = gtk_menu_item_new_with_label("About"); gtk_menu_shell_append(GTK_MENU_SHELL(menu[0]), menuitem); g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(menu_about),0); menuitem = gtk_menu_item_new_with_label("Exit"); gtk_menu_shell_append(GTK_MENU_SHELL(menu[0]), menuitem); g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(gtk_main_quit),0); gtk_widget_show_all(menu[0]); }
wimp_menu *menu_create(const char *title_token) { const char *entry_token; char *wildcarded_token; int index; int entries; wimp_menu *menu_base; wimp_menu *menu_ptr; /* construct a wildcarded version of the token for use when enumerating */ wildcarded_token = malloc(strlen(title_token) + 3); if (wildcarded_token == NULL) goto oom; strcpy(wildcarded_token, title_token); strcat(wildcarded_token, ".*"); /* enumerate tokens, working out the required memory */ entries = 0; index = 0; entry_token = messages_enumerate(wildcarded_token, &index); while (entry_token) { entries++; entry_token = messages_enumerate(wildcarded_token, &index); }; /* allocate space for the menu structure */ menu_base = malloc(sizeof(wimp_menu) + sizeof(wimp_menu_entry) * (entries - 1)); if (menu_base == NULL) goto oom; /* build menu */ menu_ptr = menu_base; /* title */ menu_title(&menu_ptr, title_token); /* enumerate tokens, adding menu entries */ index = 0; entry_token = messages_enumerate(wildcarded_token, &index); while (entry_token) { menu_entry(&menu_ptr, entry_token); entry_token = messages_enumerate(wildcarded_token, &index); }; /* terminate structure (set last entry's flags to finish) */ menu_set_menu_flags(menu_base, entries - 1, wimp_MENU_LAST, wimp_MENU_LAST); free(wildcarded_token); return menu_base; oom: error_fatal_oom(); return NULL; /* never reached */ }