Merge "SideBySide2: Fix loss of focus during resize of draft comments"
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.java
index 10b2640..4bd08b1 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.java
@@ -75,8 +75,6 @@
private SideBySide2 parent;
private boolean header;
- private boolean headerVisible;
- private boolean autoHideHeader;
private boolean visibleA;
private ChangeType changeType;
@@ -91,7 +89,6 @@
initWidget(uiBinder.createAndBindUi(this));
this.scrollbar = new Scrollbar(this);
this.parent = parent;
- this.headerVisible = true;
this.visibleA = true;
}
@@ -127,30 +124,16 @@
}
}
- boolean isHeaderVisible() {
- return headerVisible;
- }
-
void setHeaderVisible(boolean show) {
- headerVisible = !autoHideHeader || show;
- showHeader(headerVisible);
- }
-
- private void showHeader(boolean show) {
- UIObject.setVisible(patchSetNavRow, show);
- UIObject.setVisible(diffHeaderRow, show && header);
- if (show) {
- parent.header.removeStyleName(style.fullscreen());
- } else {
- parent.header.addStyleName(style.fullscreen());
- }
- parent.resizeCodeMirror();
- }
-
- void setAutoHideDiffHeader(boolean hide) {
- autoHideHeader = hide;
- if (!hide) {
- showHeader(true);
+ if (show != UIObject.isVisible(patchSetNavRow)) {
+ UIObject.setVisible(patchSetNavRow, show);
+ UIObject.setVisible(diffHeaderRow, show && header);
+ if (show) {
+ parent.header.removeStyleName(style.fullscreen());
+ } else {
+ parent.header.addStyleName(style.fullscreen());
+ }
+ parent.resizeCodeMirror();
}
}
@@ -169,7 +152,6 @@
void set(DiffPreferences prefs, JsArray<RevisionInfo> list, DiffInfo info,
boolean editExists, int currentPatchSet, boolean open) {
this.changeType = info.change_type();
- this.autoHideHeader = prefs.autoHideDiffTableHeader();
patchSetSelectBoxA.setUpPatchSetNav(list, info.meta_a(), editExists,
currentPatchSet, open);
patchSetSelectBoxB.setUpPatchSetNav(list, info.meta_b(), editExists,
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.java
index 70bde00..433ce5e 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.java
@@ -334,7 +334,6 @@
void onAutoHideDiffTableHeader(ValueChangeEvent<Boolean> e) {
prefs.autoHideDiffTableHeader(!e.getValue());
view.setAutoHideDiffHeader(!e.getValue());
- view.resizeCodeMirror();
}
@UiHandler("manualReview")
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/ScrollSynchronizer.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/ScrollSynchronizer.java
index 61e00c3..4ee09d2 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/ScrollSynchronizer.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/ScrollSynchronizer.java
@@ -25,12 +25,15 @@
private ScrollCallback active;
private ScrollCallback callbackA;
private ScrollCallback callbackB;
+ private CodeMirror cmB;
+ private boolean autoHideDiffTableHeader;
ScrollSynchronizer(DiffTable diffTable,
CodeMirror cmA, CodeMirror cmB,
LineMapper mapper) {
this.diffTable = diffTable;
this.mapper = mapper;
+ this.cmB = cmB;
callbackA = new ScrollCallback(cmA, cmB, DisplaySide.A);
callbackB = new ScrollCallback(cmB, cmA, DisplaySide.B);
@@ -38,15 +41,23 @@
cmB.on("scroll", callbackB);
}
+ void setAutoHideDiffTableHeader(boolean autoHide) {
+ if (autoHide) {
+ updateDiffTableHeader(cmB.getScrollInfo());
+ } else {
+ diffTable.setHeaderVisible(true);
+ }
+ autoHideDiffTableHeader = autoHide;
+ }
+
void syncScroll(DisplaySide masterSide) {
(masterSide == DisplaySide.A ? callbackA : callbackB).sync();
}
- private void updateScreenHeader(ScrollInfo si) {
- if (si.top() == 0 && !diffTable.isHeaderVisible()) {
+ private void updateDiffTableHeader(ScrollInfo si) {
+ if (si.top() == 0) {
diffTable.setHeaderVisible(true);
- } else if (si.top() > 0.5 * si.clientHeight()
- && diffTable.isHeaderVisible()) {
+ } else if (si.top() > 0.5 * si.clientHeight()) {
diffTable.setHeaderVisible(false);
}
}
@@ -84,7 +95,9 @@
}
if (active == this) {
ScrollInfo si = src.getScrollInfo();
- updateScreenHeader(si);
+ if (autoHideDiffTableHeader) {
+ updateDiffTableHeader(si);
+ }
dst.scrollTo(si.left(), align(si.top()));
state = 0;
}
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 5195024..75e0d90 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
@@ -603,6 +603,7 @@
prefsAction = new PreferencesAction(this, prefs);
header.init(prefsAction, getLinks(), diff.side_by_side_web_links());
+ scrollSynchronizer.setAutoHideDiffTableHeader(prefs.autoHideDiffTableHeader());
if (prefs.syntaxHighlighting() && fileSize.compareTo(FileSize.SMALL) > 0) {
Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {
@@ -757,7 +758,7 @@
}
void setAutoHideDiffHeader(boolean hide) {
- diffTable.setAutoHideDiffHeader(hide);
+ scrollSynchronizer.setAutoHideDiffTableHeader(hide);
}
private void render(DiffInfo diff) {