Index: includes/menu.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/menu.inc,v
retrieving revision 1.177
diff -u -p -r1.177 menu.inc
--- includes/menu.inc	6 Jun 2007 06:26:15 -0000	1.177
+++ includes/menu.inc	10 Jun 2007 20:25:44 -0000
@@ -915,7 +915,7 @@ function menu_secondary_links() {
  * @param $level
  *   The level of tasks you ask for. Primary tasks are 0, secondary are 1.
  * @return
- *   An array of links to the tabs.
+ *   Themed output corresponding to the tabs of the requested level.
  */
 function menu_local_tasks($level = 0) {
   static $tabs = array();
@@ -925,15 +925,22 @@ function menu_local_tasks($level = 0) {
     if (!$router_item || !$router_item['access']) {
       return array();
     }
-    // Get all tabs
-    $result = db_query("SELECT * FROM {menu_router} WHERE tab_root = '%s' AND tab_parent != '' ORDER BY weight, title", $router_item['tab_root']);
+    // Get all tabs and the root page.
+    $result = db_query("SELECT * FROM {menu_router} WHERE tab_root = '%s' ORDER BY weight, title", $router_item['tab_root']);
     $map = arg();
     $children = array();
     $tab_parent = array();
+    $href = array();
 
     while ($item = db_fetch_array($result)) {
-      $children[$item['tab_parent']][$item['path']] = $item;
-      $tab_parent[$item['path']] = $item['tab_parent'];
+      _menu_translate($item, $map, TRUE);
+      if ($item['tab_parent']) {
+        // All tabs, but not the root page.
+        $children[$item['tab_parent']][$item['path']] = $item;
+        $tab_parent[$item['path']] = $item['tab_parent'];
+      }
+      // Store the translated hrefs for use by default local tasks.
+      $href[$item['path']] = $item['href'];
     }
 
     // Find all tabs below the current path
@@ -942,15 +949,16 @@ function menu_local_tasks($level = 0) {
       $tabs_current = '';
       $next_path = '';
       foreach ($children[$path] as $item) {
-         _menu_translate($item, $map, TRUE);
         if ($item['access']) {
-          $link = l($item['title'], $item['href']); // TODO options?
           // The default task is always active.
           if ($item['type'] == MENU_DEFAULT_LOCAL_TASK) {
+            // Use the href of the tab's parent.
+            $link = l($item['title'], $href[$item['tab_parent']]);
             $tabs_current .= theme('menu_local_task', $link, TRUE);
             $next_path = $item['path'];
           }
           else {
+            $link = l($item['title'], $item['href']);
             $tabs_current .= theme('menu_local_task', $link);
           }
         }
@@ -968,9 +976,14 @@ function menu_local_tasks($level = 0) {
       $next_path = '';
       $next_parent = '';
       foreach ($children[$parent] as $item) {
-         _menu_translate($item, $map, TRUE);
         if ($item['access']) {
-          $link = l($item['title'], $item['href']); // TODO options?
+          if ($item['type'] == MENU_DEFAULT_LOCAL_TASK) {
+            // Use the href of the tab's parent.
+            $link = l($item['title'], $href[$item['tab_parent']]);
+          }
+          else {
+            $link = l($item['title'], $item['href']);
+          }
           // We check for the active tab.
           if ($item['path'] == $path) {
             $tabs_current .= theme('menu_local_task', $link, TRUE);
@@ -988,7 +1001,7 @@ function menu_local_tasks($level = 0) {
       $parent = $next_parent;
       $tabs[$item['number_parts']] = $tabs_current;
     }
-    // Sort by depth
+    // Sort by depth.
     ksort($tabs);
     // Remove the depth, we are interested only in their relative placement.
     $tabs = array_values($tabs);
