From 63d043c0be6aeabc76d246a29c562c33eebfc890 Mon Sep 17 00:00:00 2001 From: crschnick Date: Tue, 31 Dec 2024 01:31:14 +0000 Subject: [PATCH] Various fixes --- .../java/io/xpipe/app/comp/base/LabelComp.java | 4 ++++ .../io/xpipe/app/comp/base/ModalOverlayComp.java | 2 +- .../app/comp/store/StoreIconChoiceDialog.java | 2 +- .../java/io/xpipe/app/core/mode/BaseMode.java | 2 +- .../io/xpipe/app/core/mode/OperationMode.java | 15 ++++++++------- .../java/io/xpipe/app/core/window/AppDialog.java | 16 +++++++++++++--- .../io/xpipe/app/core/window/AppMainWindow.java | 2 +- .../io/xpipe/app/issue/ErrorHandlerDialog.java | 2 +- .../java/io/xpipe/app/prefs/SyncCategory.java | 2 +- .../xpipe/app/update/UpdateAvailableAlert.java | 2 +- .../xpipe/app/update/UpdateChangelogAlert.java | 2 +- .../main/java/io/xpipe/app/util/ScanDialog.java | 2 +- 12 files changed, 34 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/comp/base/LabelComp.java b/app/src/main/java/io/xpipe/app/comp/base/LabelComp.java index 134de7ec0..9f2a84956 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/LabelComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/LabelComp.java @@ -20,6 +20,10 @@ public class LabelComp extends Comp> { private final ObservableValue text; private final ObservableValue graphic; + public LabelComp(String text, LabelGraphic graphic) { + this(new SimpleStringProperty(text), new SimpleObjectProperty<>(graphic)); + } + public LabelComp(String text) { this(new SimpleStringProperty(text)); } diff --git a/app/src/main/java/io/xpipe/app/comp/base/ModalOverlayComp.java b/app/src/main/java/io/xpipe/app/comp/base/ModalOverlayComp.java index bfc1e7638..430b0c124 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/ModalOverlayComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/ModalOverlayComp.java @@ -162,7 +162,7 @@ public class ModalOverlayComp extends SimpleComp { }); content.setSpacing(25); content.setPadding(new Insets(13, 27, 20, 27)); - + if (newValue.getTitleKey() != null) { var l = new Label( AppI18n.get(newValue.getTitleKey()), diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreIconChoiceDialog.java b/app/src/main/java/io/xpipe/app/comp/store/StoreIconChoiceDialog.java index 1a0df566d..c971afa22 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreIconChoiceDialog.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreIconChoiceDialog.java @@ -17,7 +17,7 @@ public class StoreIconChoiceDialog { public static void show(DataStoreEntry entry) { var dialog = new StoreIconChoiceDialog(entry); - dialog.getOverlay().showAndWait(); + dialog.getOverlay().show(); } private final ObjectProperty selected = new SimpleObjectProperty<>(); diff --git a/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java b/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java index 0d7873cf6..8ccd4d45a 100644 --- a/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java +++ b/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java @@ -101,7 +101,7 @@ public class BaseMode extends OperationMode { }); imagesLoaded.await(); browserLoaded.await(); - AppDialog.waitForClose(); + AppDialog.waitForAllDialogsClose(); PlatformThread.runLaterIfNeededBlocking(() -> { AppMainWindow.initContent(); }); diff --git a/app/src/main/java/io/xpipe/app/core/mode/OperationMode.java b/app/src/main/java/io/xpipe/app/core/mode/OperationMode.java index 4b7c4e1de..7c9cfc777 100644 --- a/app/src/main/java/io/xpipe/app/core/mode/OperationMode.java +++ b/app/src/main/java/io/xpipe/app/core/mode/OperationMode.java @@ -7,6 +7,7 @@ import io.xpipe.app.core.check.AppTempCheck; import io.xpipe.app.core.window.AppMainWindow; import io.xpipe.app.issue.*; import io.xpipe.app.prefs.AppPrefs; +import io.xpipe.app.prefs.CloseBehaviour; import io.xpipe.app.util.*; import io.xpipe.core.process.OsType; import io.xpipe.core.util.FailableRunnable; @@ -273,21 +274,21 @@ public abstract class OperationMode { } public static void onWindowClose() { - if (AppPrefs.get() == null) { - return; + CloseBehaviour action; + if (AppPrefs.get() != null && !isInStartup() && !isInShutdown()) { + action = AppPrefs.get().closeBehaviour().getValue(); + } else { + action = CloseBehaviour.QUIT; } - - var action = AppPrefs.get().closeBehaviour().getValue(); ThreadHelper.runAsync(() -> { action.run(); }); } public static void shutdown(boolean inShutdownHook, boolean hasError) { - // We can receive shutdown events while we are still starting up - // In that case ignore them until we are finished if (isInStartup()) { - return; + TrackEvent.info("Received shutdown request while in startup. Halting ..."); + OperationMode.halt(1); } // In case we are stuck while in shutdown, instantly exit this application diff --git a/app/src/main/java/io/xpipe/app/core/window/AppDialog.java b/app/src/main/java/io/xpipe/app/core/window/AppDialog.java index 3c9fd0810..d9cbb58fa 100644 --- a/app/src/main/java/io/xpipe/app/core/window/AppDialog.java +++ b/app/src/main/java/io/xpipe/app/core/window/AppDialog.java @@ -38,12 +38,22 @@ public class AppDialog { }); } - public static void waitForClose() { + public static void waitForAllDialogsClose() { while (!modalOverlay.isEmpty()) { ThreadHelper.sleep(10); } } + private static void waitForDialogClose(ModalOverlay overlay) { + while (modalOverlay.contains(overlay)) { + ThreadHelper.sleep(10); + } + } + + public static void show(ModalOverlay o) { + show(o, false); + } + public static void showAndWait(ModalOverlay o) { show(o, true); } @@ -54,7 +64,7 @@ public class AppDialog { PlatformThread.runLaterIfNeededBlocking(() -> { modalOverlay.add(o); }); - waitForClose(); + waitForDialogClose(o); ThreadHelper.sleep(200); } else { var key = new Object(); @@ -78,7 +88,7 @@ public class AppDialog { }); if (wait) { Platform.enterNestedEventLoop(key); - waitForClose(); + waitForDialogClose(o); } } } diff --git a/app/src/main/java/io/xpipe/app/core/window/AppMainWindow.java b/app/src/main/java/io/xpipe/app/core/window/AppMainWindow.java index 6bf4bf3f3..f82673ead 100644 --- a/app/src/main/java/io/xpipe/app/core/window/AppMainWindow.java +++ b/app/src/main/java/io/xpipe/app/core/window/AppMainWindow.java @@ -262,7 +262,7 @@ public class AppMainWindow { }); stage.setOnCloseRequest(e -> { - if (!CloseBehaviourDialog.showIfNeeded()) { + if (!OperationMode.isInStartup() && !OperationMode.isInShutdown() && !CloseBehaviourDialog.showIfNeeded()) { e.consume(); return; } diff --git a/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java b/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java index a354efe5e..57cea0bcb 100644 --- a/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java +++ b/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java @@ -57,6 +57,6 @@ public class ErrorHandlerDialog { } }); - AppDialog.show(modal.get(), true); + AppDialog.showAndWait(modal.get()); } } diff --git a/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java b/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java index ccaf7c6e8..bd07fbafa 100644 --- a/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java @@ -32,7 +32,7 @@ public class SyncCategory extends AppPrefsCategory { var markdown = new MarkdownComp(md, s -> s).prefWidth(600); var modal = ModalOverlay.of(null, markdown); modal.addButton(ModalButton.ok()); - AppDialog.showAndWait(modal); + AppDialog.show(modal); } public Comp create() { diff --git a/app/src/main/java/io/xpipe/app/update/UpdateAvailableAlert.java b/app/src/main/java/io/xpipe/app/update/UpdateAvailableAlert.java index 9170f5bff..cc66995cc 100644 --- a/app/src/main/java/io/xpipe/app/update/UpdateAvailableAlert.java +++ b/app/src/main/java/io/xpipe/app/update/UpdateAvailableAlert.java @@ -65,6 +65,6 @@ public class UpdateAvailableAlert { }, false, true)); - AppDialog.showAndWait(modal); + AppDialog.show(modal); } } diff --git a/app/src/main/java/io/xpipe/app/update/UpdateChangelogAlert.java b/app/src/main/java/io/xpipe/app/update/UpdateChangelogAlert.java index cfeb30bd6..bf5523fb4 100644 --- a/app/src/main/java/io/xpipe/app/update/UpdateChangelogAlert.java +++ b/app/src/main/java/io/xpipe/app/update/UpdateChangelogAlert.java @@ -42,6 +42,6 @@ public class UpdateChangelogAlert { }); var modal = ModalOverlay.of("updateChangelogAlertTitle", comp.prefWidth(600), null); modal.addButton(ModalButton.ok()); - AppDialog.showAndWait(modal); + AppDialog.show(modal); } } diff --git a/app/src/main/java/io/xpipe/app/util/ScanDialog.java b/app/src/main/java/io/xpipe/app/util/ScanDialog.java index e2b3ce02d..e3818e66b 100644 --- a/app/src/main/java/io/xpipe/app/util/ScanDialog.java +++ b/app/src/main/java/io/xpipe/app/util/ScanDialog.java @@ -77,6 +77,6 @@ public class ScanDialog { modal.addButton(ModalButton.ok(() -> { comp.finish(); })); - modal.showAndWait(); + modal.show(); } }