diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java index fbcc51d7..a3852f54 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java @@ -20,10 +20,7 @@ import io.xpipe.app.prefs.AppPrefs; import io.xpipe.app.storage.DataStorage; import io.xpipe.app.storage.DataStoreColor; import io.xpipe.app.update.XPipeDistributionType; -import io.xpipe.app.util.DataStoreFormatter; -import io.xpipe.app.util.DesktopHelper; -import io.xpipe.app.util.DesktopShortcuts; -import io.xpipe.app.util.ThreadHelper; +import io.xpipe.app.util.*; import javafx.beans.binding.Bindings; import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ObservableDoubleValue; @@ -273,12 +270,24 @@ public abstract class StoreEntryComp extends SimpleComp { var item = actionProvider.canLinkTo() ? new Menu(null, new FontIcon(icon)) : new MenuItem(null, new FontIcon(icon)); + + var proRequired = p.getKey().getProFeatureId() != null && + !LicenseProvider.get().getFeature(p.getKey().getProFeatureId()).isSupported(); + if (proRequired) { + item.setDisable(true); + item.setGraphic(new FontIcon("mdi2p-professional-hexagon")); + } + Menu menu = actionProvider.canLinkTo() ? (Menu) item : null; item.setOnAction(event -> { if (menu != null && !event.getTarget().equals(menu)) { return; } + if (menu.isDisable()) { + return; + } + contextMenu.hide(); ThreadHelper.runFailableAsync(() -> { var action = actionProvider.createAction( diff --git a/app/src/main/java/io/xpipe/app/ext/ActionProvider.java b/app/src/main/java/io/xpipe/app/ext/ActionProvider.java index ae311b40..caec9336 100644 --- a/app/src/main/java/io/xpipe/app/ext/ActionProvider.java +++ b/app/src/main/java/io/xpipe/app/ext/ActionProvider.java @@ -59,6 +59,10 @@ public interface ActionProvider { return true; } + default String getProFeatureId() { + return null; + } + interface LauncherCallSite { String getId(); diff --git a/app/src/main/java/io/xpipe/app/util/AskpassAlert.java b/app/src/main/java/io/xpipe/app/util/AskpassAlert.java index 695e0bed..619e62c3 100644 --- a/app/src/main/java/io/xpipe/app/util/AskpassAlert.java +++ b/app/src/main/java/io/xpipe/app/util/AskpassAlert.java @@ -38,10 +38,6 @@ public class AskpassAlert { alert.setHeaderText(prompt); alert.setAlertType(Alert.AlertType.CONFIRMATION); -// alert.getDialogPane().getScene().getWindow().setOnShown(event -> { -// ((Stage) alert.getDialogPane().getScene().getWindow()).setAlwaysOnTop(true); -// }); - var text = new SecretFieldComp(prop).createRegion(); alert.getDialogPane().setContent(new StackPane(text));