Index: includes/menu.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/menu.inc,v retrieving revision 1.415 diff -u -p -b -r1.415 menu.inc --- includes/menu.inc 20 Oct 2010 00:47:43 -0000 1.415 +++ includes/menu.inc 21 Oct 2010 16:07:01 -0000 @@ -2151,6 +2151,12 @@ function theme_menu_local_tasks() { /** * Set (or get) the active menu for the current page - determines the active trail. + * + * @return + * An array of menu machine names, in order of preference. The + * 'menu_default_active_menus' variable may be used to assert a menu order + * different from the order of creation, or to prevent a particular menu from + * being used at all in the active trail. */ function menu_set_active_menu_names($menu_names = NULL) { $active = &drupal_static(__FUNCTION__); @@ -2159,7 +2165,7 @@ function menu_set_active_menu_names($men $active = $menu_names; } elseif (!isset($active)) { - $active = variable_get('menu_default_active_menus', array_keys(menu_list_system_menus())); + $active = variable_get('menu_default_active_menus', array_keys(menu_get_menus())); } return $active; } Index: modules/menu/menu.module =================================================================== RCS file: /cvs/drupal/drupal/modules/menu/menu.module,v retrieving revision 1.233 diff -u -p -b -r1.233 menu.module --- modules/menu/menu.module 24 Sep 2010 00:37:43 -0000 1.233 +++ modules/menu/menu.module 21 Oct 2010 16:07:01 -0000 @@ -262,6 +262,15 @@ function menu_save($menu) { switch ($status) { case SAVED_NEW: + // Make sure the menu is present in the active menus variable so that its + // items may appear in the menu active trail. + // @see menu_set_active_menu_names() + $active_menus = variable_get('menu_default_active_menus', array_keys(menu_get_menus())); + if (!in_array($menu['menu_name'], $active_menus)) { + $active_menus[] = $menu['menu_name']; + variable_set('menu_default_active_menus', $active_menus); + } + module_invoke_all('menu_insert', $menu); break; @@ -299,6 +308,15 @@ function menu_delete($menu) { // Delete all links from the menu. menu_delete_links($menu['menu_name']); + // Remove menu from active menus variable. + $active_menus = variable_get('menu_default_active_menus', array_keys(menu_get_menus())); + foreach ($active_menus as $i => $menu_name) { + if ($menu['menu_name'] == $menu_name) { + unset($active_menus[$i]); + variable_set('menu_default_active_menus', $active_menus); + } + } + // Delete the custom menu. db_delete('menu_custom') ->condition('menu_name', $menu['menu_name'])