Index: l10n_community/editor.css
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_community/Attic/editor.css,v
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.2 editor.css
--- l10n_community/editor.css	8 Feb 2010 16:15:01 -0000	1.1.2.2
+++ l10n_community/editor.css	16 Feb 2010 11:01:26 -0000
@@ -113,16 +113,9 @@ li.translation > .selector {
   li.translation.is-declined > .actions li.declined label {
     background-image:url(images/undecline.png);
   }
-  .l10n-table ul.actions li.stable label {
-    background:url(images/stable-inactive.png) no-repeat right top;
-  }
-  li.translation.is-stable > .actions li.stable label,
   li.translation:hover > .actions li label {
     opacity:1;
   }
-  li.translation.is-stable > .actions li.stable label {
-    background-image:url(images/stable-active.png);
-  }
 
   .l10n-string > br {
     display:block;
Index: l10n_community/editor.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_community/Attic/editor.js,v
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.2 editor.js
--- l10n_community/editor.js	8 Feb 2010 16:15:01 -0000	1.1.2.2
+++ l10n_community/editor.js	16 Feb 2010 11:01:26 -0000
@@ -132,9 +132,11 @@
         };
 
         translation.find('> .selector').click(function() {
+          // Set this undeclined.
           setStatus(translation, 'declined', false);
-          // Mark this as the active translation, update others.
-          setStatus(translation.siblings('.is-active:not(.new-translation)'), 'declined', true);
+          // Mark the previously active translation declined, if that is possible.
+          setStatus(translation.siblings('.is-active.is-declinable:not(.new-translation)'), 'declined', true);
+          // Move active mark to this one.
           setStatus(translation.siblings('.is-active'), 'active', false);
           translation.addClass('is-active');
         });
@@ -151,8 +153,8 @@
 
         if (isTranslation) {
           // Add doubleclick behavior to decline all other suggestions.
-          translation.find('.l10n-string').dblclick(function() {
-            translation.siblings().not('.new-translation').each(function () {
+          translation.filter('.is-selectable').find('.l10n-string').dblclick(function() {
+            translation.siblings('.is-declinable').each(function () {
               setStatus($(this), 'declined', true);
             });
           });
Index: l10n_community/translate.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_community/Attic/translate.inc,v
retrieving revision 1.1.2.7.2.31.2.8
diff -u -p -r1.1.2.7.2.31.2.8 translate.inc
--- l10n_community/translate.inc	16 Feb 2010 07:46:50 -0000	1.1.2.7.2.31.2.8
+++ l10n_community/translate.inc	16 Feb 2010 11:01:26 -0000
@@ -411,6 +411,8 @@ function _l10n_community_translate_trans
     '#return_value' => $string->tid,
     '#default_value' => $is_active ? $string->tid : NULL,
     '#parents' => array('strings', $string->sid, 'active'),
+    // Let a moderator roll back to the current translation even if they
+    // would otherwise not have permission to approve such a string.
     '#disabled' => !$may_moderate && !$is_active,
     '#attributes' => array('class' => 'selector'),
   );
@@ -550,6 +552,14 @@ function theme_l10n_community_translate_
     $element['#attributes']['class'] = '';
   }
   $element['#attributes']['class'] .= ' clearfix translation';
+  
+  // Add is-selectable and is-declinable helpers for JS.
+  if (!$element['active']['#disabled']) {
+    $element['#attributes']['class'] .= ' is-selectable';
+  }
+  if (isset($element['declined'])) {
+    $element['#attributes']['class'] .= ' is-declinable';
+  }
 
   switch ($element['active']['#return_value']) {
     case 'new':
@@ -563,6 +573,7 @@ function theme_l10n_community_translate_
         $element['#attributes']['class'] .= ' is-active default';
       }
   }
+  $element['#attributes']['class'] = trim($element['#attributes']['class']);
 
   $output = '<li'. drupal_attributes($element['#attributes']) .'>';
   $output .= theme('l10n_community_translate_actions', $element);
