Index: skinr.api.php
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/skinr/skinr.api.php,v
retrieving revision 1.5
diff -u -p -r1.5 skinr.api.php
--- skinr.api.php	16 Jan 2011 19:13:32 -0000	1.5
+++ skinr.api.php	21 Jan 2011 01:32:14 -0000
@@ -199,6 +199,9 @@ function hook_skinr_api_VERSION() {
  *   enable skins which are required to make the theme work properly by default.
  *   Setting this property to 1 will cause it to be enabled by default for all
  *   installed themes.
+ * - status: (optional) An associative array whose keys are theme names and
+ *   whose corresponding values denote the desired default status for the
+ *   particular theme.
  *
  * The "hook" prefix is substituted with the name of the module or theme
  * implementing it.
@@ -295,6 +298,13 @@ function hook_skinr_skin_PLUGIN_info() {
         'attached' => array('css' => array('css/nav-colors.css')),
       ),
     ),
+    // Optionally, specify a global default status, or default status for a
+    // particular theme; mostly makes sense for themes only.
+    'default status' => 0,
+    'status' => array(
+      'bartik' => 1,
+      'garland' => 0,
+    ),
   );
   return $skins;
 }
Index: skinr.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/skinr/skinr.module,v
retrieving revision 1.42
diff -u -p -r1.42 skinr.module
--- skinr.module	16 Jan 2011 19:13:32 -0000	1.42
+++ skinr.module	21 Jan 2011 01:18:09 -0000
@@ -840,30 +840,6 @@ function skinr_current_theme($exclude_ad
 }
 
 /**
- * Prepare defaults for skins.
- *
- * @return
- *   An array of default skin settings.
- *
- * @todo Merge into skinr_get_skin_info() and remove this function.
- */
-function skinr_skin_info_default() {
-  return array(
-    'name' => '',
-    'title' => '',
-    'type' => 'checkboxes',
-    'description' => '',
-    'group' => '',
-    'theme hooks' => array('*'),
-    'attached' => array(),
-    'options' => array(),
-    'weight' => NULL,
-    'default status' => 0,
-    'status' => array(),
-  );
-}
-
-/**
  * Prepare the default status for a skin.
  *
  * @param $default_status
@@ -874,11 +850,11 @@ function skinr_skin_info_default() {
  */
 function skinr_skin_info_status_default($default_status = 0) {
   $status = array();
-  foreach (list_themes() as $theme_name => $theme) {
-    if (!$theme->status) {
+  foreach (skinr_implements() as $name => $extension) {
+    if ($extension['type'] != 'theme') {
       continue;
     }
-    $status[$theme_name] = $default_status;
+    $status[$name] = $default_status;
   }
   return $status;
 }
@@ -928,8 +904,20 @@ function _skinr_add_path_to_files(&$file
  */
 function skinr_skin_info_process(&$skin_infos, $source) {
   foreach ($skin_infos as $skin_name => $skin_info) {
-    // Merge in defaults.
-    $skin_infos[$skin_name] = array_merge(skinr_skin_info_default(), $skin_infos[$skin_name]);
+    // Populate default properties.
+    $skin_infos[$skin_name] = $skin_infos[$skin_name] + array(
+      'name' => '',
+      'title' => '',
+      'type' => 'checkboxes',
+      'description' => '',
+      'group' => '',
+      'theme hooks' => array('*'),
+      'attached' => array(),
+      'options' => array(),
+      'weight' => NULL,
+      'default status' => 0,
+      'status' => array(),
+    );
 
     // Merge in name.
     $skin_infos[$skin_name]['name'] = $skin_name;
@@ -937,8 +925,9 @@ function skinr_skin_info_process(&$skin_
     // Merge in source information.
     $skin_infos[$skin_name]['source'] = $source;
 
-    // Merge in default statuses for all themes.
-    $skin_infos[$skin_name]['status'] = array_merge(skinr_skin_info_status_default($skin_infos[$skin_name]['default status']), $skin_infos[$skin_name]['status']);
+    // Merge in default status for all themes.
+    $default_status = skinr_skin_info_status_default($skin_infos[$skin_name]['default status']);
+    $skin_infos[$skin_name]['status'] = array_merge($default_status, $skin_infos[$skin_name]['status']);
 
     // Add path to stylesheets.
     if (isset($skin_infos[$skin_name]['attached']['css'])) {
Index: skinr_ui.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/skinr/skinr_ui.module,v
retrieving revision 1.24
diff -u -p -r1.24 skinr_ui.module
--- skinr_ui.module	20 Dec 2010 21:42:29 -0000	1.24
+++ skinr_ui.module	21 Jan 2011 01:49:53 -0000
@@ -41,7 +41,6 @@ function skinr_ui_menu() {
     'title' => 'List',
     'description' => t('Manage Skinr settings.'),
     'type' => MENU_DEFAULT_LOCAL_TASK,
-    'parent' => 'admin/appearance/skinr',
     'weight' => -10,
   );
 
@@ -51,7 +50,7 @@ function skinr_ui_menu() {
     'description' => 'Manage which skins are available when changing Skinr settings.',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('skinr_ui_admin_skin_infos'),
-    'access arguments' => array('administer site configuration'),
+    'access arguments' => array('administer skinr'),
     'file' => 'skinr_ui.admin.inc',
     'type' => MENU_LOCAL_TASK,
     'parent' => 'admin/appearance/skinr',
@@ -60,7 +59,6 @@ function skinr_ui_menu() {
     'title' => 'List',
     'description' => 'Manage your skins.',
     'type' => MENU_DEFAULT_LOCAL_TASK,
-    'parent' => 'admin/appearance/skinr/skins',
     'weight' => -1,
   );
   // drupal_uninstall_modules() invokes hook_menu() in disabled modules and does
@@ -80,10 +78,9 @@ function skinr_ui_menu() {
       'description' => 'Manage which options are available for each Skin when changing Skinr settings.',
       'page callback' => 'drupal_get_form',
       'page arguments' => array('skinr_ui_admin_skin_infos_settings', $skin_info['name']),
-      'access arguments' => array('administer site configuration'),
+      'access arguments' => array('administer skinr'),
       'file' => 'skinr_ui.admin.inc',
       'type' => MENU_LOCAL_TASK,
-      'parent' => 'admin/appearance/skinr/skins',
     );
   }
 
@@ -93,7 +90,6 @@ function skinr_ui_menu() {
     'page callback' => 'skinr_rules',
     'type' => MENU_LOCAL_TASK,
     'access arguments' => array('administer skinr'),
-    'parent' => 'admin/appearance/skinr',
     'weight' => 1,
     'description' => t('Configure region and page level Skinr rules.'),
     'file' => 'skinr_ui.rules.inc',
@@ -130,7 +126,6 @@ function skinr_ui_menu() {
     'page arguments' => array('skinr_ui_import_form'),
     'type' => MENU_LOCAL_TASK,
     'access arguments' => array('administer skinr'),
-    'parent' => 'admin/appearance/skinr',
     'weight' => 2,
     'description' => t('Import Skinr settings.'),
     'file' => 'skinr_ui.admin.inc',
@@ -141,7 +136,6 @@ function skinr_ui_menu() {
     'page arguments' => array('skinr_ui_export_form'),
     'type' => MENU_LOCAL_TASK,
     'access arguments' => array('administer skinr'),
-    'parent' => 'admin/appearance/skinr',
     'weight' => 3,
     'description' => t('Export Skinr settings.'),
     'file' => 'skinr_ui.admin.inc',
Index: tests/skinr_ui.test
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/skinr/tests/skinr_ui.test,v
retrieving revision 1.1
diff -u -p -r1.1 skinr_ui.test
--- tests/skinr_ui.test	16 Jan 2011 21:08:33 -0000	1.1
+++ tests/skinr_ui.test	21 Jan 2011 01:35:13 -0000
@@ -120,4 +120,24 @@ class SkinrUIBasicTestCase extends Drupa
     $class = (string) $elements[0]['class'];
     $this->assertTrue(strpos($class, ' font-1 '), 'CSS class of configured skin option found.');
   }
+
+  /**
+   * Tests default status of skins.
+   *
+   * @todo Add assertions for 'default status' itself.
+   */
+  function testSkinAdminDefaultStatus() {
+    // The skinr_test_example skin defined by skinr_test module defines a
+    // specific and different default status for Bartik and Garland.
+    theme_enable(array('garland'));
+
+    // Verify that the skin appears on the skin overview page.
+    $this->drupalGet('admin/appearance/skinr/skins');
+    $this->assertLinkByHref('admin/appearance/skinr/skins/settings/skinr_test_example');
+    $this->drupalGet('admin/appearance/skinr/skins/settings/skinr_test_example');
+
+    // Verify that it is enabled for Bartik and disabled for Garland by default.
+    $this->assertFieldChecked('edit-skins-bartik-skinr-test-example-enable', 'skinr_test_example skin is enabled for Bartik.');
+    $this->assertNoFieldChecked('edit-skins-garland-skinr-test-example-enable', 'skinr_test_example skin is disabled for Garland.');
+  }
 }
Index: tests/skins/example/example.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/skinr/tests/skins/example/example.inc,v
retrieving revision 1.1
diff -u -p -r1.1 example.inc
--- tests/skins/example/example.inc	15 Jan 2011 20:32:26 -0000	1.1
+++ tests/skins/example/example.inc	21 Jan 2011 01:18:40 -0000
@@ -7,6 +7,10 @@
 function skinr_test_skinr_skin_example_info() {
   $skins['skinr_test_example'] = array(
     'title' => t('Example skin plugin'),
+    'status' => array(
+      'bartik' => 1,
+      'garland' => 0,
+    ),
   );
   return $skins;
 }
