Index: modules/admin/admin-toolbar.tpl.php
===================================================================
RCS file: modules/admin/admin-toolbar.tpl.php
diff -N modules/admin/admin-toolbar.tpl.php
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/admin/admin-toolbar.tpl.php	1 Jul 2009 12:11:26 -0000
@@ -0,0 +1,22 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Default template for admin toolbar.
+ *
+ * Available variables:
+ * - $user_menu: User account / logout links.
+ * - $admin_menu: Top level management menu links.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_admin_toolbar()
+ */
+?>
+<div id="admin-toolbar" class="clearfix">
+  <div class="admin-menu clearfix">
+    <?php print $user_menu ?>
+    <?php print $admin_menu ?>
+  </div>
+  <div class="shadow"></div>
+</div>
Index: modules/admin/admin.info
===================================================================
RCS file: modules/admin/admin.info
diff -N modules/admin/admin.info
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/admin/admin.info	1 Jul 2009 12:11:26 -0000
@@ -0,0 +1,7 @@
+; $Id$
+name = "Admininstration toolbar"
+description = "Toolbar exposing the top level administration menu items"
+core = 7.x
+package = Core
+version = VERSION
+files[] = "admin.module"
\ No newline at end of file
Index: modules/admin/admin.module
===================================================================
RCS file: modules/admin/admin.module
diff -N modules/admin/admin.module
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/admin/admin.module	1 Jul 2009 12:11:26 -0000
@@ -0,0 +1,174 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Administration toolbar for quick access to top level administration items.
+ */
+
+/**
+ * Implementation of hook_perm().
+ */
+function admin_perm() {
+  return array(
+    'admin toolbar' => array(
+      'title' => t('Use administration toolbar'),
+      'description' => t('Access the persistent administration toolbar on each page.'),
+    ),
+  );
+}
+
+/**
+ * Implementation of hook_theme().
+ */
+function admin_theme($existing, $type, $theme, $path) {
+  $items = array();
+  $items['admin_toolbar'] = array(
+    'arguments' => array('admin_toolbar' => array()),
+    'template' => 'admin-toolbar',
+    'path' => drupal_get_path('module', 'admin'),
+  );
+  return $items;
+}
+
+/**
+ * Implementation of hook_page_alter().
+ * 
+ * Add admin toolbar to the page_top region automaticaly.
+ */
+function admin_page_alter(&$page) {
+  if (user_access('admin toolbar')) {
+    $page['page_top']['admin_toolbar'] = admin_toolbar();
+  }
+}
+
+/**
+ * Implementation of hook_preprocess_page().
+ *
+ * Add some page classes, so global page theming can adjust to the toolbar.
+ */
+function admin_preprocess_page(&$vars) {
+  if (user_access('admin toolbar')) {
+    $vars['classes_array'][] = 'admin-toolbar';
+  }
+}
+
+/**
+ * Build the admin menu as a structured array ready for drupal_render().
+ */
+function admin_toolbar() {
+  $module_path = drupal_get_path('module', 'admin');
+  $output = array(
+    '#theme' => 'admin_toolbar',
+    '#attached_css' => array(
+      $module_path . '/admin_toolbar.css',
+    ),
+  );
+
+  // Retrieve the admin menu from the database.
+  $tree = admin_get_menu_tree();
+  $links = admin_menu_navigation_links($tree);
+  $output['admin_menu'] = $links;
+
+  // Add logout & user account links
+  global $user;
+  $user_menu = array(
+    'account' => array(
+      'title' => t('Hello <strong>!username</strong>', array('!username' => check_plain($user->name))),
+      'href' => 'user',
+      'html' => TRUE,
+      'attributes' => array('class' => 'to-overlay'),
+    ),
+    'logout' => array(
+      'title' => t('Logout'),
+      'href' => 'user/logout',
+    ),
+  );
+  $output['user_menu'] = $user_menu;
+
+  // Set the default toolbar state to expanded.
+  $output['collapsed'] = FALSE;
+  return $output;
+}
+
+/**
+ * Get only the top level items below the 'admin' path.
+ */
+function admin_get_menu_tree() {
+  $tree = menu_tree_all_data('management');
+  foreach ($tree as $k => $item) {
+    if ($item['link']['link_path'] == 'admin' && !empty($item['below'])) {
+      // Only take items right below the 'admin' path. All other
+      // management items are discarded.
+      $tree = $item['below'];
+      break;
+    }
+  }
+  foreach ($tree as $k => $item) {
+    // Get rid of subitems to have a leaner data structure.
+    unset($tree[$k]['below']);
+  }
+  return $tree;
+}
+
+/**
+ * Generate a links array from a menu tree array.
+ *
+ * Based on menu_navigation_links() with some admin toolbar specific changes.
+ */
+function admin_menu_navigation_links($tree) {
+  $links = array();
+  foreach ($tree as $item) {
+    if (!$item['link']['hidden']) {
+      $class = '';
+      // Make sure we have a path specific ID in place, so
+      // we can attach icons and behaviors to the items.
+      $id = str_replace('/', '-', $item['link']['href']);
+
+      $l = $item['link']['localized_options'];
+      $l['href'] = $item['link']['href'];
+      // Add icon placeholder.
+      $l['title'] = '<span class="icon"></span>' . $item['link']['title'];
+      // Add admin link ID and to-overlay class for the overlay.
+      $l['attributes'] = array('id' => 'admin-link-' . $id, 'class' => 'to-overlay');
+      $l['html'] = TRUE;
+
+      $class = ' path-' . $id;
+      if (admin_in_active_trail($item['link']['href'])) {
+        $class .= ' active-trail';
+      }
+      $links['menu-'. $item['link']['mlid'] . $class] = $l;
+    }
+  }
+  return $links;
+}
+
+/**
+ * Checks whether an item is in the active trail.
+ *
+ * Useful when using a menu generated by menu_tree_all_data() which does 
+ * not set the 'in_active_trail' flag on items.
+ */
+function admin_in_active_trail($path) {
+  $active_paths = &drupal_static(__FUNCTION__);
+
+  // Gather active paths
+  if (!isset($active_paths)) {
+    $active_paths = array();
+    $trail = menu_get_active_trail();
+    foreach ($trail as $item) {
+      if (!empty($item['href'])) {
+        $active_paths[] = $item['href'];
+      }
+    }
+  }
+  return in_array($path, $active_paths);
+}
+
+/**
+ * Preprocessor for theme('admin_toolbar').
+ */
+function template_preprocess_admin_toolbar(&$vars) {
+  $vars['user_menu'] = theme('links', $vars['admin_toolbar']['user_menu'], array('id' => 'admin-toolbar-user'));
+  $vars['admin_menu'] = theme('links', $vars['admin_toolbar']['admin_menu'], array('id' => 'admin-toolbar-menu'));
+}
Index: modules/admin/admin_toolbar.css
===================================================================
RCS file: modules/admin/admin_toolbar.css
diff -N modules/admin/admin_toolbar.css
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/admin/admin_toolbar.css	1 Jul 2009 12:11:26 -0000
@@ -0,0 +1,116 @@
+/* $Id$ */
+
+body.admin-toolbar {
+  padding-top: 30px;
+}
+
+/**
+ * Aggressive resets so we can achieve a consistent look in
+ * hostile CSS environments.
+ */
+div#admin-toolbar,
+div#admin-toolbar * {
+  margin: 0px;
+  padding: 0px;
+  border: 0px;
+  outline: 0px;
+  font-size: 100%;
+  vertical-align: baseline;
+  line-height: inherit;
+  text-align: left;
+  list-style: none;
+}
+
+/**
+ * Base styles
+ */
+div#admin-toolbar {
+  font: normal 11px/20px "Lucida Grande",Verdana,sans-serif;
+  background: #666;
+  color: #ccc;
+
+  position: fixed;
+  left: 0px;
+  right: 0px;
+  top: 0px;
+
+  z-index: 100;
+}
+
+div#admin-toolbar div.shadow {
+  position: absolute;
+  left: 0px;
+  right: 0px;
+  bottom: -15px;
+
+  height: 15px;
+  background: url(sprite.png) 0px -85px repeat-x;
+}
+
+div#admin-toolbar a {
+  text-decoration: none;
+  color: #fff;
+}
+
+div#admin-toolbar ul li,
+div#admin-toolbar ul li a {
+  float: left;
+}
+
+/**
+ * First level menus
+ */
+div#admin-toolbar div.admin-menu {
+  background: url(sprite.png) 0px -20px repeat-x;
+  height: 25px;
+  line-height: 20px;
+  padding: 5px 10px 0px;
+
+  overflow: hidden;
+  position: relative;
+}
+
+div#admin-toolbar div.admin-menu #admin-toolbar-user {
+  position: absolute;
+  right: 10px;
+}
+
+div#admin-toolbar div.admin-menu #admin-toolbar-menu {
+  position: absolute;
+  left: 10px;
+}
+
+div#admin-toolbar div.admin-menu ul li a {
+  -moz-border-radius: 10px;
+  -webkit-border-radius: 10px;
+  padding: 0px 10px;
+}
+
+div#admin-toolbar div.admin-menu ul li a:hover {
+  background: #444;
+}
+
+div#admin-toolbar div.admin-menu ul li a.active:hover,
+div#admin-toolbar div.admin-menu ul li a.active {
+  text-shadow: #333 0px 1px 0px;
+  background: url(sprite.png) 0px 0px repeat-x;
+}
+
+/**
+ * IE 6 Fixes.
+ *
+ * Since IE 6 has severe problems interpreting fixed positioning,
+ * we downgrade the behavior of the admin toolbar entirely to static
+ * positioning.
+ */
+* html body.admin-toolbar {
+  padding-top: 0px;
+}
+
+* html div#admin-toolbar {
+  position: static;
+}
+
+* html div#admin-toolbar div.shadow {
+  display: none;
+}
Index: modules/admin/sprite.png
===================================================================
RCS file: modules/admin/sprite.png
diff -N modules/admin/sprite.png
Binary files /dev/null and sprite.png differ
