Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.277
diff -u -r1.277 form.inc
--- includes/form.inc	18 Jul 2008 07:06:24 -0000	1.277
+++ includes/form.inc	24 Jul 2008 02:49:25 -0000
@@ -1420,7 +1420,13 @@
       else {
         $selected = '';
       }
-      $options .= '<option value="' . check_plain($key) . '"' . $selected . '>' . check_plain($choice) . '</option>';
+      if (empty($selected) && isset($element['#disabled_options']) && in_array($key, $element['#disabled_options'])) {
+        $disabled = ' disabled="disabled"';
+      }
+      else {
+        $disabled = '';
+      }
+      $options .= '<option value="' . check_plain($key) . '"' . $selected . $disabled . '>' . check_plain($choice) . '</option>';
     }
   }
   return $options;
@@ -1735,6 +1741,9 @@
           '#parents' => $element['#parents'],
           '#id' => form_clean_id('edit-' . implode('-', $parents_for_id)),
         );
+        if ($key != $element['#default_value'] && in_array($key, $element['#disabled_options'])) {
+          $element[$key]['#attributes']['disabled'] = 'disabled';
+        }
       }
     }
   }
@@ -1902,7 +1911,17 @@
     }
     foreach ($element['#options'] as $key => $choice) {
       if (!isset($element[$key])) {
-        $element[$key] = array('#type' => 'checkbox', '#processed' => TRUE, '#title' => $choice, '#return_value' => $key, '#default_value' => isset($value[$key]), '#attributes' => $element['#attributes']);
+        $element[$key] = array(
+          '#type' => 'checkbox', 
+          '#processed' => TRUE, 
+          '#title' => $choice, 
+          '#return_value' => $key, 
+          '#default_value' => isset($value[$key]), 
+          '#attributes' => $element['#attributes']
+        );
+        if (in_array($key, $element['#disabled_options'])) {
+          $element[$key]['#attributes']['disabled'] = 'disabled';
+        }
       }
     }
   }
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.611
diff -u -r1.611 system.module
--- modules/system/system.module	23 Jul 2008 07:37:06 -0000	1.611
+++ modules/system/system.module	24 Jul 2008 00:03:17 -0000
@@ -244,6 +244,7 @@
 
   $type['radios'] = array(
     '#input' => TRUE,
+    '#disabled_options' => array(),
     '#process' => array('form_process_radios'),
   );
 
@@ -256,6 +257,7 @@
   $type['checkboxes'] = array(
     '#input' => TRUE,
     '#tree' => TRUE,
+    '#disabled_options' => array(),
     '#process' => array('form_process_checkboxes'),
   );
 
@@ -269,6 +271,7 @@
     '#input' => TRUE,
     '#size' => 0,
     '#multiple' => FALSE,
+    '#disabled_options' => array(),
     '#process' => array('form_process_ahah'),
   );
 

