Merge "ChangeScreen2: Simplify update available bar"
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
index 2f9a670..3536abc 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
@@ -45,9 +45,9 @@
import com.google.gerrit.client.ui.UserActivityMonitor;
import com.google.gerrit.common.changes.ListChangesOption;
import com.google.gerrit.reviewdb.client.Change;
+import com.google.gerrit.reviewdb.client.Change.Status;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.reviewdb.client.Change.Status;
import com.google.gerrit.reviewdb.client.Project.SubmitType;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JsArray;
@@ -57,8 +57,6 @@
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.KeyPressEvent;
-import com.google.gwt.event.logical.shared.CloseEvent;
-import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.resources.client.CssResource;
@@ -71,7 +69,6 @@
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTMLPanel;
-import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.ToggleButton;
import com.google.gwtexpui.clippy.client.CopyableLabel;
import com.google.gwtexpui.globalkey.client.GlobalKey;
@@ -203,10 +200,6 @@
@Override
protected void onUnload() {
- if (updateAvailable != null) {
- updateAvailable.hide(true);
- updateAvailable = null;
- }
if (updateCheck != null) {
updateCheck.cancel();
updateCheck = null;
@@ -742,18 +735,12 @@
lastDisplayedUpdate = newTime;
}
};
- updateAvailable.addCloseHandler(new CloseHandler<PopupPanel>() {
- @Override
- public void onClose(CloseEvent<PopupPanel> event) {
- updateAvailable = null;
- }
- });
}
updateAvailable.set(
Natives.asList(nm).subList(om.length(), nm.length()),
newInfo.updated());
- if (!updateAvailable.isShowing()) {
- updateAvailable.popup();
+ if (!updateAvailable.isAttached()) {
+ add(updateAvailable);
}
}
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/UpdateAvailableBar.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/UpdateAvailableBar.java
index 2837b15..1dece8b 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/UpdateAvailableBar.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/UpdateAvailableBar.java
@@ -14,52 +14,34 @@
package com.google.gerrit.client.change;
-import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.changes.ChangeInfo.MessageInfo;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.logical.shared.ResizeEvent;
-import com.google.gwt.event.logical.shared.ResizeHandler;
-import com.google.gwt.event.shared.HandlerRegistration;
-import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.Window.ScrollEvent;
-import com.google.gwt.user.client.Window.ScrollHandler;
import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
-import com.google.gwt.user.client.ui.PopupPanel;
-import com.google.gwt.user.client.ui.RootPanel;
import java.sql.Timestamp;
import java.util.HashSet;
import java.util.List;
/** Displays the "New Message From ..." panel in bottom right on updates. */
-abstract class UpdateAvailableBar extends PopupPanel {
+abstract class UpdateAvailableBar extends Composite {
interface Binder extends UiBinder<HTMLPanel, UpdateAvailableBar> {}
private static final Binder uiBinder = GWT.create(Binder.class);
- static interface Style extends CssResource {
- String popup();
- }
-
private Timestamp updated;
- private HandlerRegistration resizer;
- private HandlerRegistration scroller;
- @UiField Style style;
@UiField Element author;
@UiField Anchor show;
@UiField Anchor ignore;
UpdateAvailableBar() {
- super(/* autoHide = */ false, /* modal = */ false);
- add(uiBinder.createAndBindUi(this));
- setStyleName(style.popup());
+ initWidget(uiBinder.createAndBindUi(this));
}
void set(List<MessageInfo> newMessages, Timestamp newTime) {
@@ -76,63 +58,6 @@
}
author.setInnerText(r.toString());
updated = newTime;
-
- if (isShowing()) {
- setPopupPosition(
- Window.getScrollLeft() + Window.getClientWidth() - getOffsetWidth(),
- Window.getScrollTop() + Window.getClientHeight() - getOffsetHeight());
- }
- }
-
- void popup() {
- setPopupPositionAndShow(new PositionCallback() {
- @Override
- public void setPosition(int w, int h) {
- w += 7; // Initial information is wrong, adjust with some slop.
- h += 19;
- setPopupPosition(
- Window.getScrollLeft() + Window.getClientWidth() - w,
- Window.getScrollTop() + Window.getClientHeight() - h);
- }
- });
- if (resizer == null) {
- resizer = Window.addResizeHandler(new ResizeHandler() {
- @Override
- public void onResize(ResizeEvent event) {
- setPopupPosition(
- Window.getScrollLeft() + event.getWidth() - getOffsetWidth(),
- Window.getScrollTop() + event.getHeight() - getOffsetHeight());
- }
- });
- }
- if (scroller == null) {
- scroller = Window.addWindowScrollHandler(new ScrollHandler() {
- @Override
- public void onWindowScroll(ScrollEvent event) {
- RootPanel b = Gerrit.getBottomMenu();
- int br = b.getAbsoluteLeft() + b.getOffsetWidth();
- int bp = b.getAbsoluteTop() + b.getOffsetHeight();
- int wr = event.getScrollLeft() + Window.getClientWidth();
- int wp = event.getScrollTop() + Window.getClientHeight();
- setPopupPosition(
- Math.min(br, wr) - getOffsetWidth(),
- Math.min(bp, wp) - getOffsetHeight());
- }
- });
- }
- }
-
- @Override
- public void hide() {
- if (resizer != null) {
- resizer.removeHandler();
- resizer = null;
- }
- if (scroller != null) {
- scroller.removeHandler();
- scroller = null;
- }
- super.hide();
}
@UiHandler("show")
@@ -143,7 +68,7 @@
@UiHandler("ignore")
void onIgnore(ClickEvent e) {
onIgnore(updated);
- hide();
+ removeFromParent();
}
abstract void onShow();
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/UpdateAvailableBar.ui.xml b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/UpdateAvailableBar.ui.xml
index a6cd124..1c46b8c 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/UpdateAvailableBar.ui.xml
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/UpdateAvailableBar.ui.xml
@@ -18,8 +18,12 @@
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:c='urn:import:com.google.gwtexpui.globalkey.client'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
- <ui:style type='com.google.gerrit.client.change.UpdateAvailableBar.Style'>
+ <ui:style>
.popup {
+ position: fixed;
+ bottom: 0;
+ right: 0;
+ z-index: 10;
padding: 5px;
}
.bar {
@@ -39,21 +43,23 @@
margin-left: 0.5em;
}
</ui:style>
- <g:HTMLPanel styleName='{style.bar}'>
- <ui:msg>Update from <span ui:field='author'/></ui:msg>
- <g:Anchor ui:field='show'
- styleName='{style.action}'
- href='javascript:;'
- title='Refresh screen and display updates'>
- <ui:attribute name='title'/>
- <ui:msg>Show</ui:msg>
- </g:Anchor>
- <g:Anchor ui:field='ignore'
- styleName='{style.action}'
- href='javascript:;'
- title='Ignore this update'>
- <ui:attribute name='title'/>
- <ui:msg>Ignore</ui:msg>
- </g:Anchor>
+ <g:HTMLPanel styleName='{style.popup}'>
+ <div class='{style.bar}'>
+ <ui:msg>Update from <span ui:field='author'/></ui:msg>
+ <g:Anchor ui:field='show'
+ styleName='{style.action}'
+ href='javascript:;'
+ title='Refresh screen and display updates'>
+ <ui:attribute name='title'/>
+ <ui:msg>Show</ui:msg>
+ </g:Anchor>
+ <g:Anchor ui:field='ignore'
+ styleName='{style.action}'
+ href='javascript:;'
+ title='Ignore this update'>
+ <ui:attribute name='title'/>
+ <ui:msg>Ignore</ui:msg>
+ </g:Anchor>
+ </div>
</g:HTMLPanel>
</ui:UiBinder>