diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractPopupPresenterWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractPopupPresenterWidget.java index 6be335cf7c3..72cc81b29d5 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractPopupPresenterWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractPopupPresenterWidget.java @@ -9,6 +9,7 @@ import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.shared.EventBus; +import com.google.gwt.event.shared.HandlerRegistration; import com.gwtplatform.mvp.client.PopupView; import com.gwtplatform.mvp.client.PresenterWidget; @@ -37,6 +38,11 @@ public interface ViewDef extends PopupView { */ void setPopupKeyPressHandler(PopupNativeKeyPressHandler handler); + /** + * @return The handler used to re-position the dialog on Window resize. + */ + HandlerRegistration getRepositionOnWindowResizeHandler(); + } // Number of popups currently active (visible) @@ -70,6 +76,8 @@ protected void onBind() { getView().hide(); } })); + + registerHandler(getView().getRepositionOnWindowResizeHandler()); } @Override diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/AbstractPopupView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/AbstractPopupView.java index 24dfd2bb74a..b70459faa06 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/AbstractPopupView.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/AbstractPopupView.java @@ -4,6 +4,8 @@ import org.ovirt.engine.ui.common.presenter.AbstractPopupPresenterWidget; import com.google.gwt.event.shared.EventBus; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.PopupPanel; import com.gwtplatform.mvp.client.PopupViewImpl; @@ -31,9 +33,10 @@ protected final void initWidget(IsWidget widget) { } /** - * Return false to work around GWT-P memory leak. The resize handler implementation is broken, - * so turn it off + * TODO-GWT return false to work around GWTP memory leak + * The resize handler implementation is broken, so turn it off. * See: https://github.com/ArcBees/GWTP/issues/823 + * Once fixed, remove {@link #getRepositionOnWindowResizeHandler} workaround. */ @Override protected boolean repositionOnWindowResize() { @@ -62,4 +65,13 @@ public T asWidget() { return (T) super.asWidget(); } + @Override + public HandlerRegistration getRepositionOnWindowResizeHandler() { + return Window.addResizeHandler(event -> { + if (asPopupPanel().isShowing()) { + showAndReposition(); + } + }); + } + }