From 918faa067f33f8a40587410074bb805f83a42e32 Mon Sep 17 00:00:00 2001 From: crschnick Date: Wed, 29 Apr 2026 13:29:29 +0000 Subject: [PATCH] Rework --- .../io/xpipe/app/platform/NativeBridge.java | 28 ++++++++------- .../app/util/NativeMacOsWindowControl.java | 2 +- .../xpipe/app/util/RemoteDesktopDockComp.java | 34 ++++++++++--------- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/platform/NativeBridge.java b/app/src/main/java/io/xpipe/app/platform/NativeBridge.java index 464c28fb8..4e2b6347e 100644 --- a/app/src/main/java/io/xpipe/app/platform/NativeBridge.java +++ b/app/src/main/java/io/xpipe/app/platform/NativeBridge.java @@ -9,6 +9,7 @@ import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.NativeLong; +import java.nio.file.Files; import java.util.Map; import java.util.Optional; @@ -25,24 +26,25 @@ public class NativeBridge { } public static Optional getMacOsLibrary() { - if (!AppProperties.get().isImage() - || !AppProperties.get().isFullVersion() - || !AppProperties.get().getArch().equals("arm64")) { + if (!AppProperties.get().isFullVersion() || !AppProperties.get().getArch().equals("arm64")) { return Optional.empty(); } if (macOsLibrary == null && !loadingFailed) { + var base = AppProperties.get().isImage() ? AppInstallation.ofCurrent() : AppInstallation.ofDefault(); + var file = base + .getBaseInstallationPath() + .resolve("Contents") + .resolve("runtime") + .resolve("Contents") + .resolve("Home") + .resolve("lib"); + if (!Files.exists(file)) { + return Optional.empty(); + } + try { - System.setProperty( - "jna.library.path", - AppInstallation.ofCurrent() - .getBaseInstallationPath() - .resolve("Contents") - .resolve("runtime") - .resolve("Contents") - .resolve("Home") - .resolve("lib") - .toString()); + System.setProperty("jna.library.path", file.toString()); var l = Native.load("xpipe_bridge", MacOsLibrary.class, Map.of()); macOsLibrary = l; } catch (Throwable t) { diff --git a/app/src/main/java/io/xpipe/app/util/NativeMacOsWindowControl.java b/app/src/main/java/io/xpipe/app/util/NativeMacOsWindowControl.java index 19ce98d08..d52db5d95 100644 --- a/app/src/main/java/io/xpipe/app/util/NativeMacOsWindowControl.java +++ b/app/src/main/java/io/xpipe/app/util/NativeMacOsWindowControl.java @@ -32,7 +32,7 @@ public class NativeMacOsWindowControl { } public boolean setAppearance(boolean seamlessFrame, boolean darkMode) { - if (!AppProperties.get().isImage() || !AppProperties.get().isFullVersion()) { + if (!AppProperties.get().isFullVersion()) { return false; } diff --git a/app/src/main/java/io/xpipe/app/util/RemoteDesktopDockComp.java b/app/src/main/java/io/xpipe/app/util/RemoteDesktopDockComp.java index 6eda4f10f..e4201adec 100644 --- a/app/src/main/java/io/xpipe/app/util/RemoteDesktopDockComp.java +++ b/app/src/main/java/io/xpipe/app/util/RemoteDesktopDockComp.java @@ -13,6 +13,7 @@ import io.xpipe.app.platform.PlatformThread; import javafx.application.Platform; import javafx.beans.binding.Bindings; import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ObservableBooleanValue; import javafx.collections.ListChangeListener; import javafx.css.PseudoClass; import javafx.geometry.Pos; @@ -79,7 +80,7 @@ public class RemoteDesktopDockComp extends SimpleRegionBuilder { return vbox; } - private void fillToolbar(Region content, ToolBar bar, List list) { + private void fillToolbar(ToolBar bar, List list, ObservableBooleanValue requiresRestart) { var w = RemoteDesktopWindow.get(); bar.getItems().forEach(node -> node.getProperties().clear()); bar.getItems().clear(); @@ -129,7 +130,6 @@ public class RemoteDesktopDockComp extends SimpleRegionBuilder { buttons.setSpacing(6); bar.getItems().add(buttons); - var requiresRestart = new SimpleBooleanProperty(); var restartButton = new ButtonComp(AppI18n.observable("reloadSizes"), new LabelGraphic.IconGraphic("mdi2r-restart"), () -> { w.getRestartTriggered().set(true); GlobalTimer.delay(() -> { @@ -146,18 +146,6 @@ public class RemoteDesktopDockComp extends SimpleRegionBuilder { }); } }); - if (RemoteDesktopWindow.get().supportsDocking()) { - var ref = new WeakReference<>(content); - GlobalTimer.scheduleUntil(Duration.ofMillis(200), false, () -> { - if (ref.get() == null) { - return true; - } - - var rect = w.getDockBounds(); - requiresRestart.set(rect != null && w.getProcesses().stream().anyMatch(e -> e.requiresRestart(rect.getW(), rect.getH()))); - return false; - }); - } restartButton.show(requiresRestart); buttons.getChildren().add(restartButton.build()); } @@ -178,10 +166,24 @@ public class RemoteDesktopDockComp extends SimpleRegionBuilder { var w = RemoteDesktopWindow.get(); var bar = new ToolBar(); - fillToolbar(content, bar, w.getProcesses()); + var requiresRestart = new SimpleBooleanProperty(); + if (RemoteDesktopWindow.get().supportsDocking()) { + var ref = new WeakReference<>(content); + GlobalTimer.scheduleUntil(Duration.ofMillis(200), false, () -> { + if (ref.get() == null) { + return true; + } + + var rect = w.getDockBounds(); + requiresRestart.set(rect != null && w.getProcesses().stream().anyMatch(e -> e.requiresRestart(rect.getW(), rect.getH()))); + return false; + }); + } + + fillToolbar(bar, w.getProcesses(), requiresRestart); w.getProcesses().addListener((ListChangeListener) c -> { PlatformThread.runLaterIfNeeded(() -> { - fillToolbar(content, bar, c.getList()); + fillToolbar(bar, c.getList(), requiresRestart); updateSelection(bar, w.getSelected().get()); }); });