Index: masquerade.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/masquerade/masquerade.module,v
retrieving revision 1.16.2.40
diff -u -p -r1.16.2.40 masquerade.module
--- masquerade.module	25 Jun 2010 14:59:17 -0000	1.16.2.40
+++ masquerade.module	16 Jul 2010 01:56:48 -0000
@@ -234,48 +234,44 @@ function masquerade_admin_settings() {
     '#maxlength' => NULL,
   );
 
-  $form = system_settings_form($form);
+  // Masquerade handlers should run first.
   $form['#validate'][] = 'masquerade_admin_settings_validate';
   $form['#submit'][] = 'masquerade_admin_settings_submit';
 
-  return $form;
+  return system_settings_form($form);
 }
 
 function masquerade_admin_settings_validate($form, &$form_state) {
-  unset($form);
   if (!empty($form_state['values']['masquerade_test_user'])) {
     $test_user = _masquerade_user_load($form_state['values']['masquerade_test_user']);
     if (!$test_user) {
       form_set_error('masquerade_test_user', t('%user does not exist. Please enter a valid username.', array('%user' => $form_state['values']['masquerade_test_user'])));
     }
   }
+  // Needs to rebuild menu in masquerade_admin_settings_submit().
+  $form_state['masquerade_rebuild_menu'] = (variable_get('masquerade_test_user', '') != $form_state['values']['masquerade_test_user']);
 
   // A comma-separated list of users.
   $masquerade_switches = drupal_explode_tags($form_state['values']['masquerade_quick_switches']);
+  // Change user names to user ID's for system_settings_form_submit() to save.
+  $masquerade_uids = array();
   foreach ($masquerade_switches as $switch_user) {
     $test_user = _masquerade_user_load($switch_user);
     if (!$test_user) {
       form_set_error('masquerade_quick_switches', t('%user does not exist. Please enter a valid username.', array('%user' => $switch_user)));
     }
+    else {
+      $masquerade_uids[] = $test_user->uid;
+    }
   }
+  $form_state['values']['masquerade_quick_switches'] = $masquerade_uids;
 }
 
 function masquerade_admin_settings_submit($form, &$form_state) {
-  // Change user names to user ID's for system_settings_form_submit() to save.
-  $masquerade_switches = drupal_explode_tags($form_state['values']['masquerade_quick_switches']);
-  $masquerade_uids = array();
-  foreach ($masquerade_switches as $masquerade_name) {
-    $u = _masquerade_user_load($masquerade_name);
-    $masquerade_uids[] = $u->uid;
-  }
-  variable_set('masquerade_quick_switches', $masquerade_uids);
-
-  // We need to clear the block cache so any changes to the "Quick Switch" list
-  // are updated.
-  cache_clear_all('masquerade', 'cache_block', TRUE);
-
   // Rebuild the menu system so the menu "Quick Switch" user is updated.
-  menu_rebuild();
+  if ($form_state['masquerade_rebuild_menu']) {
+    menu_rebuild();
+  }
 }
 
 /**
