Use Shift-Left and Shift-Right to flip side of focus

This provides the keyboard shortcut to switch focus between the two
CodeMirrors.

Change-Id: I889c0795e77baba898b980578609ac4759f6156e
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
index a2ae1b0..d12cf60 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
@@ -331,7 +331,9 @@
           }
         })
         .on("Alt-N", diffChunkNav(cm, false))
-        .on("Alt-P", diffChunkNav(cm, true)));
+        .on("Alt-P", diffChunkNav(cm, true))
+        .on("Shift-Left", flipCursorSide(cm, true))
+        .on("Shift-Right", flipCursorSide(cm, false)));
   }
 
   @Override
@@ -1012,7 +1014,6 @@
         if (!(cm.hasActiveLine() &&
             cm.getLineNumber(cm.getActiveLine()) == line)) {
           cm.setCursor(LineCharacter.create(line));
-          updateActiveLine(cm).run();
         }
         Scheduler.get().scheduleDeferred(new ScheduledCommand() {
           @Override
@@ -1102,6 +1103,20 @@
     };
   }
 
+  private Runnable flipCursorSide(final CodeMirror cm, final boolean toLeft) {
+    return new Runnable() {
+      public void run() {
+        if (cm.hasActiveLine() && (toLeft && cm == cmB || !toLeft && cm == cmA)) {
+          CodeMirror other = otherCm(cm);
+          other.setCursor(LineCharacter.create(
+              mapper.lineOnOther(
+                  getSideFromCm(cm), cm.getLineNumber(cm.getActiveLine())).getLine()));
+          other.focus();
+        }
+      }
+    };
+  }
+
   private Runnable diffChunkNav(final CodeMirror cm, final boolean prev) {
     return new Runnable() {
       @Override