--- desktop-file-utils-0.6/src/menu-process.c.hide-empty-submenus 2004-03-05 13:23:23.139062728 -0500 +++ desktop-file-utils-0.6/src/menu-process.c 2004-03-05 15:27:01.639279272 -0500 @@ -2041,6 +2041,30 @@ } } +static void remove_empty_submenus (TreeNode * node) +{ + GSList *subdir; + + subdir = node->subdirs; + while (subdir != NULL) + { + TreeNode *subdir_node = subdir->data; + GSList *next = subdir->next; + + remove_empty_submenus (subdir_node); + + /* If after removing empty children of this submenu, the submenu + * itself is empty, remove it from the parent menu (which is 'node') + */ + if (subdir_node->subdirs == NULL && subdir_node->entries == NULL) + { + node->subdirs = g_slist_remove_link (node->subdirs, subdir); + tree_node_free (subdir_node); + } + subdir = next; + } +} + static void build_tree (DesktopEntryTree *tree) { @@ -2057,6 +2081,9 @@ if (tree->root) process_only_unallocated (tree->root, allocated); + if (tree->root) + remove_empty_submenus (tree->root); + g_hash_table_destroy (allocated); if (tree->root == NULL)