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 bd11cf93..ada62316 100644 --- a/app/src/main/java/io/xpipe/app/core/AppWindowHelper.java +++ b/app/src/main/java/io/xpipe/app/core/AppWindowHelper.java @@ -74,6 +74,15 @@ public class AppWindowHelper { childStage.setY(stage.getY() + stage.getHeight() / 2 - childStage.getHeight() / 2); } + public static void showAlert(Alert a, Consumer> bt) { + ThreadHelper.runAsync(() -> { + var r = showBlockingAlert(a); + if (bt != null) { + bt.accept(r); + } + }); + } + public static void showAlert(Consumer c, Consumer> bt) { ThreadHelper.runAsync(() -> { var r = showBlockingAlert(c); diff --git a/app/src/main/java/io/xpipe/app/util/MacOsPermissions.java b/app/src/main/java/io/xpipe/app/util/MacOsPermissions.java index 19118571..9cd7e358 100644 --- a/app/src/main/java/io/xpipe/app/util/MacOsPermissions.java +++ b/app/src/main/java/io/xpipe/app/util/MacOsPermissions.java @@ -8,20 +8,22 @@ import javafx.application.Platform; import javafx.beans.property.SimpleBooleanProperty; import javafx.scene.control.Alert; +import java.util.concurrent.atomic.AtomicReference; + public class MacOsPermissions { private static Alert createAlert() { var alert = AppWindowHelper.createEmptyAlert(); - alert.setAlertType(Alert.AlertType.CONFIRMATION); + alert.setAlertType(Alert.AlertType.INFORMATION); alert.setTitle(I18n.get("permissionsAlertTitle")); alert.setHeaderText(I18n.get("permissionsAlertTitleHeader")); alert.getDialogPane().setContent(AppWindowHelper.alertContentText(I18n.get("permissionsAlertTitleContent"))); - alert.setAlertType(Alert.AlertType.CONFIRMATION); + alert.getButtonTypes().clear(); return alert; } public static boolean waitForAccessibilityPermissions() throws Exception { - var alert = createAlert(); + AtomicReference alert = new AtomicReference<>(); var state = new SimpleBooleanProperty(true); try (var pc = ShellStore.local().create().start()) { while (state.get()) { @@ -29,17 +31,24 @@ public class MacOsPermissions { "osascript -e 'tell application \"System Events\" to keystroke \"t\"'"); if (success) { Platform.runLater(() -> { - alert.close(); + if (alert.get() != null) { + alert.get().close(); + } }); return true; } else { Platform.runLater(() -> { - var result = AppWindowHelper.showBlockingAlert(alert) - .map(buttonType -> buttonType.getButtonData().isDefaultButton()) - .orElse(false); - if (!result) { - state.set(false); + if (alert.get() != null) { + return; } + + alert.set(createAlert()); + AppWindowHelper.showAlert(alert.get(), buttonType -> { + alert.get().close(); + if (buttonType.isEmpty() || !buttonType.get().getButtonData().isDefaultButton()) { + state.set(false); + } + }); }); ThreadHelper.sleep(1000); } diff --git a/core/src/main/java/io/xpipe/core/process/ShellTypes.java b/core/src/main/java/io/xpipe/core/process/ShellTypes.java index 37a09f41..7e4731a2 100644 --- a/core/src/main/java/io/xpipe/core/process/ShellTypes.java +++ b/core/src/main/java/io/xpipe/core/process/ShellTypes.java @@ -484,7 +484,7 @@ public class ShellTypes { var content = ""; for (Map.Entry e : variables.entrySet()) { content += e.getKey() + "=\"" + e.getValue() + "\""; - content += getConcatenationOperator(); + content += " "; } return content + command; }