--- /dev/null
+--- 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)