diff --git a/app/src/main/java/io/xpipe/app/core/AppMainWindow.java b/app/src/main/java/io/xpipe/app/core/AppMainWindow.java index 31e1d885..c4d01aee 100644 --- a/app/src/main/java/io/xpipe/app/core/AppMainWindow.java +++ b/app/src/main/java/io/xpipe/app/core/AppMainWindow.java @@ -146,6 +146,8 @@ public class AppMainWindow { AtomicBoolean shown = new AtomicBoolean(false); stage.setOnShown(event -> { PlatformThread.runLaterIfNeeded(() -> { + // On some platforms, e.g. KDE with wayland, the screen size is not known when the window is first shown + // This fixes the alignment in these cases if (state == null && !shown.get()) { Platform.runLater(() -> { stage.centerOnScreen(); diff --git a/app/src/main/java/io/xpipe/app/core/AppWindowHelper.java b/app/src/main/java/io/xpipe/app/core/AppWindowHelper.java index 8a0978f3..f8b75931 100644 --- a/app/src/main/java/io/xpipe/app/core/AppWindowHelper.java +++ b/app/src/main/java/io/xpipe/app/core/AppWindowHelper.java @@ -85,12 +85,14 @@ public class AppWindowHelper { stage.setOnShown(e -> { AppTheme.initThemeHandlers(stage); - centerToMainWindow(stage); - clampWindow(stage).ifPresent(rectangle2D -> { - stage.setX(rectangle2D.getMinX()); - stage.setY(rectangle2D.getMinY()); - stage.setWidth(rectangle2D.getWidth()); - stage.setHeight(rectangle2D.getHeight()); + Platform.runLater(() -> { + centerToMainWindow(stage); + clampWindow(stage).ifPresent(rectangle2D -> { + stage.setX(rectangle2D.getMinX()); + stage.setY(rectangle2D.getMinY()); + stage.setWidth(rectangle2D.getWidth()); + stage.setHeight(rectangle2D.getHeight()); + }); }); }); return stage; @@ -98,6 +100,7 @@ public class AppWindowHelper { private static void centerToMainWindow(Window childStage) { if (App.getApp() == null) { + childStage.centerOnScreen(); return; }