diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d97236eab..5b24c4759 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,8 +20,8 @@ If you are on Linux or macOS, you can easily accomplish that by using [SDKMAN](h ```bash curl -s "https://get.sdkman.io" | bash . "$HOME/.sdkman/bin/sdkman-init.sh" -sdk install java 25.0.2-graalce -sdk default java 25.0.2-graalce +sdk install java 25.0.1-graalce +sdk default java 25.0.1-graalce ``` On Windows, you have to manually install a JDK, e.g. from [Adoptium](https://adoptium.net/temurin/releases/?version=25). diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java index 7799005b8..f3818bc7c 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileSystemTabModel.java @@ -413,10 +413,19 @@ public final class BrowserFileSystemTabModel extends BrowserStoreSessionTab { + BooleanScope.executeExclusive(busy, () -> { + try (var ignored = sub.start()) { + openTerminalSync(name, directory, sub, true); + } + }); + }); } else { - var cc = fileSystem.getShell().get().command(adjustedPath); - openTerminalAsync(name, directory, cc, true); + ThreadHelper.runFailableAsync(() -> { + BooleanScope.executeExclusive(busy, () -> { + openTerminalSync(name, directory, fileSystem.getShell().get().command(adjustedPath), true); + }); + }); } }); return Optional.ofNullable(cps); diff --git a/app/src/main/java/io/xpipe/app/ext/NetworkTunnelStore.java b/app/src/main/java/io/xpipe/app/ext/NetworkTunnelStore.java index 3a59ef799..8c555af3a 100644 --- a/app/src/main/java/io/xpipe/app/ext/NetworkTunnelStore.java +++ b/app/src/main/java/io/xpipe/app/ext/NetworkTunnelStore.java @@ -27,7 +27,7 @@ public interface NetworkTunnelStore extends DataStore, SelfReferentialStore { } default HostAddress getTunnelHostName() { - return null; + return HostAddress.empty(); } default Optional> getUnsupportedParent() { 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 775b4b229..a0b2524d2 100644 --- a/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java @@ -82,7 +82,7 @@ public class SyncCategory extends AppPrefsCategory { .sub(prefs.getCustomOptions("gitVaultIdentityStrategy")) .pref(prefs.syncMode) .addComp( - ChoiceComp.ofTranslatable(prefs.syncMode, Arrays.asList(SyncMode.values()), false), + ChoiceComp.ofTranslatable(prefs.syncMode, Arrays.asList(SyncMode.values()), false).maxWidth(getCompWidth()), prefs.syncMode) .addComp(createManualControls()) .hide(prefs.syncMode.isNotEqualTo(SyncMode.MANUAL).or(prefs.enableGitStorage.not())) diff --git a/app/src/main/java/io/xpipe/app/storage/DataStorage.java b/app/src/main/java/io/xpipe/app/storage/DataStorage.java index 5d0561a88..29371cd46 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStorage.java @@ -271,6 +271,10 @@ public abstract class DataStorage { return dir.resolve("data"); } + public Path getIconsDir() { + return dir.resolve("icons"); + } + protected Path getCategoriesDir() { return dir.resolve("categories"); } diff --git a/app/src/main/java/io/xpipe/app/storage/StandardStorage.java b/app/src/main/java/io/xpipe/app/storage/StandardStorage.java index cd75fc584..32f8ccff4 100644 --- a/app/src/main/java/io/xpipe/app/storage/StandardStorage.java +++ b/app/src/main/java/io/xpipe/app/storage/StandardStorage.java @@ -91,11 +91,13 @@ public class StandardStorage extends DataStorage { var storesDir = getStoresDir(); var categoriesDir = getCategoriesDir(); var dataDir = getDataDir(); + var iconsDir = getIconsDir(); try { FileUtils.forceMkdir(storesDir.toFile()); FileUtils.forceMkdir(categoriesDir.toFile()); FileUtils.forceMkdir(dataDir.toFile()); + FileUtils.forceMkdir(iconsDir.toFile()); } catch (Exception e) { ErrorEventFactory.fromThrowable("Unable to create vault directory", e) .terminal(true) @@ -400,6 +402,8 @@ public class StandardStorage extends DataStorage { try { FileUtils.forceMkdir(getStoresDir().toFile()); FileUtils.forceMkdir(getCategoriesDir().toFile()); + FileUtils.forceMkdir(getDataDir().toFile()); + FileUtils.forceMkdir(getIconsDir().toFile()); } catch (Exception e) { ErrorEventFactory.fromThrowable(e) .description("Unable to create storage directory " + getStoresDir()) diff --git a/app/src/main/java/io/xpipe/app/terminal/TerminalDockHubManager.java b/app/src/main/java/io/xpipe/app/terminal/TerminalDockHubManager.java index e58b8ec51..fac77c18f 100644 --- a/app/src/main/java/io/xpipe/app/terminal/TerminalDockHubManager.java +++ b/app/src/main/java/io/xpipe/app/terminal/TerminalDockHubManager.java @@ -18,6 +18,7 @@ import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.collections.ListChangeListener; +import javafx.stage.Screen; import lombok.Getter; import org.kordamp.ikonli.javafx.FontIcon; @@ -58,6 +59,12 @@ public class TerminalDockHubManager { return false; } + var primaryScreen = Screen.getPrimary(); + var uniformScale = Screen.getScreens().stream().allMatch(screen -> screen.getOutputScaleX() == primaryScreen.getOutputScaleX()); + if (!uniformScale) { + return false; + } + return true; } diff --git a/dist/changelog/21.1.1.md b/dist/changelog/21.1.1.md new file mode 100644 index 000000000..cee857a9f --- /dev/null +++ b/dist/changelog/21.1.1.md @@ -0,0 +1 @@ +- Fix Warp terminal hyperlinks being opened in browser as well diff --git a/dist/changelog/21.1.md b/dist/changelog/21.1.md new file mode 100644 index 000000000..08aa09afa --- /dev/null +++ b/dist/changelog/21.1.md @@ -0,0 +1,9 @@ +- Fix various hyperlinks and files being opened in web browser instead of associated application +- Fix NullPointer when opening split terminal +- Fix continuous NullPointer when git vault was enabled but no remote repository was specified +- Fix OutOfBounds issue for the cisco switch version detection +- Fix SSH config entries always using default id_rsa key if none was specified +- Fix SSH config entries not preferring custom identity set in XPipe +- Fix NullPointers with SSH configs on remote systems +- Fix local custom icons directory not being created by default +- Don't enable terminal docking with mixed display scale screens due to wrong translated window coordinates diff --git a/dist/licenses/graalvm.properties b/dist/licenses/graalvm.properties index ae86cefde..4aec72c40 100644 --- a/dist/licenses/graalvm.properties +++ b/dist/licenses/graalvm.properties @@ -1,4 +1,4 @@ name=GraalVM Community -version=25.0.2 +version=25.0.1 license=GPL2 with the Classpath Exception link=https://www.graalvm.org/ \ No newline at end of file diff --git a/version b/version index 5f39e9144..2d978e312 100644 --- a/version +++ b/version @@ -1 +1 @@ -21.0 +21.1.1