Index: modules/field_ui/field_ui.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field_ui/field_ui.admin.inc,v
retrieving revision 1.57
diff -u -p -r1.57 field_ui.admin.inc
--- modules/field_ui/field_ui.admin.inc	27 Jun 2010 18:05:54 -0000	1.57
+++ modules/field_ui/field_ui.admin.inc	30 Jun 2010 09:35:07 -0000
@@ -539,13 +539,21 @@ function _field_ui_field_overview_form_v
       form_set_error('_add_new_field][type', t('Add new field: you need to select a field type.'));
     }
 
+    $widget_types = field_ui_widget_type_options($field['type']);
     // Missing widget type.
     if (!$field['widget_type']) {
-      form_set_error('_add_new_field][widget_type', t('Add new field: you need to select a widget.'));
+      // If there's only one valid widget type then use that,
+      // so the select list can be disabled in client-side using JavaScript.
+      if (count($widget_types) == 1) {
+        $widget_type = key($widget_types);
+        form_set_value($form['table']['_add_new_field']['widget_type'], $widget_type, $form_state);
+      }
+      else {
+        form_set_error('_add_new_field][widget_type', t('Add new field: you need to select a widget.'));
+      }
     }
     // Wrong widget type.
     elseif ($field['type']) {
-      $widget_types = field_ui_widget_type_options($field['type']);
       if (!isset($widget_types[$field['widget_type']])) {
         form_set_error('_add_new_field][widget_type', t('Add new field: invalid widget.'));
       }
@@ -576,13 +584,22 @@ function _field_ui_field_overview_form_v
         form_set_error('_add_existing_field][field_name', t('Add existing field: you need to select a field.'));
       }
 
+      $existing_field = field_info_field($field['field_name']);
+      $widget_types = field_ui_widget_type_options($existing_field['type']);
       // Missing widget type.
       if (!$field['widget_type']) {
-        form_set_error('_add_existing_field][widget_type', t('Add existing field: you need to select a widget.'));
+        // If there's only one valid widget type then use that,
+        // so the select list can be disabled in client-side using JavaScript.
+        if (count($widget_types) == 1) {
+          $widget_type = key($widget_types);
+          form_set_value($form['table']['_add_existing_field']['widget_type'], $widget_type, $form_state);
+        }
+        else {
+          form_set_error('_add_existing_field][widget_type', t('Add existing field: you need to select a widget.'));
+        }
       }
       // Wrong widget type.
-      elseif ($field['field_name'] && ($existing_field = field_info_field($field['field_name']))) {
-        $widget_types = field_ui_widget_type_options($existing_field['type']);
+      elseif ($field['field_name'] && ($existing_field)) {
         if (!isset($widget_types[$field['widget_type']])) {
           form_set_error('_add_existing_field][widget_type', t('Add existing field: invalid widget.'));
         }
Index: modules/field_ui/field_ui.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/field_ui/field_ui.css,v
retrieving revision 1.3
diff -u -p -r1.3 field_ui.css
--- modules/field_ui/field_ui.css	26 Jun 2010 02:06:53 -0000	1.3
+++ modules/field_ui/field_ui.css	30 Jun 2010 09:35:07 -0000
@@ -15,6 +15,10 @@
   padding-bottom: .5em;
 }
 
+#field-overview select[disabled] {
+  color: #808080;
+}
+
 /* Manage display */
 .field-display-overview tr.region-title td {
   font-weight: bold;
Index: modules/field_ui/field_ui.js
===================================================================
RCS file: /cvs/drupal/drupal/modules/field_ui/field_ui.js,v
retrieving revision 1.3
diff -u -p -r1.3 field_ui.js
--- modules/field_ui/field_ui.js	23 May 2010 19:10:23 -0000	1.3
+++ modules/field_ui/field_ui.js	30 Jun 2010 09:35:07 -0000
@@ -59,9 +59,18 @@ function attachUpdateSelects(context) {
 jQuery.fn.fieldPopulateOptions = function (options, selected) {
   return this.each(function () {
     var disabled = false;
-    if (options.length == 0) {
-      options = [this.initialValue];
+    var counter = 0;
+
+    for (i in options) {
+      counter++;
+    }
+
+    // Disable widget select box if there's no more than one selection.
+    if (counter <= 1) {
       disabled = true;
+      if (counter == 0) {
+        options = [this.initialValue];
+      }
     }
 
     // If possible, keep the same widget selected when changing field type.
