diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListCompEntry.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListCompEntry.java index 37a07681f..9805a921f 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListCompEntry.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileListCompEntry.java @@ -1,6 +1,7 @@ package io.xpipe.app.browser.file; import io.xpipe.app.browser.BrowserFullSessionModel; +import io.xpipe.app.core.AppSystemInfo; import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.util.BooleanScope; import io.xpipe.app.util.GlobalTimer; @@ -8,6 +9,7 @@ import io.xpipe.app.util.ThreadHelper; import io.xpipe.app.ext.FileKind; import io.xpipe.core.FilePath; +import io.xpipe.core.OsType; import javafx.css.PseudoClass; import javafx.geometry.Point2D; import javafx.scene.Node; @@ -19,6 +21,7 @@ import javafx.scene.input.*; import lombok.Getter; +import java.io.IOException; import java.nio.file.InvalidPathException; import java.time.Duration; import java.time.Instant; @@ -151,6 +154,18 @@ public class BrowserFileListCompEntry { private boolean acceptsDrop(DragEvent event) { // Accept drops from outside the app window if (event.getGestureSource() == null) { + // Don't accept 7zip temp files + if (OsType.ofLocal() == OsType.WINDOWS && event.getDragboard().getFiles().stream().anyMatch(file -> { + try { + return file.toPath().toRealPath().startsWith(AppSystemInfo.ofWindows().getTemp()) && + file.toPath().getFileName().toString().matches("7z[A-Z0-9]+"); + } catch (IOException ignored) { + return false; + } + })) { + return false; + } + return true; } diff --git a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileTransferOperation.java b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileTransferOperation.java index 167e7f2f2..7be4ce89d 100644 --- a/app/src/main/java/io/xpipe/app/browser/file/BrowserFileTransferOperation.java +++ b/app/src/main/java/io/xpipe/app/browser/file/BrowserFileTransferOperation.java @@ -508,7 +508,7 @@ public class BrowserFileTransferOperation { outputStream.flush(); inputStream.transferTo(OutputStream.nullOutputStream()); - var incomplete = readCount.get() < expectedFileSize; + var incomplete = !killStreams.get() && readCount.get() < expectedFileSize; if (incomplete) { throw new IOException("Source file " + sourceFile + " input size mismatch: Expected " + expectedFileSize + " but got " + readCount.get() + ". Did the source file get updated?"); } diff --git a/app/src/main/java/io/xpipe/app/comp/base/OptionsComp.java b/app/src/main/java/io/xpipe/app/comp/base/OptionsComp.java index a8e10d665..f4d38f7b0 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/OptionsComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/OptionsComp.java @@ -35,12 +35,10 @@ import java.util.List; public class OptionsComp extends Comp> { private final List entries; - private final Validator validator; private final List checks; - public OptionsComp(List entries, Validator validator, List checks) { + public OptionsComp(List entries, List checks) { this.entries = entries; - this.validator = validator; this.checks = checks; } diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationComp.java index d2683c2ef..acf231be1 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreCreationComp.java @@ -83,6 +83,12 @@ public class StoreCreationComp extends ModalOverlayContentComp { full.sub(d.getOptions()); full.sub(propOptions); + // Start focus on top for newly created stores + if (model.getExistingEntry() == null) { + d.getOptions().disableFirstIncompleteFocus(); + full.disableFirstIncompleteFocus(); + } + var region = full.buildComp().styleClass("store-creator-options").createRegion(); valSp.getChildren().add(region); diff --git a/app/src/main/java/io/xpipe/app/platform/OptionsBuilder.java b/app/src/main/java/io/xpipe/app/platform/OptionsBuilder.java index 3e052804e..12174c488 100644 --- a/app/src/main/java/io/xpipe/app/platform/OptionsBuilder.java +++ b/app/src/main/java/io/xpipe/app/platform/OptionsBuilder.java @@ -44,6 +44,12 @@ public class OptionsBuilder { private Comp comp; private Comp lastCompHeadReference; private ObservableValue lastNameReference; + private boolean focusFirstIncomplete = true; + + public OptionsBuilder disableFirstIncompleteFocus() { + focusFirstIncomplete = false; + return this; + } public OptionsBuilder() { this.ownValidator = new SimpleValidator(); @@ -146,7 +152,9 @@ public class OptionsBuilder { public OptionsBuilder sub(OptionsBuilder builder, Property prop) { props.addAll(builder.props); allValidators.add(builder.buildEffectiveValidator()); - allChecks.addAll(builder.allChecks); + if (builder.focusFirstIncomplete) { + allChecks.addAll(builder.allChecks); + } if (prop != null) { props.add(prop); } @@ -410,7 +418,7 @@ public class OptionsBuilder { public OptionsComp buildComp() { finishCurrent(); - var comp = new OptionsComp(entries, buildEffectiveValidator(), allChecks); + var comp = new OptionsComp(entries, focusFirstIncomplete ? allChecks : List.of()); for (Augment> augment : augments) { comp.apply(augment); } diff --git a/dist/changelog/19.0.md b/dist/changelog/19.0.md index 7c5b069ac..c0576b541 100644 --- a/dist/changelog/19.0.md +++ b/dist/changelog/19.0.md @@ -16,17 +16,36 @@ Lastly, there are also now bug bounties available, meaning that you can get an X ## Other +- Add support for flatpak variants of various editors and terminals +- Add support for AIX systems - Add ability to read files via sudo if current user did not have read permission for a file -- Fix connection entries being able to be renamed to a blank string +- Add ability to drag and drop files into navigation bar to move up directories +- Add ability to move categories to different parents - The accent color of your system appearance now applies to all UI elements - Bump to JDK 25 and JavaFX 25 - Rework password choice order - Add setting for mstsc RDP client to use smart sizing - Add traditional chinese translations +- Add support for Zed on Windows ## Fixes - Fix vietnamese translations not being listed - Fix bitwarden sync not refreshing xpipe cache for bitwarden passwords - Fix sudo auth failing on legacy systems where openssl did not support certain options -- Fix VNC scan adding localhost as a connection on macOS \ No newline at end of file +- Fix VNC scan adding localhost as a connection on macOS +- Fix system state info for some VMs and containers now showing +- Fix fish shell v4 with init scripts failing to launch +- Fix SSH MOTD errors with fish +- Fix various NullPointers +- Fix kitty launch race conditions sometimes breaking socket +- Fix connection entries being able to be renamed to a blank string +- Fix apple container integration freezing when recommended kernel was not installed +- Fix local KVM integration constantly bringing up polkit auth window +- Fix super key not being handled in VNC client +- Fix Proxmox VNC action not setting empty password +- Fix identities being moved to initial category when being editing +- Fix Remmina RDP integration not supporting user domain prefix +- Fix connection entry valid state sometimes not updating immediately when edited +- Fix Linux FreeRDP not using FreeRDP v3 by default +- Fix various file transfer error messages not being accurate