From fe64b20dd26deb563b3c0d83210327756cd7d5ce Mon Sep 17 00:00:00 2001 From: crschnick Date: Thu, 19 Mar 2026 18:26:49 +0000 Subject: [PATCH] Rework --- .../hub/comp/DataStoreCategoryChoiceComp.java | 2 +- .../xpipe/app/hub/comp/StoreCategoryComp.java | 20 +++++---- .../app/hub/comp/StoreCategoryWrapper.java | 17 +++++++- .../io/xpipe/app/hub/comp/StoreEntryComp.java | 16 ++++--- .../io/xpipe/app/hub/comp/StoreViewState.java | 3 +- .../io/xpipe/app/process/ScriptHelper.java | 16 ++++--- .../xpipe/app/terminal/TerminalLauncher.java | 2 +- .../script/RunFileScriptMenuProvider.java | 11 ++--- .../script/RunScriptActionProviderMenu.java | 6 ++- .../ScriptCollectionSourceImportDialog.java | 2 +- .../ext/base/script/ScriptStoreSetup.java | 2 +- .../img/connectionsCategory_icon-16-dark.png | Bin 455 -> 422 bytes .../img/connectionsCategory_icon-16.png | Bin 447 -> 415 bytes .../img/connectionsCategory_icon-24-dark.png | Bin 615 -> 595 bytes .../img/connectionsCategory_icon-24.png | Bin 634 -> 593 bytes .../img/connectionsCategory_icon-40-dark.png | Bin 828 -> 750 bytes .../img/connectionsCategory_icon-40.png | Bin 820 -> 749 bytes .../img/connectionsCategory_icon-80-dark.png | Bin 1256 -> 1189 bytes .../img/connectionsCategory_icon-80.png | Bin 1282 -> 1185 bytes img/base/connectionsCategory_icon-dark.svg | 38 +++++++---------- img/base/connectionsCategory_icon.svg | 40 ++++++++---------- lang/strings/translations_en.properties | 3 +- 22 files changed, 99 insertions(+), 79 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/hub/comp/DataStoreCategoryChoiceComp.java b/app/src/main/java/io/xpipe/app/hub/comp/DataStoreCategoryChoiceComp.java index c8074ba62..ab4afd5f1 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/DataStoreCategoryChoiceComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/DataStoreCategoryChoiceComp.java @@ -57,7 +57,7 @@ public class DataStoreCategoryChoiceComp extends SimpleRegionBuilder { if (!applyExternalInitially) { value.setValue(last); } - var box = new ComboBox<>(StoreViewState.get().getSortedCategories(root).filtered(filter).getList()); + var box = new ComboBox<>(StoreViewState.get().getSortedCategories(root, false).filtered(filter).getList()); box.setValue(value.getValue()); box.valueProperty().addListener((observable, oldValue, newValue) -> { value.setValue(newValue); diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryComp.java index 792061d35..cec4d84e4 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryComp.java @@ -22,10 +22,7 @@ import javafx.beans.property.SimpleStringProperty; import javafx.css.PseudoClass; import javafx.geometry.Insets; import javafx.geometry.Pos; -import javafx.scene.control.ContextMenu; -import javafx.scene.control.Menu; -import javafx.scene.control.MenuItem; -import javafx.scene.control.SeparatorMenuItem; +import javafx.scene.control.*; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCodeCombination; import javafx.scene.input.KeyEvent; @@ -278,13 +275,18 @@ public class StoreCategoryComp extends SimpleRegionBuilder { if (category.canMove()) { var move = new Menu(AppI18n.get("moveTo"), new FontIcon("mdi2f-folder-move-outline")); StoreViewState.get() - .getSortedCategories(getCategory().getRoot()) + .getSortedCategories(getCategory().getRoot(), true) .getList() .forEach(storeCategoryWrapper -> { - MenuItem m = new MenuItem(); - m.textProperty() - .setValue(" ".repeat(storeCategoryWrapper.getDepth()) - + storeCategoryWrapper.getName().getValue()); + var m = new CustomMenuItem(); + + var l = new Label(); + l.setGraphic(PrettyImageHelper.ofFixedSizeSquare(storeCategoryWrapper.getIconFile().getValue(), 16) + .padding(new Insets(0, 0, 1, 0)).build()); + l.setText(storeCategoryWrapper.getName().getValue()); + l.setPadding(new Insets(0, 1, 1, storeCategoryWrapper.getDepth() * 10)); + m.setContent(l); + m.setOnAction(event -> { category.moveToParent(storeCategoryWrapper.getCategory()); event.consume(); diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryWrapper.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryWrapper.java index e120995ae..051878019 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryWrapper.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreCategoryWrapper.java @@ -100,6 +100,16 @@ public class StoreCategoryWrapper { return cachedParent; } + public boolean isHierarchyExpanded() { + StoreCategoryWrapper current = this; + while ((current = current.getParent()) != null) { + if (!current.getExpanded().get()) { + return false; + } + }; + return true; + } + public void select() { PlatformThread.runLaterIfNeeded(() -> { StoreViewState.get().getActiveCategory().setValue(this); @@ -152,12 +162,17 @@ public class StoreCategoryWrapper { this.expanded.set(!expanded.getValue()); } - public void update() { + public synchronized void update() { // We are probably in shutdown then if (StoreViewState.get() == null) { return; } + // We received a delayed update after removal + if (!DataStorage.get().getStoreCategories().contains(category)) { + return; + } + // Avoid reupdating name when changed from the name property! var catName = translatedName(category.getName()); if (!catName.equals(name.getValue())) { diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryComp.java index 1005aed57..da7675c6a 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreEntryComp.java @@ -35,6 +35,7 @@ import javafx.scene.layout.Region; import atlantafx.base.layout.InputGroup; import atlantafx.base.theme.Styles; +import javafx.scene.layout.StackPane; import org.kordamp.ikonli.javafx.FontIcon; import java.lang.ref.WeakReference; @@ -644,13 +645,18 @@ public abstract class StoreEntryComp extends SimpleRegionBuilder { var move = new Menu(AppI18n.get("category"), new FontIcon("mdi2f-folder-move-outline")); StoreViewState.get() .getSortedCategories( - getWrapper().getCategory().getValue().getRoot()) + getWrapper().getCategory().getValue().getRoot(), true) .getList() .forEach(storeCategoryWrapper -> { - MenuItem m = new MenuItem(); - m.textProperty() - .setValue(" ".repeat(storeCategoryWrapper.getDepth()) - + storeCategoryWrapper.getName().getValue()); + var m = new CustomMenuItem(); + + var l = new Label(); + l.setGraphic(PrettyImageHelper.ofFixedSizeSquare(storeCategoryWrapper.getIconFile().getValue(), 16) + .padding(new Insets(0, 0, 1, 0)).build()); + l.setText(storeCategoryWrapper.getName().getValue()); + l.setPadding(new Insets(0, 1, 1, storeCategoryWrapper.getDepth() * 10)); + m.setContent(l); + m.setOnAction(event -> { getWrapper().moveTo(storeCategoryWrapper.getCategory()); event.consume(); diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreViewState.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreViewState.java index 83cfe21d1..b7db6ad1c 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreViewState.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreViewState.java @@ -565,7 +565,7 @@ public class StoreViewState { } } - public DerivedObservableList getSortedCategories(StoreCategoryWrapper root) { + public DerivedObservableList getSortedCategories(StoreCategoryWrapper root, boolean requireExpanded) { Comparator comparator = new Comparator<>() { @Override public int compare(StoreCategoryWrapper o1, StoreCategoryWrapper o2) { @@ -620,6 +620,7 @@ public class StoreViewState { }; return categories .filtered(cat -> root == null || cat.getRoot().equals(root)) + .filtered(storeCategoryWrapper -> !requireExpanded || storeCategoryWrapper.isHierarchyExpanded()) .sorted(comparator); } diff --git a/app/src/main/java/io/xpipe/app/process/ScriptHelper.java b/app/src/main/java/io/xpipe/app/process/ScriptHelper.java index d26a33c42..adaf32ae4 100644 --- a/app/src/main/java/io/xpipe/app/process/ScriptHelper.java +++ b/app/src/main/java/io/xpipe/app/process/ScriptHelper.java @@ -27,23 +27,27 @@ public class ScriptHelper { @SneakyThrows public static FilePath createExecScript(ShellDialect type, ShellControl processControl, String content) { + return createExecScript(type, processControl, content, true); + } + + @SneakyThrows + public static FilePath createExecScript(ShellDialect type, ShellControl processControl, String content, boolean log) { content = type.prepareScriptContent(processControl, content); var fileName = "xpipe-" + getScriptHash(processControl, content); var temp = processControl.getSystemTemporaryDirectory(); var file = temp.join(fileName + "." + type.getScriptFileEnding()); - return createExecScriptRaw(processControl, file, content); + return createExecScriptRaw(processControl, file, content, log); } @SneakyThrows - public static FilePath createExecScriptRaw(ShellControl processControl, FilePath file, String content) { + public static FilePath createExecScriptRaw(ShellControl processControl, FilePath file, String content, boolean log) { if (processControl.view().fileExists(file)) { return file; } - TrackEvent.withTrace("Writing exec script") - .tag("file", file) - .tag("content", content) - .handle(); + if (log) { + TrackEvent.withTrace("Writing exec script").tag("file", file).tag("content", content).handle(); + } processControl.view().writeScriptFile(file, content); return file; } diff --git a/app/src/main/java/io/xpipe/app/terminal/TerminalLauncher.java b/app/src/main/java/io/xpipe/app/terminal/TerminalLauncher.java index cc613be6e..c2e9fd457 100644 --- a/app/src/main/java/io/xpipe/app/terminal/TerminalLauncher.java +++ b/app/src/main/java/io/xpipe/app/terminal/TerminalLauncher.java @@ -35,7 +35,7 @@ public class TerminalLauncher { var content = constructTerminalInitScript(t, processControl, workingDirectory, preInit, postInit, config, exit); var hash = ScriptHelper.getScriptHash(processControl, content); var file = t.getInitFileName(processControl, hash); - return ScriptHelper.createExecScriptRaw(processControl, file, content); + return ScriptHelper.createExecScriptRaw(processControl, file, content, true); } private static String constructTerminalInitScript( diff --git a/ext/base/src/main/java/io/xpipe/ext/base/script/RunFileScriptMenuProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/script/RunFileScriptMenuProvider.java index 2cfe03d6a..afc33fc99 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/script/RunFileScriptMenuProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/script/RunFileScriptMenuProvider.java @@ -104,12 +104,13 @@ public class RunFileScriptMenuProvider implements BrowserMenuBranchProvider { return new BrowserMenuBranchProvider() { @Override public LabelGraphic getIcon() { - if (!hierarchy.isLeaf()) { - return null; + if (hierarchy.isLeaf()) { + return new LabelGraphic.ImageGraphic(hierarchy.getScript().get().getEffectiveIconFile(), 16); + } else { + var cat = hierarchy.getCategory(); + var icon = cat.getEffectiveIconFile(); + return new LabelGraphic.ImageGraphic(icon, 16); } - - return new LabelGraphic.CompGraphic(PrettyImageHelper.ofFixedSize( - hierarchy.getScript().get().getEffectiveIconFile(), 16, 16)); } @Override diff --git a/ext/base/src/main/java/io/xpipe/ext/base/script/RunScriptActionProviderMenu.java b/ext/base/src/main/java/io/xpipe/ext/base/script/RunScriptActionProviderMenu.java index d24c04ae2..7011ade84 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/script/RunScriptActionProviderMenu.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/script/RunScriptActionProviderMenu.java @@ -376,9 +376,11 @@ public class RunScriptActionProviderMenu implements HubBranchProvider w.getParent() != null && !w.getCategory().getUuid().equals(DataStorage.PREDEFINED_SCRIPTS_CATEGORY_UUID) && !w.getCategory().getUuid().equals(DataStorage.SCRIPT_SOURCES_CATEGORY_UUID)); diff --git a/ext/base/src/main/java/io/xpipe/ext/base/script/ScriptStoreSetup.java b/ext/base/src/main/java/io/xpipe/ext/base/script/ScriptStoreSetup.java index 77fe3891a..6bf0468cb 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/script/ScriptStoreSetup.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/script/ScriptStoreSetup.java @@ -117,7 +117,7 @@ public class ScriptStoreSetup { } var applicable = refs.stream() - .filter(ss -> ss.getStore().isCompatible(sc.getShellDialect())) + .filter(ss -> ss.getStore().isCompatible(sc)) .toList(); if (applicable.isEmpty()) { return null; diff --git a/ext/base/src/main/resources/io/xpipe/ext/base/resources/img/connectionsCategory_icon-16-dark.png b/ext/base/src/main/resources/io/xpipe/ext/base/resources/img/connectionsCategory_icon-16-dark.png index aa3f4daa01a548686336c0183ee82612f9abada0..d5d488320e29b267d540761a4a6ac3acce89c33a 100644 GIT binary patch delta 311 zcmV-70m%Nx1EvFzcz+p5L_t(IjjfZvPJ}=Z#=lu0Mw*AYHDL4# z0sx3;DWyE<>oB}2Ddip!{k%kGz9yoVq9~RF8500E06=5E^9lev?SZQ~V!$Q;0+HexA=WHtnBgpC`PXOl!s;%*?X8XmmQydTVnsF z-F|S+1+xg#veqWeX0ucTSZnudwHgb6h#aV@Uj!sc@-jXD0aW!E$cu1mjJW}D&MgJr zMC4yURX^u@GoaV&g`VfV=dCUxyVlyOG3IIkNYgX`4)cIX^?^m8+wFcg8jYj8N#FNV zW6bN)2(4DDJW(Exp9^mP0IExYdcFQ-t=%lxAe-+603wpcaU28i7 qs;44yHy8}kRREv_oB_zX-}wixqjAvmyp2r&0000WgI#t1$UO)lFz@#!6Jk^qn@9j4Ns~AppS4w*ao{x-LhhitG{5J%A&qDx7oAs*3-twSPyNRoCdI9V2qI)JSXc)^LjFqML2GLt zz{Wy-0Sm2ddm5hiS6ilCL2weRE^!xpvMx$|9)ES21D30To+ywP{-HOOl z5x{%@0c_?1dP%+Bce~x*C<3Hun$CL$Ktx8)x%D`XKZ^iURVo#0tu@&Mr>c7AoEt3z iu-2A=GXPojoPPoBaC*hn+*-^40000WeJP-e*~s*QFa{wnb!DRc|z#%?X9zP83CdRF!p%D2gUw7(P+e!x}h_V}O5W zyqe=VD40t{24FNA-3IR35M9^(*6nuRo?I^#xUPFW&-42>0#*GCR1?hS^H0W@uQq}- zO@EiImkI`h!GAumZzDJ@&N?8gQhI{%c>EA}T9NUw*XzBp66AS)K}4=p6kJ-hSt<~b zca26Ps6sc!q}GCdzn=mtKdhQkK@bFPyWMteKtT|s!{Ko04J#FRp7$(ClE*fJPN(x6 z*sCN^)fo`k2snJEmvUMSc7PpAL1`90+PeFuXwk_WfL=6Bf2iu^>2%sUD>)3qE#R7n zd|#LVh~s!yMDD5To`@XOfvf5Ua0~e2`~EhN9SHzQlH`G^-V~9|nu1J3CZ6YgplD#n b1?Q6gT}$VoC!>LQ00000NkvXXu0mjf@A>4z delta 505 zcmVvAJ8fFPY}J*L8^k>T~Y+2gVwwIId};nX=3iQ_`nVC^K!q> z`|=+5nj}uMDih=7IF8SonUxJ33Y+KUhMxzms1MMh^zDnX>JW&({VHn<#^!p5)b5-DH zz6jgd*>Po79|VCmHa0TgIM19qWV+q%gIcZjxD3#0wcY}k#(Pr$@C^vd06=fDF$MU( zzX@!X1g2^V*nivGy9Qh@5|U-vR=eFkSO}1`3fwOO0K33qfOGC;mSyjXq*p4H*E8oP z8%dIUcFw&i0;Fl`b-P_JNs_}(r}Jelu(Y(aF6nL&VC>yB;Kf`((!QDPmH{M1lfD1) zncf4|iiAiy^nL&KLV%=;z-kcyI5%tJq+i7&;7O76ByvfP{{)QgP2cyAfTJS731!M} zGMBI5gQTh=0_@(XMnIFT2-^EMh>cz)oJg*;6$01gYr8B+ER5h`7qrP`H=EbSJ>t2BoxR+zn|GM!nRfT)c%F?V>%jB8N5C84a(`L)pPZ=bi!cmdoeF&4 z-&WOcz;oNSKg?#cWm$TqQrT721692hhGCQ)(M=#74u`MLxqE;^&+}f2$Za69093UC zBpZNdiGd27x#TQC5Zo1!dnQCx{nGFE-<_@J3V<8H0~3LW^nhZ5G)+G_jx#nC{LHK8 z3c@fv298Yx|9^|M3COzScF=4#AFAq;f{c&7Uhl1uV7Xjg5|L{K1y|Nh<_hZd`uq8O zeprMa$MM2g(CKs*z}kgHlPhSoT3b;RZJB^ZqtQZD|9Qi51(V6-X{}a!Y$6DP;2CgK zNC5m&)gLAT;3Th@E9iE+`@p`TAU76(h-~`b6hK!66I|e`=Xs6ul6~Lb2CiF{^%YjW zOxJY}MC87R9I0wtl5YcdRP}SC(b#Rb+v%x5M8tL7JrQvMrwmzN_Fynb{_5bO Z@*54A=S=_r002ovPDHLkV1gvp@5TTC delta 525 zcmV+o0`mRQ1o{M!cz^9lL_t(YiM`daYZFl%2k`Ir<=SjwpwPuZxPx01M1n|%O9CzE z=Fs5c-yo>iS!WkPgwnkr2K@t?Av9#nBw8sK6BR@wK@cRE_U?UMOo&Mna#!kid+)*b zb3g95M@cx#IOB_aKEKrK^)6(yS*9(t)_w`Ya4=kRIDzMRw|^z=063Sn{BM4f+-kL2 z&qjdn`zuiteU|hvo6WxH_xm<&dnS`vC%J2kxe|uqfdc?>9A5?yx7+RKr+j(uz@_oMDL~RM zl3&vRlD<#wO@9IPdVL$fb{gQMOaaAWal=}BBT0$1cBj#394-V%S|fQs31E!b1F#qX z;I*U=NdN$EW*tlcj^q5W*1k;$td>fpRmX8U)oS(UTp)^~EdX~D0sw%)V6X|`)m%W* zdy;!;007@6H~#-;8U(>TlA8&8I{W+kcNPLjx&YP^0)M$#2UCDC<`ICWN!p_*I+_cR z9Nn9>TCE45mjpN=wAKm$hQH-c0M2`!=bf?`zVEL9xCr1QFm`3SuDc81rlh(tX6DHA zBFO=8UD9Ev(^;1kj{uT%UH6u?_A1GxGyut1(m^hld)aI@kN=tAtnvq%KF&L_iay=| P00002+gcyRb*+gWk1b5tXEOg^;T(XnwWHJf) zRl}V-b3V+ubD3Q+Gm;#)+kj3YRHHoBog}6aA06yq1%H{F}5xEG|Jzp7pnkrQ#K%&cl=uX=lX-)}tE7MP?Y bew+CXf6mZvoJ*kb00000NkvXXu0mjfkDWO- delta 720 zcmV;>0x$jU1-u53cz>@+L_t(oh1J+GXcJ)+2k`&ZIz`c``9g&% zc5v0DE+XRMsDndjw+@PfU`N44imQ_$DNbUGf?K7OB3#pA4XvbwOW$*7Q!Z_CP03w) z`A^4tkL1Vq*epkeOVw%xCkS^|({=Coy53xMm8L?V#{ zfCzw6r*QyaS$|dqz&rqGt%qy%1E5k$0{{^@oyNK1001-VTH(kkb|;t1sqyh~?KR^^ z(&=>5Mezh0W1ehnZN2uNRG&hjaK;$(uTd}bH|o#>J-2vgXXkxiUtd0G#N6Cm#Te7D z=LsAe8`}V|5rC;K*=)9H&l8x>=ZCe{7yZOA^JX@ioqs=maxb1hBAO79T>GrL&-@19 zTC4NjeMpp2+xw3~zJ-W3PcrWb%w#gt0H)g#wVCeT;$pG*5P%61P_0&9jE;^jHS2o< z0o)Lg`#ziM0X;ph05k=5_ZExDClUD*u)+3f9{0F43t-k)&I!}qTU;y_-v)F@J{x21 zwle4mWPj!u5e@ibs!M;XgWbKwTI)$>p7HxjMdWX*v!1|_kJi*1YANa(lN{l|S9 z07T?0P6;j|=l3rw2d>&hJRUC*(Qg0)tE;OMoyOU=eU*r=1K8DCFVyOXU%x#Tkv9OC zh(3zQcM+)ujU%EIfP2`x{mdkj$wv)=08lEGrbz%i0}%Ktj|TbRIL?Eip`q%31J)&V;93+#QM1r-1sjdV3$}4zRQ0hj=JV#}=GL%Pxm@m|h|B^v zfL9`NSye5xUBT(;=@YA~t98HwCZZ@>8aAvwzVDA%YnMf2TttesT5S>9Zj!aNwK2d` z)s?hy0JU0e9e;=bRP{o$-U7yP>;M>J;a=Qyg-M!SkC|>Ml}cBwwPyz1 z+;!a#l}hFJUTYEot+fwCBtIBd$9W$DdjgNfh(+WF;0~exMy~~lfI$$<_HQ{@GC$&D zV82PU2YuhaZj2f0x0x|!sama8_w$*gckvzI%7IjEv47US1@;9z8Y4Ewd{xyy1L(Kh zdr4;!0T&h)p6}l>m}Gv$$H0D*Xb(4r!L_t(oh1J+UXcJK!2k`Ir-9clipa>T25PFx6PEm9zNvVV4 z;;KtsM8w5W2M1}l4vK?dN5MsktCOusq=TeI!KLIl3bjZFYbeq`BzHfDHt8iMmz3OH zFW)7{`~Bd3c<Tr^FtpHxDF}$+McKJtcVyz<-5^9AyBXbzPrXU0t=k z1$y5>!!U+PegTk*2-ci3$?KM7E!PGbR*>Wi9N>Ncc&zLC_r1M6Cv26j>!yfIle{4! zZ%JMf5f|{R;OOXRLMc@SFhFw5vMeiXm^ULMBZG-V!Uiy`luDOMr4_()NR(3N0So}x zj2Z_38yg!t0DqPNKtz&tSM9-Z9PRM25-sg0B2obW*L7=_|4*?uBvm?{*8F;cNU>OK zyC}ZE@$vCTBwqzjYRtsM#OcMw#lNj;vHwuV9_YKp)oS&fQfeV=L_VM2X; z0oV#$bd2}{CnqP9j^h|XPUtw!cA-#M?%a70U!dbSQ-31zym!`7lu|_iSGw*Ga`G_Z zyMnIk?vgAAJm>atntg%!e0~>$=Yhg@WC#?h6!=YXI&B zuJT0Fw3h(d0{eT5MdYJW>UWp`lE3`wolfyQfcZd0$4q~3aVC>_gK!SXr(7;~yPL*N z@8BttLw~`T8Zy{zV}EZk$!Vq3T+owNDwRLo_WA;Ixm*cAsb^6SiTxJWfh2biAJ33H z5je?nhrjjzD0Rr%+S(?7p8$po!T8~ diff --git a/ext/base/src/main/resources/io/xpipe/ext/base/resources/img/connectionsCategory_icon-80-dark.png b/ext/base/src/main/resources/io/xpipe/ext/base/resources/img/connectionsCategory_icon-80-dark.png index f0a8a45e724fef85f8a6474f1039860474a0abea..2f124d88f1c0cd62479729d83c0555559b760da3 100644 GIT binary patch delta 1084 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 delta 1178 zcmV;L1ZDf734#iccz<^4{>xr}<@O(wQGIGnDX{UI!R-RDYll6(~dn3Q>VVVx1Od zv)Nd+T7AqI^8_=e032uLco(xBC`9xRfUC^Bz|3D(DwXw)`Z_s{ab5ROBKinGN|na;hgS^p65MTtyVW$6||M&y6)2eKG>^nh?PnIWx~0WB!OXYj3gEjsln_qL%=i@V`bxuaruq zOF?}t1x`**US#Iid_y+@oGq8j^ATn4OQxo#?(jTs9>5vj@HJyhqF5~6Y_1QSnnXm* z{EUB$na>ZqJOEf(S^3)-a~43&H+&~EXM^ek1-h=A0DqA14b^M4+U4kC_BX|1@hX5X z{A1SI2ZCw?1zKxQHt%zNeSJHcc!L2m|KQ&yqI-hs0tGsbGuqT#3#uDtn%^@sj|SBp z*3*;7P=P{JppcG#ObB9jcJ|2T=H^iR5tf#g>S6js0=Kufe~QQB_e%EBFHBEQpDYv# zf9-OX{F7Xf@6wqK{P5EUpy1qxAtLR6rT&_`io%#}u?aXiW} zy}%f=CFu_>Fqg}D=;B5CprBJ&hzb;<0)U7s`0%xBuk13Fv+ z6abRR!hh;fz71T>9MV?t)V$LTw7ba s&dhedeW3*^|D)H!LR6p-6)5CCP!s!TNJluq$N&HU07*qoM6N<$f}_YR`2YX_ diff --git a/img/base/connectionsCategory_icon-dark.svg b/img/base/connectionsCategory_icon-dark.svg index 7f789e4cf..f7f4b0dee 100644 --- a/img/base/connectionsCategory_icon-dark.svg +++ b/img/base/connectionsCategory_icon-dark.svg @@ -23,11 +23,11 @@ inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:zoom="2.7891646" - inkscape:cx="98.595831" - inkscape:cy="115.98455" + inkscape:cx="161.33863" + inkscape:cy="124.23075" inkscape:window-width="1920" - inkscape:window-height="1009" - inkscape:window-x="-8" + inkscape:window-height="1057" + inkscape:window-x="1912" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="Layer_1" />identity + x="46.382923" + y="136.12308" /> diff --git a/img/base/connectionsCategory_icon.svg b/img/base/connectionsCategory_icon.svg index 8cd0201ab..4a6fab4e2 100644 --- a/img/base/connectionsCategory_icon.svg +++ b/img/base/connectionsCategory_icon.svg @@ -23,11 +23,11 @@ inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:zoom="2.7891646" - inkscape:cx="98.595831" - inkscape:cy="115.98455" + inkscape:cx="161.33863" + inkscape:cy="124.23075" inkscape:window-width="1920" - inkscape:window-height="1009" - inkscape:window-x="-8" + inkscape:window-height="1057" + inkscape:window-x="1912" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="Layer_1" />identity + x="46.382923" + y="136.12308" /> diff --git a/lang/strings/translations_en.properties b/lang/strings/translations_en.properties index 5670bca1c..541e9fdce 100644 --- a/lang/strings/translations_en.properties +++ b/lang/strings/translations_en.properties @@ -1499,7 +1499,8 @@ enpassVaultFileDescription=The local Enpass vault file. #context: No hierarchy, just a single level flat=Flat recursive=Recursive -rdpAllowListBlocked=The selected RemoteApp does not seem to be included in the RDP allow list for the server. +#force +rdpAllowListBlocked=The selected RemoteApp is not included in the RDP allow list for the server and can't be launched. psonoServerUrl=Server URL psonoServerUrlDescription=URL of the psono backend server psonoApiKey=API Key