Index: modules/field_ui/field_ui.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/field_ui/field_ui.module,v
retrieving revision 1.26
diff -u -p -r1.26 field_ui.module
--- modules/field_ui/field_ui.module	22 Feb 2010 16:29:34 -0000	1.26
+++ modules/field_ui/field_ui.module	17 Mar 2010 11:44:08 -0000
@@ -73,7 +73,14 @@ function field_ui_menu() {
         if (isset($bundle_info['admin'])) {
           // Extract informations from the bundle description.
           $path = $bundle_info['admin']['path'];
-          $bundle_arg = isset($bundle_info['admin']['bundle argument']) ? $bundle_info['admin']['bundle argument'] : $bundle_name;
+          if (isset($bundle_info['admin']['bundle argument'])) {
+            $bundle_arg = $bundle_info['admin']['bundle argument'];
+            $bundle_pos = (string) $bundle_arg;
+          }
+          else {
+            $bundle_arg = $bundle_name;
+            $bundle_pos = '';
+          }
           $access = array_intersect_key($bundle_info['admin'], drupal_map_assoc(array('access callback', 'access arguments')));
           $field_position = count(explode('/', $path)) + 1;
 
@@ -86,33 +93,45 @@ function field_ui_menu() {
             'file' => 'field_ui.admin.inc',
           ) + $access;
           $items["$path/fields/%field_ui_menu"] = array(
+            'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'),
+            'title callback' => 'field_ui_menu_title',
+            'title arguments' => array($field_position, $entity_type, $bundle_arg),
             'page callback' => 'drupal_get_form',
             'page arguments' => array('field_ui_field_edit_form', $entity_type, $bundle_arg, $field_position),
             'type' => MENU_LOCAL_TASK,
             'file' => 'field_ui.admin.inc',
           ) + $access;
           $items["$path/fields/%field_ui_menu/edit"] = array(
+            'load arguments' => array($entity_type, $bundle_arg),
+            'title' => 'Edit',
             'page callback' => 'drupal_get_form',
             'page arguments' => array('field_ui_field_edit_form', $entity_type, $bundle_arg, $field_position),
             'type' => MENU_DEFAULT_LOCAL_TASK,
             'file' => 'field_ui.admin.inc',
           ) + $access;
           $items["$path/fields/%field_ui_menu/field-settings"] = array(
+            'load arguments' => array($entity_type, $bundle_arg),
+            'title' => 'Field settings',
             'page callback' => 'drupal_get_form',
             'page arguments' => array('field_ui_field_settings_form', $entity_type, $bundle_arg, $field_position),
             'type' => MENU_LOCAL_TASK,
             'file' => 'field_ui.admin.inc',
           ) + $access;
           $items["$path/fields/%field_ui_menu/widget-type"] = array(
+            'load arguments' => array($entity_type, $bundle_arg),
+            'title' => 'Widget settings',
             'page callback' => 'drupal_get_form',
             'page arguments' => array('field_ui_widget_type_form', $entity_type, $bundle_arg, $field_position),
             'type' => MENU_LOCAL_TASK,
             'file' => 'field_ui.admin.inc',
           ) + $access;
           $items["$path/fields/%field_ui_menu/delete"] = array(
+            'load arguments' => array($entity_type, $bundle_arg),
+            'title' => 'Delete',
             'page callback' => 'drupal_get_form',
             'page arguments' => array('field_ui_field_delete_form', $entity_type, $bundle_arg, $field_position),
             'type' => MENU_LOCAL_TASK,
+            'weight' => 10,
             'file' => 'field_ui.admin.inc',
           ) + $access;
 
@@ -145,14 +164,31 @@ function field_ui_menu() {
 /**
  * Menu loader; Load a field based on its name.
  */
-function field_ui_menu_load($field_name) {
+function field_ui_menu_load($field_name, $entity_type, $bundle_name, $bundle_pos, $map) {
+  // I have no idea why we need the bundle object here, but be my guest. :)
+  if ($bundle_pos > 0) {
+    $bundle_object = $map[$bundle_pos];
+  }
+  // Check whether the field exists at all.
   if ($field = field_info_field($field_name)) {
-    return $field;
+    // Only return the field if a field instance exists for the given entity
+    // type and bundle.
+    if ($instance = field_info_instance($entity_type, $field_name, $bundle_name)) {
+      return $field;
+    }
   }
   return FALSE;
 }
 
 /**
+ * Menu title callback.
+ */
+function field_ui_menu_title($field, $entity_type, $bundle_name) {
+  $instance = field_info_instance($entity_type, $field['field_name'], $bundle_name);
+  return $instance['label'];
+}
+
+/**
  * Implements hook_theme().
  */
 function field_ui_theme() {
