Index: filefield.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/filefield/filefield.module,v
retrieving revision 1.199
diff -u -r1.199 filefield.module
--- filefield.module	6 Jun 2009 19:58:21 -0000	1.199
+++ filefield.module	10 Jun 2009 19:44:25 -0000
@@ -44,7 +44,15 @@
     'access arguments' => array('access content'),
     'type' => MENU_CALLBACK,
   );
-
+  $items['admin/settings/filefield'] = array(
+    'title' => 'FileField',
+    'description' => 'Configure FileField\'s Content-Disposition header on files downloaded from a filefield.',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('filefield_settings'),
+    'access arguments' => array('administer site configuration'),
+    'file' => 'filefield.admin.inc',
+  );
+  
   return $items;
 }
 
@@ -196,6 +204,14 @@
   $type = mime_header_encode($file->filemime);
   // Serve images and text inline for the browser to display rather than download.
   $disposition = (ereg('^(text/|image/)', $file->filemime) || ereg('flash$', $file->filemime)) ? 'inline' : 'attachment';
+  $textarea = variable_get('filefield_inline_types', '');
+  $inline_types = preg_split('/[\n\r]+/', $textarea, -1, PREG_SPLIT_NO_EMPTY);
+  // Make any MIME types matching patterns on settings page be delivered inline
+  foreach ($inline_types as $inline_type) {
+    if (ereg($inline_type, $file->filemime)) {
+      $disposition = 'inline';
+    }
+  }
   return array(
     'Content-Type: '. $type .'; name='. $name,
     'Content-Length: '. $file->filesize,
Index: filefield.admin.inc
===================================================================
RCS file: filefield.admin.inc
diff -N filefield.admin.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ filefield.admin.inc	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,37 @@
+<?php
+// $Id$
+/**
+ * @file
+ * FileField settings page
+ */
+
+/**
+ * Form builder function for admin settings.
+ */
+function filefield_settings() {
+  $form['filefield_intypes_textarea'] = array(
+    '#type' => 'textarea',
+    '#title' => t('Additional inline MIME types'),
+    '#default_value' => variable_get('filefield_inline_types', ''),
+    '#description' => t('MIME types given here will always be given Content-Disposition: inline.  One per line in standard format, e.g. \'audio/midi\' or as regular expressions. '),
+  );
+  $form['#submit'][] = 'filefield_settings_submit';
+  return system_settings_form($form);
+}
+
+/**
+ * Set the filefield_inline_types array based on the string.
+ */
+function filefield_settings_submit($form, &$form_state) {
+
+  if (isset($form_state['values']['filefield_intypes_textarea'])) {
+    $textarea = $form_state['values']['filefield_intypes_textarea'];
+    variable_set('filefield_inline_types', $textarea);
+    $inline_types = preg_split('/[\n\r]+/', $textarea, -1, PREG_SPLIT_NO_EMPTY);
+    drupal_set_message(t('Detected @count.  Overriding default rules in those cases.', array('@count' => format_plural(count($inline_types), '1 inline type rule', '@count inline type rules'))));
+  }
+  else {
+    variable_del('filefield_inline_types');
+    drupal_set_message(t('No inline type rules detected. Using default rules.'));
+  }
+}
