--- taxonomy_menu.orig	Wed Jan  5 19:19:10 2005
+++ taxonomy_menu.module	Wed Jan  5 19:11:01 2005
@@ -76,14 +76,24 @@
   if (arg(2)) {
     $arguments = explode('/', $_GET['q']);
     $main_tid = check_query(array_pop($arguments));
+    drupal_set_html_head('<link rel="alternate" type="application/rss+xml" title="RSS" href="'. url('taxonomy/term/'. $main_tid .'/'. (variable_get('taxonomy_menu_display_descendants', 1) ? 'all' : 0) .'/feed') .'" />');
+    $result = taxonomy_select_nodes(array($main_tid), 'or', variable_get('taxonomy_menu_display_descendants', 1) ? 'all' : 0);
   }
   else {
-    $main_tid = 0;
-  }
+    // if no arg(2), we're looking at just the vid. if display_descendants
+    // is on, grab all vid tids regardless of depth. if off, grab depth=0s.
+    $tree = taxonomy_get_tree(arg(1));
+    $descendants = variable_get('taxonomy_menu_display_descendants', 1);
+    foreach ($tree as $term) {
+      if (!$descendants && $term->depth != 0) { continue; }
+      $tids[] = $term->tid;
+    }
 
-  drupal_set_html_head('<link rel="alternate" type="application/rss+xml" title="RSS" href="'. url('taxonomy/term/'. $main_tid .'/'. (variable_get('taxonomy_menu_display_descendants', 1) ? 'all' : 0) .'/feed') .'" />');
+    // always 0 on descendants cos our $tids would
+    // contain only vid tids we care about (above).
+    $result = taxonomy_select_nodes($tids, 'or', 0);
+  }
 
-  $result = taxonomy_select_nodes(array($main_tid), 'or', variable_get('taxonomy_menu_display_descendants', 1) ? 'all' : 0);
   print theme('page', taxonomy_render_nodes($result));
 }
 
