### Eclipse Workspace Patch 1.0
#P drupal_test_7
Index: modules/field/modules/text/text.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/modules/text/text.test,v
retrieving revision 1.4
diff -u -r1.4 text.test
--- modules/field/modules/text/text.test	12 Apr 2009 02:18:51 -0000	1.4
+++ modules/field/modules/text/text.test	12 Apr 2009 02:31:32 -0000
@@ -77,7 +77,7 @@
     // Display creation form.
     $this->drupalGet('test-entity/add/test-bundle');
     $this->assertFieldByName($this->field_name . '[0][value]', '', t('Widget is displayed'));
-    $this->assertNoFieldByName($this->field_name . '[0][format]', '1', t('Format selector is not displayed'));
+    $this->assertNoFieldByName($this->field_name . '[0][value_format]', '1', t('Format selector is not displayed'));
 
     // Submit with some value.
     $value = $this->randomName();
@@ -131,7 +131,7 @@
     // selector is displayed
     $this->drupalGet('test-entity/add/test-bundle');
     $this->assertFieldByName($this->field_name . '[0][value]', '', t('Widget is displayed'));
-    $this->assertNoFieldByName($this->field_name . '[0][format]', '1', t('Format selector is not displayed'));
+    $this->assertNoFieldByName($this->field_name . '[0][value_format]', '1', t('Format selector is not displayed'));
 
     // Submit with data that should be filtered.
     $value = $this->randomName() . '<br />' . $this->randomName();
@@ -157,11 +157,11 @@
     // We should now have a 'text format' selector.
     $this->drupalGet('test-entity/' . $id . '/edit');
     $this->assertFieldByName($this->field_name . '[0][value]', '', t('Widget is displayed'));
-    $this->assertFieldByName($this->field_name . '[0][format]', '1', t('Format selector is displayed'));
+    $this->assertFieldByName($this->field_name . '[0][value_format]', '1', t('Format selector is displayed'));
 
     // Edit and change the format to 'Full HTML'.
     $edit = array(
-      $this->field_name . '[0][format]' => 2,
+      $this->field_name . '[0][value_format]' => 2,
     );
     $this->drupalPost(NULL, $edit, t('Save'));
     $this->assertRaw(t('test_entity @id has been updated.', array('@id' => $id)), t('Entity was updated'));
Index: modules/field/modules/text/text.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/modules/text/text.module,v
retrieving revision 1.6
diff -u -r1.6 text.module
--- modules/field/modules/text/text.module	12 Apr 2009 02:18:51 -0000	1.6
+++ modules/field/modules/text/text.module	12 Apr 2009 02:31:32 -0000
@@ -235,13 +235,12 @@
       '#columns' => array('value'), '#delta' => 0,
       '#process' => array('text_textfield_process'),
       '#autocomplete_path' => FALSE,
-      ),
+    ),
     'text_textarea' => array(
       '#input' => TRUE,
       '#columns' => array('value', 'format'), '#delta' => 0,
       '#process' => array('text_textarea_process'),
-      '#filter_value' => FILTER_FORMAT_DEFAULT,
-      ),
+    ),
   );
 }
 
@@ -282,6 +281,10 @@
     '#type' => $instance['widget']['type'],
     '#default_value' => isset($items[$delta]) ? $items[$delta] : '',
   );
+  if (!empty($instance['settings']['text_processing'])) {
+    $element['#value_callback'] = 'text_field_widget_formatted_text_value';
+  }
+
   return $element;
 }
 
@@ -331,10 +334,9 @@
   $element[$field_key]['#maxlength'] = !empty($field['settings']['max_length']) ? $field['settings']['max_length'] : NULL;
 
   if (!empty($instance['settings']['text_processing'])) {
-    $filter_key = $element['#columns'][1];
+    $filter_key = (count($element['#columns']) == 2) ? $element['#columns'][1] : 'format';
     $format = isset($element['#value'][$filter_key]) ? $element['#value'][$filter_key] : FILTER_FORMAT_DEFAULT;
-    $parents = array_merge($element['#parents'] , array($filter_key));
-    $element[$filter_key] = filter_form($format, 1, $parents);
+    $element[$field_key]['#text_format'] = $format;
   }
 
   return $element;
@@ -372,14 +374,32 @@
   if (!empty($instance['settings']['text_processing'])) {
     $filter_key = (count($element['#columns']) == 2) ? $element['#columns'][1] : 'format';
     $format = isset($element['#value'][$filter_key]) ? $element['#value'][$filter_key] : FILTER_FORMAT_DEFAULT;
-    $parents = array_merge($element['#parents'] , array($filter_key));
-    $element[$filter_key] = filter_form($format, 1, $parents);
+    $element[$field_key]['#text_format'] = $format;
   }
 
   return $element;
 }
 
 /**
+ * Helper function to determine the value for a formatted text widget.
+ *
+ * '#text_format' puts the format in '[column 0]_format' in incoming values,
+ * while we need it in '[column 1]'.
+ */
+function text_field_widget_formatted_text_value($form, $edit = FALSE) {
+  if ($edit !== FALSE) {
+    $field_key = $form['#columns'][0];
+    $filter_key = (count($form['#columns']) == 2) ? $form['#columns'][1] : 'format';
+    $default_key = $field_key . '_format';
+    if (!empty($edit[$default_key])) {
+      $edit['format'] = $edit[$default_key];
+      unset($edit[$default_key]);
+    }
+    return $edit;
+  }
+}
+
+/**
  * FAPI theme for an individual text elements.
  *
  * The textfield or textarea is already rendered by the
