diff --git a/app/src/main/java/io/xpipe/app/comp/base/ChoicePaneComp.java b/app/src/main/java/io/xpipe/app/comp/base/ChoicePaneComp.java index dbba51d76..d396cb750 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/ChoicePaneComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/ChoicePaneComp.java @@ -16,6 +16,7 @@ import javafx.util.StringConverter; import lombok.Setter; +import java.util.HashMap; import java.util.List; import java.util.function.Function; @@ -69,13 +70,15 @@ public class ChoicePaneComp extends RegionBuilder { }); cb.prefWidthProperty().bind(vbox.widthProperty()); + + var regionMap = new HashMap(); cb.valueProperty().subscribe(n -> { if (n == null) { if (vbox.getChildren().size() > 1) { vbox.getChildren().remove(1); } } else { - var region = n.comp().build(); + var region = regionMap.computeIfAbsent(n, entry -> entry.comp().build()); if (vbox.getChildren().size() == 1) { vbox.getChildren().add(region); } else { diff --git a/app/src/main/java/io/xpipe/app/platform/ClipboardHelper.java b/app/src/main/java/io/xpipe/app/platform/ClipboardHelper.java index b22838945..2c570f693 100644 --- a/app/src/main/java/io/xpipe/app/platform/ClipboardHelper.java +++ b/app/src/main/java/io/xpipe/app/platform/ClipboardHelper.java @@ -55,7 +55,7 @@ public class ClipboardHelper { return; } - PlatformThread.runLaterIfNeeded(() -> { + PlatformThread.runLaterIfNeededBlocking(() -> { Clipboard clipboard = Clipboard.getSystemClipboard(); var text = clipboard.getString(); @@ -83,13 +83,13 @@ public class ClipboardHelper { } public static void copyText(String s) { - PlatformThread.runLaterIfNeeded(() -> { + PlatformThread.runLaterIfNeededBlocking(() -> { apply(Map.of(DataFormat.PLAIN_TEXT, s), true); }); } public static void copyUrl(String s) { - PlatformThread.runLaterIfNeeded(() -> { + PlatformThread.runLaterIfNeededBlocking(() -> { apply(Map.of(DataFormat.URL, s, DataFormat.PLAIN_TEXT, s), true); }); } diff --git a/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java b/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java index 7af0e1fbd..6f525265a 100644 --- a/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java +++ b/app/src/main/java/io/xpipe/app/prefs/ExternalApplicationType.java @@ -134,8 +134,8 @@ public interface ExternalApplicationType extends PrefsValue { var app = FlatpakCache.getApp(getFlatpakId()); if (app.isEmpty()) { throw ErrorEventFactory.expected(new IOException( - "Executable " + getExecutable() + " not found in PATH nor as a flatkpak " + getFlatpakId() - + " not installed. Install it and refresh the environment by restarting XPipe")); + "Executable " + getExecutable() + " not found in PATH and flatpak package " + getFlatpakId() + + " not installed.")); } return FlatpakCache.getRunCommand(getFlatpakId()); diff --git a/app/src/main/java/io/xpipe/app/util/RemoteDesktopDockView.java b/app/src/main/java/io/xpipe/app/util/RemoteDesktopDockView.java index a44c50325..3ee0ec583 100644 --- a/app/src/main/java/io/xpipe/app/util/RemoteDesktopDockView.java +++ b/app/src/main/java/io/xpipe/app/util/RemoteDesktopDockView.java @@ -57,7 +57,7 @@ public class RemoteDesktopDockView implements WindowDockListener { } public synchronized void select(RemoteDesktopDockEntry p) { - if (!entries.contains(p)) { + if (p != null && !entries.contains(p)) { return; } diff --git a/app/src/main/java/io/xpipe/app/util/RemoteDesktopWindow.java b/app/src/main/java/io/xpipe/app/util/RemoteDesktopWindow.java index cf3224e84..27da5b118 100644 --- a/app/src/main/java/io/xpipe/app/util/RemoteDesktopWindow.java +++ b/app/src/main/java/io/xpipe/app/util/RemoteDesktopWindow.java @@ -139,6 +139,7 @@ public class RemoteDesktopWindow { PlatformThread.runLaterIfNeededBlocking(() -> { if (stage != null && stage.isShowing()) { stage.setIconified(false); + stage.requestFocus(); return; }