Index: includes/form.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/form.inc,v retrieving revision 1.393 diff -u -p -r1.393 form.inc --- includes/form.inc 4 Nov 2009 05:39:14 -0000 1.393 +++ includes/form.inc 4 Nov 2009 20:37:14 -0000 @@ -1167,10 +1167,16 @@ function _form_builder_handle_input_elem $value_callback = !empty($element['#value_callback']) ? $element['#value_callback'] : 'form_type_' . $element['#type'] . '_value'; if ($form_state['programmed'] || ($form_state['process_input'] && (!isset($element['#access']) || $element['#access']))) { + // Check for a submitted value. $input = $form_state['input']; foreach ($element['#parents'] as $parent) { $input = isset($input[$parent]) ? $input[$parent] : NULL; } + // Check for a stored value. + $value = $form_state['values']; + foreach ($element['#parents'] as $parent) { + $value = isset($value[$parent]) ? $value[$parent] : NULL; + } // If we have input for the current element, assign it to the #value property. if (!$form_state['programmed'] || isset($input)) { // Call #type_value to set the form value; @@ -1180,6 +1186,11 @@ function _form_builder_handle_input_elem if (!isset($element['#value']) && isset($input)) { $element['#value'] = $input; } + // If no #value was assigned by the value callback or the submitted + // values, check whether we have a value in $form_state. + if (!isset($element['#value']) && isset($value)) { + $element['#value'] = $value; + } } // Mark all posted values for validation. if (isset($element['#value']) || (!empty($element['#required']))) {