Merge "SideBySide2: Restore selection after discarding a new comment"
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/CommentGroup.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/CommentGroup.java
index 5294cd0..23630ea 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/CommentGroup.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/CommentGroup.java
@@ -25,6 +25,7 @@
 import net.codemirror.lib.CodeMirror;
 import net.codemirror.lib.Configuration;
 import net.codemirror.lib.LineWidget;
+import net.codemirror.lib.TextMarker.FromTo;
 
 /**
  * LineWidget attached to a CodeMirror container.
@@ -145,6 +146,7 @@
     if (lineWidget != null) {
       lineWidget.clear();
       lineWidget = null;
+      updateSelection();
     }
     manager.clearLine(cm.side(), line);
     removeFromParent();
@@ -201,6 +203,15 @@
     }
   }
 
+  private void updateSelection() {
+    if (cm.somethingSelected()) {
+      FromTo r = cm.getSelectedRange();
+      if (r.getTo().getLine() >= line) {
+        cm.setSelection(r.getFrom(), r.getTo());
+      }
+    }
+  }
+
   private boolean canComputeHeight() {
     return !comments.isVisible() || comments.getOffsetHeight() > 0;
   }
@@ -221,5 +232,7 @@
     b.padding.getStyle().setHeight(Math.max(0, h - bpx), Unit.PX);
     a.lineWidget.changed();
     b.lineWidget.changed();
+    a.updateSelection();
+    b.updateSelection();
   }
 }