Index: modules/block/block.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/block/block.module,v
retrieving revision 1.291
diff -u -p -r1.291 block.module
--- modules/block/block.module	16 Dec 2007 10:30:09 -0000	1.291
+++ modules/block/block.module	17 Dec 2007 00:59:31 -0000
@@ -162,20 +162,29 @@ function block_menu() {
   );
   $default = variable_get('theme_default', 'garland');
   foreach (list_themes() as $key => $theme) {
-    // only show enabled themes
-    if ($theme->status) {
-      $items['admin/build/block/list/'. $key] = array(
-        'title' => check_plain($theme->info['name']),
-        'page arguments' => array($key),
-        'type' => $key == $default ? MENU_DEFAULT_LOCAL_TASK : MENU_LOCAL_TASK,
-        'weight' => $key == $default ? -10 : 0,
-        'file' => 'block.admin.inc',
-      );
-    }
+    $items['admin/build/block/list/'. $key] = array(
+      'title' => check_plain($theme->info['name']),
+      'page arguments' => array($key),
+      'type' => $key == $default ? MENU_DEFAULT_LOCAL_TASK : MENU_LOCAL_TASK,
+      'weight' => $key == $default ? -10 : 0,
+      'file' => 'block.admin.inc',
+      'access callback' => 'block_editable_themes',
+      'access arguments' => array($theme, $key),
+    );
   }
   return $items;
 }
 
+
+function block_editable_themes($theme, $key) {
+  if (user_access('administer blocks') && ($theme->status || $key == variable_get('admin_theme', '0')) ){
+    return true;
+  }
+  else { 
+    return false; 
+  }
+}
+
 /**
  * Implementation of hook_block().
  *
