﻿Index: includes/menu.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/menu.inc,v
retrieving revision 1.352
diff -u -p -r1.352 menu.inc
--- includes/menu.inc	11 Oct 2009 19:39:30 -0000	1.352
+++ includes/menu.inc	12 Oct 2009 09:16:28 -0000
@@ -118,6 +118,11 @@ define('MENU_IS_LOCAL_TASK', 0x0080);
 define('MENU_IS_LOCAL_ACTION', 0x0100);
 
 /**
+ * Internal menu flag -- menu item is the default settings page.
+ */
+define('MENU_SETTINGS_DEFAULT', 0x0016);
+
+/**
  * @} End of "Menu flags".
  */
 
Index: misc/help.png
===================================================================
RCS file: /cvs/drupal/drupal/misc/help.png,v
retrieving revision 1.2
diff -u -p -r1.2 help.png
Binary files /tmp/cvs6rRK0X and help.png differ
Index: modules/aggregator/aggregator.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/aggregator/aggregator.module,v
retrieving revision 1.425
diff -u -p -r1.425 aggregator.module
--- modules/aggregator/aggregator.module	9 Oct 2009 00:59:55 -0000	1.425
+++ modules/aggregator/aggregator.module	12 Oct 2009 09:16:29 -0000
@@ -92,6 +92,7 @@ function aggregator_menu() {
     'page callback' => 'aggregator_admin_overview',
     'access arguments' => array('administer news feeds'),
     'file' => 'aggregator.admin.inc',
+    'type' => MENU_NORMAL_ITEM | MENU_SETTINGS_DEFAULT,
   );
   $items['admin/config/services/aggregator/add/feed'] = array(
     'title' => 'Add feed',
Index: modules/block/block.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/block/block.module,v
retrieving revision 1.386
diff -u -p -r1.386 block.module
--- modules/block/block.module	10 Oct 2009 21:39:01 -0000	1.386
+++ modules/block/block.module	12 Oct 2009 09:16:30 -0000
@@ -78,6 +78,7 @@ function block_menu() {
     'access arguments' => array('administer blocks'),
     'theme callback' => '_block_custom_theme',
     'file' => 'block.admin.inc',
+    'type' => MENU_NORMAL_ITEM | MENU_SETTINGS_DEFAULT,
   );
   $items['admin/structure/block/list'] = array(
     'title' => 'List',
@@ -761,7 +762,7 @@ function _block_render_blocks($region_bl
  */
 function _block_get_cache_id($block) {
   global $user;
-  
+
   // User 1 being out of the regular 'roles define permissions' schema,
   // it brings too many chances of having unwanted output get in the cache
   // and later be served to other users. We therefore exclude user 1 from
@@ -824,7 +825,7 @@ function template_preprocess_block(&$var
 /**
  * Implement hook_user_role_delete().
  *
- * Remove deleted role from blocks that use it. 
+ * Remove deleted role from blocks that use it.
  */
 function block_user_role_delete($role) {
   db_delete('block_role')
Index: modules/filter/filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v
retrieving revision 1.296
diff -u -p -r1.296 filter.module
--- modules/filter/filter.module	10 Oct 2009 21:39:02 -0000	1.296
+++ modules/filter/filter.module	12 Oct 2009 09:16:32 -0000
@@ -76,6 +76,7 @@ function filter_menu() {
     'page arguments' => array('filter_admin_overview'),
     'access arguments' => array('administer filters'),
     'file' => 'filter.admin.inc',
+    'type' => MENU_NORMAL_ITEM | MENU_SETTINGS_DEFAULT,
   );
   $items['admin/config/content/formats/list'] = array(
     'title' => 'List',
Index: modules/forum/forum.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/forum/forum.module,v
retrieving revision 1.522
diff -u -p -r1.522 forum.module
--- modules/forum/forum.module	11 Oct 2009 03:07:18 -0000	1.522
+++ modules/forum/forum.module	12 Oct 2009 09:16:33 -0000
@@ -606,7 +606,7 @@ function forum_block_view_pre_render($el
  */
 function forum_form($node, $form_state) {
   $type = node_type_get_type($node);
-  
+
   if (!empty($node->nid)) {
     $forum_terms = $node->taxonomy_forums;
     // If editing, give option to leave shadows
Index: modules/help/help.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/help/help.admin.inc,v
retrieving revision 1.10
diff -u -p -r1.10 help.admin.inc
--- modules/help/help.admin.inc	9 Oct 2009 00:59:59 -0000	1.10
+++ modules/help/help.admin.inc	12 Oct 2009 09:16:33 -0000
@@ -38,7 +38,11 @@ function help_page($name) {
     $admin_tasks = system_get_module_admin_tasks($name);
     if (!empty($admin_tasks)) {
       ksort($admin_tasks);
-      $output .= theme('item_list', array('items' => $admin_tasks, 'title' => t('@module administration pages', array('@module' => $module['name']))));
+      $admin_links = array();
+      foreach ($admin_tasks as $task) {
+      	$admin_links[] = l($task['title'], $task['path'], $task['options']);
+      }
+      $output .= theme('item_list', array('items' => $admin_links, 'title' => t('@module administration pages', array('@module' => $module['name']))));
     }
 
   }
Index: modules/image/image.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/image/image.module,v
retrieving revision 1.19
diff -u -p -r1.19 image.module
--- modules/image/image.module	12 Oct 2009 05:22:57 -0000	1.19
+++ modules/image/image.module	12 Oct 2009 09:16:34 -0000
@@ -55,6 +55,7 @@ function image_menu() {
     'page callback' => 'image_style_list',
     'access arguments' => array('administer image styles'),
     'file' => 'image.admin.inc',
+    'type' => MENU_NORMAL_ITEM | MENU_SETTINGS_DEFAULT,
   );
   $items['admin/config/media/image-styles/list'] = array(
     'title' => 'List',
Index: modules/locale/locale.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/locale/locale.module,v
retrieving revision 1.262
diff -u -p -r1.262 locale.module
--- modules/locale/locale.module	10 Oct 2009 16:48:38 -0000	1.262
+++ modules/locale/locale.module	12 Oct 2009 09:16:35 -0000
@@ -93,6 +93,12 @@ function locale_help($path, $arg) {
  * Implement hook_menu().
  */
 function locale_menu() {
+  // Define main settings page.
+  $items['admin/config/regional'] = array(
+    'title' => 'Regional and language',
+    'description' => 'Regional settings, localization and translation.',
+    'type' => MENU_SETTINGS_DEFAULT,
+  );
   // Manage languages
   $items['admin/config/regional/language'] = array(
     'title' => 'Languages',
Index: modules/path/path.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/path/path.module,v
retrieving revision 1.170
diff -u -p -r1.170 path.module
--- modules/path/path.module	5 Sep 2009 15:05:03 -0000	1.170
+++ modules/path/path.module	12 Oct 2009 09:16:35 -0000
@@ -39,6 +39,7 @@ function path_menu() {
     'page callback' => 'path_admin_overview',
     'access arguments' => array('administer url aliases'),
     'file' => 'path.admin.inc',
+    'type' => MENU_NORMAL_ITEM | MENU_SETTINGS_DEFAULT,
   );
   $items['admin/config/search/path/edit'] = array(
     'title' => 'Edit alias',
Index: modules/profile/profile.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/profile/profile.module,v
retrieving revision 1.279
diff -u -p -r1.279 profile.module
--- modules/profile/profile.module	10 Oct 2009 21:39:03 -0000	1.279
+++ modules/profile/profile.module	12 Oct 2009 09:16:36 -0000
@@ -90,6 +90,7 @@ function profile_menu() {
     'page arguments' => array('profile_admin_overview'),
     'access arguments' => array('administer users'),
     'file' => 'profile.admin.inc',
+    'type' => MENU_NORMAL_ITEM | MENU_SETTINGS_DEFAULT,
   );
   $items['admin/config/people/profile/add'] = array(
     'title' => 'Add field',
Index: modules/search/search.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/search/search.module,v
retrieving revision 1.319
diff -u -p -r1.319 search.module
--- modules/search/search.module	9 Oct 2009 01:00:02 -0000	1.319
+++ modules/search/search.module	12 Oct 2009 09:16:37 -0000
@@ -195,7 +195,7 @@ function search_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('search_admin_settings'),
     'access arguments' => array('administer search'),
-    'type' => MENU_NORMAL_ITEM,
+    'type' => MENU_NORMAL_ITEM | MENU_SETTINGS_DEFAULT,
     'file' => 'search.admin.inc',
   );
   $items['admin/config/search/settings/reindex'] = array(
Index: modules/statistics/statistics.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/statistics/statistics.module,v
retrieving revision 1.320
diff -u -p -r1.320 statistics.module
--- modules/statistics/statistics.module	5 Sep 2009 13:49:28 -0000	1.320
+++ modules/statistics/statistics.module	12 Oct 2009 09:16:38 -0000
@@ -171,6 +171,7 @@ function statistics_menu() {
     'page arguments' => array('statistics_settings_form'),
     'access arguments' => array('administer statistics'),
     'file' => 'statistics.admin.inc',
+    'type' => MENU_NORMAL_ITEM | MENU_SETTINGS_DEFAULT,
   );
   $items['user/%user/track/navigation'] = array(
     'title' => 'Track page visits',
Index: modules/system/system.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v
retrieving revision 1.209
diff -u -p -r1.209 system.admin.inc
--- modules/system/system.admin.inc	9 Oct 2009 01:00:05 -0000	1.209
+++ modules/system/system.admin.inc	12 Oct 2009 09:16:40 -0000
@@ -160,16 +160,25 @@ function system_admin_by_module() {
 
     // Only display a section if there are any available tasks.
     if (count($admin_tasks)) {
+      $admin_links = array();
 
       // Check for help links.
       if ($help_arg && module_invoke($module, 'help', "admin/help#$module", $help_arg)) {
-        $admin_tasks[100] = l(t('Get help'), "admin/help/$module");
+        $admin_tasks[100] = array(
+          'title' => t('Get help'),
+          'path' => "admin/help/$module",
+          'options' => array('attributes' => array('class' => 'module-help-link')),
+        );
+        // $admin_tasks[100] = l(t('Get help'), "admin/help/$module", array('attributes' => array('class' => 'module-help-link')));
       }
 
       // Sort.
       ksort($admin_tasks);
 
-      $menu_items[$file->info['name']] = array($file->info['description'], $admin_tasks);
+      foreach ($admin_tasks as $task) {
+        $admin_links[] = l($task['title'], $task['path'], $task['options']);
+      }
+      $menu_items[$file->info['name']] = array($file->info['description'], $admin_links);
     }
   }
   return theme('system_admin_by_module', array('menu_items' => $menu_items));
@@ -695,13 +704,31 @@ function system_modules($form, $form_sta
         }
       }
     }
+    $extra['links'] = array();
+    $links = array();
+    // Only get links to permission and default settings.
+    $admin_tasks = system_get_module_admin_tasks($module->name, FALSE);
+    foreach ($admin_tasks as $key => $task) {
+      // Build a link with no text; only show the icon.
+      if (!isset($task['options']['attributes']['title'])) {
+      	$task['options']['attributes']['title'] = $task['title'];
+      }
+      if (!empty($task['options']['attributes']['class'])) {
+        $links[] = l(' ', $task['path'], $task['options']);
+      }
+    }
     // Generate link for module's help page, if there is one.
     if ($help_arg && $module->status && in_array($filename, module_implements('help'))) {
       if (module_invoke($filename, 'help', "admin/help#$filename", $help_arg)) {
         // Module has a help page.
-        $extra['help'] = theme('more_help_link', array('url' => url("admin/help/$filename")));
+        $links[] = l('', "admin/help/$filename", array('attributes' => array('class' => 'module-help-link', 'title' => t('More help'))));
       }
     }
+    $links = array_reverse($links, TRUE);
+
+    if (count($links)) {
+      $extra['links'] = theme('item_list', array('items' => $links));
+    }
     // Mark dependents disabled so the user cannot remove required modules.
     $dependents = array();
     // If this module is required by other modules, list those, and then make it
@@ -732,6 +759,7 @@ function system_modules($form, $form_sta
         t('Name'),
         t('Version'),
         t('Description'),
+        t('Operations'),
       ),
     );
   }
@@ -762,7 +790,7 @@ function _system_modules_build_row($info
     'required_by' => array(),
     'disabled' => FALSE,
     'enabled' => FALSE,
-    'help' => '',
+    'extra' => array(),
   );
   $form = array(
     '#tree' => TRUE,
@@ -821,10 +849,10 @@ function _system_modules_build_row($info
     $form['description']['#markup'] .= theme('system_modules_incompatible', array('message' => $status_long));
   }
 
-  // Show a "more help" link for modules that have them.
-  if ($extra['help']) {
-    $form['help'] = array(
-      '#markup' => $extra['help'],
+  // Show a set of useful links for modules that have them.
+  if (count($extra['links'])) {
+    $form['links'] = array(
+      '#markup' => $extra['links'],
     );
   }
   return $form;
@@ -1932,7 +1960,7 @@ function system_php() {
 function system_batch_page() {
   require_once DRUPAL_ROOT . '/includes/batch.inc';
   $output = _batch_page();
-  
+
   // Use the same theme that the page that started the batch.
   $batch = &batch_get();
   $GLOBALS['custom_theme'] = $batch['theme'];
@@ -2194,14 +2222,8 @@ function theme_system_modules_fieldset($
     }
     $row[] = $label . '><strong>' . drupal_render($module['name']) . '</strong></label>';
     $row[] = drupal_render($module['version']);
-    $description = '';
-    // If we have help, it becomes the first part
-    // of the description - with CSS, it is float: right'd.
-    if (isset($module['help'])) {
-      $description = '<div class="module-help">' . drupal_render($module['help']) . '</div>';
-    }
     // Add the description, along with any modules it requires.
-    $description .= drupal_render($module['description']);
+    $description = drupal_render($module['description']);
     if ($module['#requires']) {
       $description .= '<div class="admin-requirements">' . t('Requires: !module-list', array('!module-list' => implode(', ', $module['#requires']))) . '</div>';
     }
@@ -2209,6 +2231,8 @@ function theme_system_modules_fieldset($
       $description .= '<div class="admin-requirements">' . t('Required by: !module-list', array('!module-list' => implode(', ', $module['#required_by']))) . '</div>';
     }
     $row[] = array('data' => $description, 'class' => array('description'));
+    // Display links (such as help or permissions) in its own column.
+    $row[] = array('data' => drupal_render($module['links']), 'class' => array('operations'));
     $rows[] = $row;
   }
 
Index: modules/system/system.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.css,v
retrieving revision 1.63
diff -u -p -r1.63 system.css
--- modules/system/system.css	21 Sep 2009 08:52:41 -0000	1.63
+++ modules/system/system.css	12 Oct 2009 09:16:41 -0000
@@ -159,16 +159,37 @@ tr.merge-up, tr.merge-up td, tr.merge-up
 .more-help-link {
   text-align: right; /* LTR */
 }
-.more-help-link a {
-  padding: 1px 0 1px 20px; /* LTR */
+.more-help-link a, a.module-help-link {
+  padding: 1px 0 1px 26px; /* LTR */
+  display: block;
+  height: 16px;
   background: url(../../misc/help.png) 0 50% no-repeat; /* LTR */
 }
+.module-permissions {
+  padding: 1px 0 1px 26px; /* LTR */
+  display: block;
+  height: 16px;
+  background: url(../../misc/permissions.png) 0 50% no-repeat; /* LTR */
+}
+.module-settings {
+  padding: 1px 0 1px 26px; /* LTR */
+  display: block;
+  height: 16px;
+  background: url(../../misc/settings.png) 0 50% no-repeat; /* LTR */
+}
 .more-link {
   text-align: right; /* LTR */
 }
-.module-help {
-  margin-left: 1em; /* LTR */
-  float: right; /* LTR */
+td.operations {
+  clear: both;
+  width: 85px;
+}
+.operations .item-list ul li {
+  float: right; 
+  margin: 0 0 0 ; 
+}
+.operations .item-list ul li.last {
+  margin-left: 0; 
 }
 .nowrap {
   white-space: nowrap;
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.804
diff -u -p -r1.804 system.module
--- modules/system/system.module	10 Oct 2009 16:48:38 -0000	1.804
+++ modules/system/system.module	12 Oct 2009 09:16:43 -0000
@@ -789,6 +789,7 @@ function system_menu() {
     'page callback' => 'system_admin_menu_block_page',
     'access arguments' => array('access administration pages'),
     'file' => 'system.admin.inc',
+    'type' => MENU_NORMAL_ITEM,
   );
   $items['admin/config/regional/settings'] = array(
     'title' => 'Regional settings',
@@ -1668,7 +1669,7 @@ function system_admin_menu_block($item) 
   $has_subitems = FALSE;
   $result = db_query("
     SELECT m.load_functions, m.to_arg_functions, m.access_callback, m.access_arguments, m.page_callback, m.page_arguments, m.title, m.title_callback, m.title_arguments, m.theme_callback, m.theme_arguments, m.type, m.description, m.path, m.weight as router_weight, ml.*
-    FROM {menu_router} m 
+    FROM {menu_router} m
     LEFT JOIN {menu_links} ml ON m.path = ml.router_path
     WHERE (ml.plid = :plid AND ml.menu_name = :name AND hidden = 0) OR (m.tab_parent = :path AND m.type IN (:local_task, :default_task))", array(':plid' => $item['mlid'], ':name' => $item['menu_name'], ':path' => $item['path'], ':local_task' => MENU_LOCAL_TASK, ':default_task' => MENU_DEFAULT_LOCAL_TASK), array('fetch' => PDO::FETCH_ASSOC));
   foreach ($result as $link) {
@@ -1702,7 +1703,7 @@ function system_admin_menu_block($item) 
     }
   }
   if ($has_subitems) {
-    // If we've had at least one non-tab subitem, remove the link for the 
+    // If we've had at least one non-tab subitem, remove the link for the
     // default task, since that is already broken down to subitems.
     unset($content[$default_task]);
   }
@@ -2347,11 +2348,18 @@ function system_admin_compact_page($mode
  *
  * @param $module
  *   Module name.
+ * @param $all
+ *   Return all task links provided by this module.
+ *   If this is set to FALSE only links to permission and links marked as
+ *   MENU_SETTINGS_DEFAULT are returned.
  * @return
  *   An array of task links.
  */
-function system_get_module_admin_tasks($module) {
+function system_get_module_admin_tasks($module, $all = TRUE) {
   $items = &drupal_static(__FUNCTION__, array());
+  $admin_access = user_access('administer permissions');
+  $admin_tasks = array();
+  $admin_task_count = 0;
 
   if (empty($items)) {
     $result = db_query("
@@ -2365,19 +2373,36 @@ function system_get_module_admin_tasks($
     }
   }
 
-  $admin_access = user_access('administer permissions');
-  $admin_tasks = array();
-  $admin_task_count = 0;
   // Check for permissions.
   if (in_array($module, module_implements('permission')) && $admin_access) {
-    $admin_tasks[-1] = l(t('Configure permissions'), 'admin/config/people/permissions', array('fragment' => 'module-' . $module));
+    $admin_tasks[-1] = array(
+      'title' => t('Configure permissions'),
+      'path' => 'admin/config/people/permissions',
+      'options' => array('fragment' => 'module-' . $module, 'attributes' => array('class' => 'module-permissions')),
+    );
   }
 
   // Check for menu items that are admin links.
   if (in_array($module, module_implements('menu')) && $menu = module_invoke($module, 'menu')) {
-    foreach (array_keys($menu) as $path) {
+    foreach ($menu as $path => $item) {
       if (isset($items[$path])) {
-        $admin_tasks[$items[$path]['title'] . $admin_task_count ++] = l($items[$path]['title'], $path);
+        if ($all == TRUE) {
+          $class = (strpos($path, 'admin/config') !== FALSE) ? 'module-settings' : '';
+          $admin_tasks[$items[$path]['title'] . $admin_task_count ++] = array(
+            'title' => $items[$path]['title'],
+            'path' => $path,
+            'options' => array('attributes' => array('class' => $class)),
+          );
+        }
+        else {
+          if (isset($item['type']) && (($item['type'] & MENU_SETTINGS_DEFAULT) == MENU_SETTINGS_DEFAULT)) {
+            $admin_tasks[$item['title'] . $admin_task_count ++] = array(
+              'title' => isset($item['description']) ? $item['description'] : $item['title'],
+              'path' => $path,
+              'options' => array('attributes' => array('class' => 'module-settings')),
+            );
+          }
+        }
       }
     }
   }
Index: modules/upload/upload.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/upload/upload.module,v
retrieving revision 1.261
diff -u -p -r1.261 upload.module
--- modules/upload/upload.module	9 Oct 2009 01:00:07 -0000	1.261
+++ modules/upload/upload.module	12 Oct 2009 09:16:44 -0000
@@ -98,7 +98,7 @@ function upload_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('upload_admin_settings'),
     'access arguments' => array('administer site configuration'),
-    'type' => MENU_NORMAL_ITEM,
+    'type' => MENU_NORMAL_ITEM | MENU_SETTINGS_DEFAULT,
     'file' => 'upload.admin.inc',
   );
   return $items;
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.1062
diff -u -p -r1.1062 user.module
--- modules/user/user.module	10 Oct 2009 21:39:03 -0000	1.1062
+++ modules/user/user.module	12 Oct 2009 09:16:48 -0000
@@ -1435,6 +1435,7 @@ function user_menu() {
    'access arguments' => array('access administration pages'),
    'file' => 'system.admin.inc',
    'file path' => drupal_get_path('module', 'system'),
+   'type' => MENU_NORMAL_ITEM | MENU_SETTINGS_DEFAULT,
   );
   $items['admin/config/people/accounts'] = array(
     'title' => 'Account settings',
Index: themes/seven/style.css
===================================================================
RCS file: /cvs/drupal/drupal/themes/seven/style.css,v
retrieving revision 1.18
diff -u -p -r1.18 style.css
--- themes/seven/style.css	11 Sep 2009 13:48:44 -0000	1.18
+++ themes/seven/style.css	12 Oct 2009 09:16:48 -0000
@@ -430,6 +430,10 @@ table tr.selected td {
   border-color: #eeb;
 }
 
+#system-modules table td {
+  vertical-align: baseline;
+}
+
 /**
  * Forms.
  */
