Index: modules/comment/comment.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v
retrieving revision 1.859
diff -u -p -r1.859 comment.module
--- modules/comment/comment.module	31 Mar 2010 11:49:50 -0000	1.859
+++ modules/comment/comment.module	3 Apr 2010 20:54:17 -0000
@@ -399,7 +399,18 @@ function comment_permission() {
  * Implements hook_block_info().
  */
 function comment_block_info() {
-  $blocks['recent']['info'] = t('Recent comments');
+  $blocks['recent'] = array(
+    'info' => t('Recent comments'),
+    // This is what we'd like to do - and have dashboard module look for this
+    // in e.g. hook_block_info_alter() and take care of setting the 'region'
+    // and 'status' for us.
+    'tags' => array('administrative'),
+    // This is what we have to do for now, since hook_block_info_alter()
+    // doesn't actually do anything like what the name implies it can do (see
+    // http://drupal.org/node/732082).
+    'region' => 'dashboard_disabled',
+    'status' => 1,
+  );
 
   return $blocks;
 }
Index: modules/dashboard/dashboard.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/dashboard/dashboard.module,v
retrieving revision 1.24
diff -u -p -r1.24 dashboard.module
--- modules/dashboard/dashboard.module	28 Mar 2010 11:29:27 -0000	1.24
+++ modules/dashboard/dashboard.module	3 Apr 2010 20:54:17 -0000
@@ -105,6 +105,10 @@ function dashboard_page_build(&$page) {
     // region into it.
     $page['content']['dashboard'] = array('#theme_wrappers' => array('dashboard'));
     foreach (dashboard_regions() as $region) {
+      // Do not show dashboard blocks that are disabled.
+      if ($region == 'dashboard_disabled') {
+        continue;
+      }
       // Insert regions even when they are empty, so that they will be
       // displayed when the dashboard is being configured.
       $page['content']['dashboard'][$region] = !empty($page[$region]) ? $page[$region] : array();
@@ -275,8 +279,9 @@ function dashboard_regions() {
  */
 function dashboard_dashboard_regions() {
   return array(
-    'dashboard_main' => 'Dashboard main',
-    'dashboard_sidebar' => 'Dashboard sidebar',
+    'dashboard_main' => 'Dashboard page (main)',
+    'dashboard_sidebar' => 'Dashboard page (sidebar)',
+    'dashboard_disabled' => 'Dashboard page (disabled)',
   );
 }
 
@@ -289,9 +294,9 @@ function dashboard_show_disabled() {
   // Blocks are not necessarily initialized at this point.
   $blocks = _block_rehash();
 
-  // Limit the list to disabled blocks for the current theme.
+  // Limit the list to blocks that are marked as disabled for the dashboard.
   foreach ($blocks as $key => $block) {
-    if ($block['theme'] != $theme_key || (!empty($block['status']) && !empty($block['region']))) {
+    if ($block['theme'] != $theme_key || $block['region'] != 'dashboard_disabled') {
       unset($blocks[$key]);
     }
   }
@@ -340,7 +345,7 @@ function dashboard_update() {
     parse_str($_REQUEST['regions'], $regions);
     foreach ($regions as $region_name => $blocks) {
       if ($region_name == 'disabled_blocks') {
-        $region_name = '';
+        $region_name = 'dashboard_disabled';
       }
       foreach ($blocks as $weight => $block_string) {
         // Parse the query string to determine the block's module and delta.
@@ -351,12 +356,7 @@ function dashboard_update() {
 
         $block->region = $region_name;
         $block->weight = $weight;
-        if (empty($region_name)) {
-          $block->status = 0;
-        }
-        else {
-          $block->status = 1;
-        }
+        $block->status = 1;
 
         db_merge('block')
           ->key(array(
