summaryrefslogtreecommitdiffstats
path: root/src/core/menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/menu.c')
-rw-r--r--src/core/menu.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/core/menu.c b/src/core/menu.c
index ab5b0c7f..abad5999 100644
--- a/src/core/menu.c
+++ b/src/core/menu.c
@@ -80,6 +80,7 @@ struct menu * create_menu ( const char *name, const char *title ) {
strcpy ( title_copy, title );
menu->title = title_copy;
INIT_LIST_HEAD ( &menu->items );
+ INIT_LIST_HEAD ( &menu->hidden_items );
/* Add to list of menus */
list_add_tail ( &menu->list, &menus );
@@ -102,7 +103,7 @@ struct menu * create_menu ( const char *name, const char *title ) {
*/
struct menu_item * add_menu_item ( struct menu *menu, const char *label,
const char *text, int shortcut,
- int is_default ) {
+ int is_default, int is_hidden ) {
size_t label_len;
size_t text_len;
size_t len;
@@ -135,7 +136,11 @@ struct menu_item * add_menu_item ( struct menu *menu, const char *label,
item->is_default = is_default;
/* Add to list of items */
- list_add_tail ( &item->list, &menu->items );
+ if ( is_hidden ) {
+ list_add_tail ( &item->list, &menu->hidden_items );
+ } else {
+ list_add_tail ( &item->list, &menu->items );
+ }
return item;
}
@@ -157,6 +162,10 @@ void destroy_menu ( struct menu *menu ) {
list_del ( &item->list );
free ( item );
}
+ list_for_each_entry_safe ( item, tmp, &menu->hidden_items, list ) {
+ list_del ( &item->list );
+ free ( item );
+ }
/* Free menu */
free ( menu );