Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.610
diff -u -p -r1.610 system.module
--- modules/system/system.module	18 Jul 2008 07:06:24 -0000	1.610
+++ modules/system/system.module	21 Jul 2008 11:00:23 -0000
@@ -240,6 +240,7 @@ function system_elements() {
 
   $type['radios'] = array(
     '#input' => TRUE,
+    '#disabled_options' => array(),
     '#process' => array('form_process_radios'),
   );
 
@@ -252,6 +253,7 @@ function system_elements() {
   $type['checkboxes'] = array(
     '#input' => TRUE,
     '#tree' => TRUE,
+    '#disabled_options' => array(),
     '#process' => array('form_process_checkboxes'),
   );
 
@@ -265,6 +267,7 @@ function system_elements() {
     '#input' => TRUE,
     '#size' => 0,
     '#multiple' => FALSE,
+    '#disabled_options' => array(),
     '#process' => array('form_process_ahah'),
   );
 
Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.277
diff -u -p -r1.277 form.inc
--- includes/form.inc	18 Jul 2008 07:06:24 -0000	1.277
+++ includes/form.inc	21 Jul 2008 11:00:23 -0000
@@ -1420,7 +1420,13 @@ function form_select_options($element, $
       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 @@ function form_process_radios($element) {
           '#parents' => $element['#parents'],
           '#id' => form_clean_id('edit-' . implode('-', $parents_for_id)),
         );
+        if (in_array($key, $element['#disabled_options'])) {
+          $element[$key]['#attributes']['disabled'] = 'disabled';
+        }
       }
     }
   }
@@ -1902,7 +1911,17 @@ function form_process_checkboxes($elemen
     }
     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';
+        }
       }
     }
   }
