Index: admin.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/admin/Attic/admin.admin.inc,v
retrieving revision 1.1.2.3
diff -u -p -r1.1.2.3 admin.admin.inc
--- admin.admin.inc	15 Jun 2009 04:31:31 -0000	1.1.2.3
+++ admin.admin.inc	1 Apr 2010 16:18:30 -0000
@@ -156,6 +156,42 @@ function admin_menu_overview_form_submit
 function admin_form_system_admin_theme_settings_alter(&$form) {
   // Add in our admin theme ('slate') as an option
   $form['admin_theme']['#options']['slate'] = t('Slate (formerly \'Admin\')');
+  if (user_access('admin inline')) {
+    $overrides = variable_get('admin_inline_overrides', array());
+    $form['admin_inline'] = array(
+      '#type' => 'fieldset',
+      '#title' => 'Admin Inline Settings',
+      '#collapsible' => TRUE,
+    );
+    // TODO: Is it possible to get a list of these programatically?
+    // For now, block/node/views are the types I am aware of.
+    // (this is also hardcoded in the submit handler).
+    foreach (array('block', 'node', 'views') as $type) {
+      $form['admin_inline']['admin_inline_'.$type] = array(
+        '#type' => 'checkbox',
+        '#title' => t("Enable $type inline links"),
+        '#default_value' => admin_is_inline_enabled_for($type),
+      );
+    }
+    $form['#submit'] = array_merge($form['#submit'], array('admin_form_system_admin_theme_settings_submit'));
+  }
+}
+
+/**
+ *  Submit handler for the fields added in system_admin_theme_settings's
+ *  form_alter.
+ */
+function admin_form_system_admin_theme_settings_submit($form, &$form_state) {
+  $overrides = variable_get('admin_inline_overrides', array());
+
+  // TODO: Is it possible to get a list of these programatically?
+  // For now, block/node/views are the types I am aware of.
+  // (this is also hardcoded in the form_alter).
+  foreach (array('block', 'node', 'views') as $type) {
+    $overrides[$type]['global'] = $form_state['values']['admin_inline_'.$type];
+  }
+
+  variable_set('admin_inline_overrides', $overrides);
 }
 
 /**
@@ -185,3 +221,48 @@ function admin_form_user_admin_account_a
     $form['options']['#theme'] = 'admin_manage_options';
   }
 }
+
+/**
+ * Implementation of hook_form_alter() form block_admin_configure.
+ *  Add a checkbox that allows inline admin links to be disabled per-block.
+ */
+function admin_form_block_admin_configure_alter(&$form) {
+  if (user_access('admin inline')) {
+    $overrides = variable_get('admin_inline_overrides', array());
+
+    $inline_enabled = admin_is_inline_enabled_for('block', (object) array(
+      'module' => $form['module']['#value'],
+      'delta' => $form['delta']['#value']
+    ));
+
+    $form['block_settings']['admin_inline_settings'] = array(
+      '#type' => 'fieldset',
+      '#title' => 'Admin Inline Settings',
+      '#collapsible' => TRUE,
+    );
+    $form['block_settings']['admin_inline_settings']['admin_inline_enabled'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Enable inline links'),
+      '#default_value' => $inline_enabled,
+    );
+    $form['#submit'] = array_merge($form['#submit'], array('admin_form_block_admin_configure_submit'));
+  }
+}
+
+/**
+ *  Submit handler for the fields added in block_admin_configure's form_alter.
+ */
+function admin_form_block_admin_configure_submit($form, &$form_state) {
+  $overrides = variable_get('admin_inline_overrides', array());
+
+  $global_override = admin_is_inline_enabled_for('block');
+
+  // If this specific block is the same as the setting for all blocks,
+  // don't explicitly save the value.
+  if ($form_state['values']['admin_inline_enabled'] != $global_override) {
+    $module = $form_state['values']['module'];
+    $delta = $form_state['values']['delta'];
+    $overrides['block'][$module][$delta] = $form_state['values']['admin_inline_enabled'];
+  }
+  variable_set('admin_inline_overrides', $overrides);
+}
Index: admin.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/admin/admin.module,v
retrieving revision 1.1.2.23
diff -u -p -r1.1.2.23 admin.module
--- admin.module	30 Jul 2009 14:41:34 -0000	1.1.2.23
+++ admin.module	1 Apr 2010 16:18:30 -0000
@@ -282,11 +282,40 @@ function admin_is_enabled($op = 'admin m
 }
 
 /**
+ * Returns TRUE/FALSE if inline admin links have been enabled
+ * for a given type / object.
+ */
+function admin_is_inline_enabled_for($type, $object = NULL) {
+  $overrides = variable_get('admin_inline_overrides', array());
+
+  // Default behavior is to show the inline links.
+  $enabled = TRUE;
+
+  // Unless they have been disabled for this type of thing
+  if (isset($overrides[$type]['global']))
+    $enabled = $overrides[$type]['global'];
+
+  if (!$object)
+    return $enabled;
+
+  // Furthermore, they may be disabled on this specific object, 
+  // (or enabled for this specific object, even if disabled for the type).
+  switch ($type) {
+    case 'block':
+      if (isset($overrides[$type][$object->module][$object->delta]))
+        $enabled = $overrides[$type][$object->module][$object->delta];
+      break;
+  }
+  return $enabled;
+}
+
+/**
  * Retrieve the admin links for a given object.
  */
 function admin_get_links($type, $object) {
   $links = array();
-  if (admin_is_enabled('admin inline')) {
+  $enabled = admin_is_inline_enabled_for($type, $object);
+  if (admin_is_enabled('admin inline') && $enabled) {
     $links = module_invoke_all('admin_link', $type, $object);
     drupal_alter('admin_link', $links, $type, $object);
   }
