From 7b82bdb41e58ba6f7a8c083a3f201a752e18c469 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Wed, 10 Feb 2016 22:32:06 +0100 Subject: [PATCH] Fix issue with popup centering --- .../java/io/bitsquare/gui/popups/Popup.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gui/src/main/java/io/bitsquare/gui/popups/Popup.java b/gui/src/main/java/io/bitsquare/gui/popups/Popup.java index 2831d12f4e..5b7c691714 100644 --- a/gui/src/main/java/io/bitsquare/gui/popups/Popup.java +++ b/gui/src/main/java/io/bitsquare/gui/popups/Popup.java @@ -17,11 +17,13 @@ package io.bitsquare.gui.popups; +import io.bitsquare.common.UserThread; import io.bitsquare.common.util.Utilities; import io.bitsquare.gui.main.MainView; import io.bitsquare.gui.util.Transitions; import io.bitsquare.locale.BSResources; import io.bitsquare.user.Preferences; +import javafx.beans.value.ChangeListener; import javafx.geometry.HPos; import javafx.geometry.Insets; import javafx.geometry.Orientation; @@ -241,12 +243,27 @@ public class Popup { centerPopup(); MainView.blurLight(); + + // sometimes the positioning fails if UI is very busy and app window gets moved + ChangeListener positionListener = (observable, oldValue, newValue) -> { + if (stage != null) + UserThread.runAfter(this::centerPopup, 1); + }; + owner.getScene().getWindow().xProperty().addListener(positionListener); + owner.getScene().getWindow().yProperty().addListener(positionListener); + + UserThread.runAfter(() -> { + owner.getScene().getWindow().xProperty().removeListener(positionListener); + owner.getScene().getWindow().yProperty().removeListener(positionListener); + }, 5); } protected void centerPopup() { Window window = owner.getScene().getWindow(); double titleBarHeight = window.getHeight() - owner.getScene().getHeight(); Point2D point = owner.localToScene(0, 0); + log.error("window window.getX()=" + window.getX()); + log.error("window window.getY()=" + window.getY()); stage.setX(Math.round(window.getX() + point.getX() + (owner.getWidth() - stage.getWidth()) / 2)); stage.setY(Math.round(window.getY() + titleBarHeight + point.getY() + (owner.getHeight() - stage.getHeight()) / 2)); }