From 6c8089c4b8c8086857556a48f187dcb150be9ec6 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Sun, 30 Apr 2023 09:32:27 +0200 Subject: [PATCH 01/33] Move AppindicatorTrayMenuController to integrations-linux --- pom.xml | 8 ++ .../linux/tray/ActionItemCallback.java | 21 ++++ .../tray/AppindicatorTrayMenuController.java | 110 ++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java create mode 100644 src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java diff --git a/pom.xml b/pom.xml index d7f35a0..1df0096 100644 --- a/pom.xml +++ b/pom.xml @@ -43,6 +43,7 @@ 1.2.0 1.8.1-jdk17 1.2.8 + 1.3.0 31.1-jre 1.7.36 @@ -80,6 +81,13 @@ kdewallet ${kdewallet.version} + + + org.purejava + appindicator-gtk3-java + libayatana-appindicator-libappindicator-minimal + ${appindicator.version} + org.junit.jupiter junit-jupiter diff --git a/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java b/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java new file mode 100644 index 0000000..d7754d9 --- /dev/null +++ b/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java @@ -0,0 +1,21 @@ +package org.cryptomator.ui.traymenu; + +import org.cryptomator.integrations.tray.ActionItem; +import org.purejava.linux.GCallback; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ActionItemCallback implements GCallback { + private static final Logger LOG = LoggerFactory.getLogger(ActionItemCallback.class); + private ActionItem actionItem; + + public ActionItemCallback(ActionItem actionItem) { + this.actionItem = actionItem; + } + + @Override + public void apply() { + LOG.debug("Hit tray menu action '{}'", actionItem.title()); + actionItem.action().run(); + } +} diff --git a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java new file mode 100644 index 0000000..4be9b69 --- /dev/null +++ b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java @@ -0,0 +1,110 @@ +package org.cryptomator.ui.traymenu; + +import org.apache.commons.lang3.SystemUtils; +import org.cryptomator.integrations.common.CheckAvailability; +import org.cryptomator.integrations.tray.ActionItem; +import org.cryptomator.integrations.tray.SeparatorItem; +import org.cryptomator.integrations.tray.SubMenuItem; +import org.cryptomator.integrations.tray.TrayMenuController; +import org.cryptomator.integrations.tray.TrayMenuException; +import org.cryptomator.integrations.tray.TrayMenuItem; +import org.purejava.linux.MemoryAllocator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.SegmentScope; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.Paths; +import java.util.List; + +import static org.purejava.linux.app_indicator_h.*; + +@CheckAvailability +public class AppindicatorTrayMenuController implements TrayMenuController { + + private static final Logger LOG = LoggerFactory.getLogger(AppindicatorTrayMenuController.class); + + private final SegmentScope scope = SegmentScope.auto(); + private MemorySegment indicator; + private MemorySegment menu = gtk_menu_new(); + + @CheckAvailability + public static boolean isAvailable() { + return SystemUtils.IS_OS_LINUX && MemoryAllocator.isLoadedNativeLib(); + } + + @Override + public void showTrayIcon(URI uri, Runnable runnable, String s) throws TrayMenuException { + indicator = app_indicator_new(MemoryAllocator.ALLOCATE_FOR("org.cryptomator.Cryptomator"), + MemoryAllocator.ALLOCATE_FOR(getAbsolutePath(getPathString(uri))), + APP_INDICATOR_CATEGORY_APPLICATION_STATUS()); + gtk_widget_show_all(menu); + app_indicator_set_menu(indicator, menu); + app_indicator_set_status(indicator, APP_INDICATOR_STATUS_ACTIVE()); + } + + @Override + public void updateTrayIcon(URI uri) { + app_indicator_set_icon(indicator, MemoryAllocator.ALLOCATE_FOR(getAbsolutePath(getPathString(uri)))); + } + + @Override + public void updateTrayMenu(List items) throws TrayMenuException { + menu = gtk_menu_new(); + addChildren(menu, items); + gtk_widget_show_all(menu); + app_indicator_set_menu(indicator, menu); + } + + @Override + public void onBeforeOpenMenu(Runnable runnable) { + + } + + private void addChildren(MemorySegment menu, List items) { + for (var item : items) { + // TODO: use Pattern Matching for switch, once available + if (item instanceof ActionItem a) { + var gtkMenuItem = gtk_menu_item_new(); + gtk_menu_item_set_label(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR(a.title())); + g_signal_connect_object(gtkMenuItem, + MemoryAllocator.ALLOCATE_FOR("activate"), + MemoryAllocator.ALLOCATE_CALLBACK_FOR(new ActionItemCallback(a), scope), + menu, + 0); + gtk_menu_shell_append(menu, gtkMenuItem); + } else if (item instanceof SeparatorItem) { + var gtkSeparator = gtk_menu_item_new(); + gtk_menu_shell_append(menu, gtkSeparator); + } else if (item instanceof SubMenuItem s) { + var gtkMenuItem = gtk_menu_item_new(); + var gtkSubmenu = gtk_menu_new(); + gtk_menu_item_set_label(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR(s.title())); + addChildren(gtkSubmenu, s.items()); + gtk_menu_item_set_submenu(gtkMenuItem, gtkSubmenu); + gtk_menu_shell_append(menu, gtkMenuItem); + } + gtk_widget_show_all(menu); + } + } + private String getAbsolutePath(String iconName) { + var res = getClass().getClassLoader().getResource(iconName); + if (null == res) { + throw new IllegalArgumentException("Icon '" + iconName + "' cannot be found in resource folder"); + } + File file = null; + try { + file = Paths.get(res.toURI()).toFile(); + } catch (URISyntaxException e) { + throw new IllegalArgumentException("Icon '" + iconName + "' cannot be converted to file", e); + } + return file.getAbsolutePath(); + } + + private String getPathString(URI uri) { + return uri.getPath().substring(1); + } +} From f51d68003f612c04914012bf277b14ad37331d4c Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Sun, 30 Apr 2023 09:54:26 +0200 Subject: [PATCH 02/33] Make things work on Java20 Fix imports --- .idea/misc.xml | 2 +- pom.xml | 15 +++++++++++++-- .../linux/tray/ActionItemCallback.java | 4 ++-- .../tray/AppindicatorTrayMenuController.java | 6 +++--- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 4731638..8c0cac2 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 1df0096..596f966 100644 --- a/pom.xml +++ b/pom.xml @@ -36,16 +36,17 @@ UTF-8 - 19 + 20 - 1.2.0 + 2.0.0-alpha1 1.8.1-jdk17 1.2.8 1.3.0 31.1-jre 1.7.36 + 3.12.0 5.8.2 @@ -81,6 +82,12 @@ kdewallet ${kdewallet.version} + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + org.purejava @@ -104,6 +111,9 @@ 3.9.0 ${project.jdk.version} + + --enable-preview + @@ -198,6 +208,7 @@ see + --enable-preview diff --git a/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java b/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java index d7754d9..b28a6a0 100644 --- a/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java +++ b/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java @@ -1,7 +1,7 @@ -package org.cryptomator.ui.traymenu; +package org.cryptomator.linux.tray; import org.cryptomator.integrations.tray.ActionItem; -import org.purejava.linux.GCallback; +import org.purejava.appindicator.GCallback; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java index 4be9b69..f2af67c 100644 --- a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java +++ b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java @@ -1,4 +1,4 @@ -package org.cryptomator.ui.traymenu; +package org.cryptomator.linux.tray; import org.apache.commons.lang3.SystemUtils; import org.cryptomator.integrations.common.CheckAvailability; @@ -8,7 +8,7 @@ import org.cryptomator.integrations.tray.TrayMenuController; import org.cryptomator.integrations.tray.TrayMenuException; import org.cryptomator.integrations.tray.TrayMenuItem; -import org.purejava.linux.MemoryAllocator; +import org.purejava.appindicator.MemoryAllocator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,7 +20,7 @@ import java.nio.file.Paths; import java.util.List; -import static org.purejava.linux.app_indicator_h.*; +import static org.purejava.appindicator.app_indicator_h.*; @CheckAvailability public class AppindicatorTrayMenuController implements TrayMenuController { From 2843a17648b5e65e255e2ddb73829161b66cdca4 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Sun, 30 Apr 2023 17:03:33 +0200 Subject: [PATCH 03/33] Add LinuxTrayIntegrationsProvider --- src/main/java/module-info.java | 23 +++++++++++++++++++ .../tray/LinuxTrayIntegrationsProvider.java | 19 +++++++++++++++ ....integrations.tray.TrayIntegrationProvider | 1 + 3 files changed, 43 insertions(+) create mode 100644 src/main/java/module-info.java create mode 100644 src/main/java/org/cryptomator/linux/tray/LinuxTrayIntegrationsProvider.java create mode 100644 src/main/resources/META-INF/services/org.cryptomator.integrations.tray.TrayIntegrationProvider diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java new file mode 100644 index 0000000..47c446b --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,23 @@ +import org.cryptomator.integrations.keychain.KeychainAccessProvider; +import org.cryptomator.integrations.revealpath.RevealPathService; +import org.cryptomator.integrations.tray.TrayMenuController; +import org.cryptomator.linux.keychain.SecretServiceKeychainAccess; +import org.cryptomator.linux.revealpath.DBusSendRevealPathService; +import org.cryptomator.linux.tray.AppindicatorTrayMenuController; + +module org.cryptomator.integrations.linux { + requires org.cryptomator.integrations.api; + requires org.slf4j; + requires com.google.common; + requires org.apache.commons.lang3; + requires org.freedesktop.dbus; + requires org.purejava.appindicator; + requires kdewallet; + requires secret.service; + + provides KeychainAccessProvider with SecretServiceKeychainAccess; + provides RevealPathService with DBusSendRevealPathService; + provides TrayMenuController with AppindicatorTrayMenuController; + + exports org.cryptomator.linux.tray; +} \ No newline at end of file diff --git a/src/main/java/org/cryptomator/linux/tray/LinuxTrayIntegrationsProvider.java b/src/main/java/org/cryptomator/linux/tray/LinuxTrayIntegrationsProvider.java new file mode 100644 index 0000000..be54048 --- /dev/null +++ b/src/main/java/org/cryptomator/linux/tray/LinuxTrayIntegrationsProvider.java @@ -0,0 +1,19 @@ +package org.cryptomator.linux.tray; + +import org.cryptomator.integrations.common.OperatingSystem; +import org.cryptomator.integrations.common.Priority; +import org.cryptomator.integrations.tray.TrayIntegrationProvider; + +@Priority(1000) +@OperatingSystem(OperatingSystem.Value.LINUX) +public class LinuxTrayIntegrationsProvider implements TrayIntegrationProvider { + @Override + public void minimizedToTray() { + + } + + @Override + public void restoredFromTray() { + + } +} diff --git a/src/main/resources/META-INF/services/org.cryptomator.integrations.tray.TrayIntegrationProvider b/src/main/resources/META-INF/services/org.cryptomator.integrations.tray.TrayIntegrationProvider new file mode 100644 index 0000000..239bd35 --- /dev/null +++ b/src/main/resources/META-INF/services/org.cryptomator.integrations.tray.TrayIntegrationProvider @@ -0,0 +1 @@ +org.cryptomator.linux.tray.LinuxTrayIntegrationsProvider \ No newline at end of file From 5e5c5c06a4aa3899195e6ebf1ed27f583e109369 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Mon, 1 May 2023 10:36:18 +0200 Subject: [PATCH 04/33] Use new release of kdewallet to fix 'split jar' problem --- pom.xml | 2 +- src/main/java/module-info.java | 2 +- .../cryptomator/linux/keychain/KDEWalletKeychainAccess.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 596f966..bb3c66f 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ 2.0.0-alpha1 1.8.1-jdk17 - 1.2.8 + 1.2.9 1.3.0 31.1-jre 1.7.36 diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 47c446b..fd673ff 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -12,7 +12,7 @@ requires org.apache.commons.lang3; requires org.freedesktop.dbus; requires org.purejava.appindicator; - requires kdewallet; + requires org.purejava.kwallet; requires secret.service; provides KeychainAccessProvider with SecretServiceKeychainAccess; diff --git a/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java b/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java index f69afee..e49704f 100644 --- a/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java +++ b/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java @@ -11,8 +11,8 @@ import org.freedesktop.dbus.exceptions.DBusException; import org.freedesktop.dbus.exceptions.DBusExecutionException; import org.kde.KWallet; -import org.kde.Static; -import org.purejava.KDEWallet; +import org.purejava.kwallet.KDEWallet; +import org.purejava.kwallet.Static; import org.slf4j.Logger; import org.slf4j.LoggerFactory; From 42ca384eaab88d468da80459d3f771f6e9c99638 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Mon, 1 May 2023 11:13:38 +0200 Subject: [PATCH 05/33] It has to be 1.3.0 because of the major changes --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bb3c66f..3776f24 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ 2.0.0-alpha1 1.8.1-jdk17 - 1.2.9 + 1.3.0 1.3.0 31.1-jre 1.7.36 From 5dded9034365b073108d435df11d8eaa7ab698a7 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Wed, 3 May 2023 11:22:35 +0200 Subject: [PATCH 06/33] Code improvements Discussion: https://github.com/cryptomator/integrations-linux/pull/18 --- .github/workflows/build.yml | 4 +- .github/workflows/codeql-analysis.yml | 4 +- .github/workflows/publish-central.yml | 4 +- .github/workflows/publish-github.yml | 4 +- pom.xml | 2 +- src/main/java/module-info.java | 2 +- .../linux/tray/ActionItemCallback.java | 7 +- .../tray/AppindicatorTrayMenuController.java | 67 +++++++++++-------- .../tray/LinuxTrayIntegrationsProvider.java | 19 ------ ....integrations.tray.TrayIntegrationProvider | 1 - ...mator.integrations.tray.TrayMenuController | 1 + 11 files changed, 52 insertions(+), 63 deletions(-) delete mode 100644 src/main/java/org/cryptomator/linux/tray/LinuxTrayIntegrationsProvider.java delete mode 100644 src/main/resources/META-INF/services/org.cryptomator.integrations.tray.TrayIntegrationProvider create mode 100644 src/main/resources/META-INF/services/org.cryptomator.integrations.tray.TrayMenuController diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9635f1f..feb2e11 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,8 +10,8 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: - distribution: 'temurin' - java-version: 19 + distribution: 'zulu' + java-version: 20 cache: 'maven' - name: Ensure to use tagged version if: startsWith(github.ref, 'refs/tags/') diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index c06a92a..cc951ea 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -20,8 +20,8 @@ jobs: fetch-depth: 2 - uses: actions/setup-java@v3 with: - distribution: 'temurin' - java-version: 19 + distribution: 'zulu' + java-version: 20 cache: 'maven' - name: Initialize CodeQL uses: github/codeql-action/init@v2 diff --git a/.github/workflows/publish-central.yml b/.github/workflows/publish-central.yml index fbca582..d9121a2 100644 --- a/.github/workflows/publish-central.yml +++ b/.github/workflows/publish-central.yml @@ -15,8 +15,8 @@ jobs: ref: "refs/tags/${{ github.event.inputs.tag }}" - uses: actions/setup-java@v3 with: - distribution: 'temurin' - java-version: 19 + distribution: 'zulu' + java-version: 20 cache: 'maven' server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml server-username: MAVEN_USERNAME # env variable for username in deploy diff --git a/.github/workflows/publish-github.yml b/.github/workflows/publish-github.yml index aaef56e..c0af882 100644 --- a/.github/workflows/publish-github.yml +++ b/.github/workflows/publish-github.yml @@ -10,8 +10,8 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: - distribution: 'temurin' - java-version: 19 + distribution: 'zulu' + java-version: 20 cache: 'maven' gpg-private-key: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }} # Value of the GPG private key to import gpg-passphrase: MAVEN_GPG_PASSPHRASE # env variable for GPG private key passphrase diff --git a/pom.xml b/pom.xml index 3776f24..7588a0d 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ - 2.0.0-alpha1 + 2.0.0-alpha2 1.8.1-jdk17 1.3.0 1.3.0 diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index fd673ff..49ef0b8 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -19,5 +19,5 @@ provides RevealPathService with DBusSendRevealPathService; provides TrayMenuController with AppindicatorTrayMenuController; - exports org.cryptomator.linux.tray; + opens org.cryptomator.linux.tray to org.cryptomator.integrations.api; } \ No newline at end of file diff --git a/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java b/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java index b28a6a0..9e0a28c 100644 --- a/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java +++ b/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java @@ -5,13 +5,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ActionItemCallback implements GCallback { +record ActionItemCallback (ActionItem actionItem) implements GCallback { private static final Logger LOG = LoggerFactory.getLogger(ActionItemCallback.class); - private ActionItem actionItem; - - public ActionItemCallback(ActionItem actionItem) { - this.actionItem = actionItem; - } @Override public void apply() { diff --git a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java index f2af67c..6d59013 100644 --- a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java +++ b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java @@ -1,10 +1,12 @@ package org.cryptomator.linux.tray; -import org.apache.commons.lang3.SystemUtils; import org.cryptomator.integrations.common.CheckAvailability; +import org.cryptomator.integrations.common.OperatingSystem; +import org.cryptomator.integrations.common.Priority; import org.cryptomator.integrations.tray.ActionItem; import org.cryptomator.integrations.tray.SeparatorItem; import org.cryptomator.integrations.tray.SubMenuItem; +import org.cryptomator.integrations.tray.TrayIconLoader; import org.cryptomator.integrations.tray.TrayMenuController; import org.cryptomator.integrations.tray.TrayMenuException; import org.cryptomator.integrations.tray.TrayMenuItem; @@ -13,27 +15,29 @@ import org.slf4j.LoggerFactory; import java.io.File; +import java.lang.foreign.Arena; import java.lang.foreign.MemorySegment; -import java.lang.foreign.SegmentScope; import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Paths; import java.util.List; +import java.util.function.Consumer; import static org.purejava.appindicator.app_indicator_h.*; -@CheckAvailability +@Priority(1000) +@OperatingSystem(OperatingSystem.Value.LINUX) public class AppindicatorTrayMenuController implements TrayMenuController { private static final Logger LOG = LoggerFactory.getLogger(AppindicatorTrayMenuController.class); - private final SegmentScope scope = SegmentScope.auto(); + private static final Arena ARENA = Arena.openShared(); private MemorySegment indicator; private MemorySegment menu = gtk_menu_new(); @CheckAvailability public static boolean isAvailable() { - return SystemUtils.IS_OS_LINUX && MemoryAllocator.isLoadedNativeLib(); + return MemoryAllocator.isLoadedNativeLib(); } @Override @@ -47,8 +51,13 @@ public void showTrayIcon(URI uri, Runnable runnable, String s) throws TrayMenuEx } @Override - public void updateTrayIcon(URI uri) { - app_indicator_set_icon(indicator, MemoryAllocator.ALLOCATE_FOR(getAbsolutePath(getPathString(uri)))); + public void updateTrayIcon(Consumer iconLoader) { + TrayIconLoader.FreedesktopIconName callback = this::updateTrayIconCallback; + iconLoader.load(callback); + } + + private void updateTrayIconCallback(String s) { + app_indicator_set_icon(indicator, MemoryAllocator.ALLOCATE_FOR(s)); } @Override @@ -66,30 +75,34 @@ public void onBeforeOpenMenu(Runnable runnable) { private void addChildren(MemorySegment menu, List items) { for (var item : items) { - // TODO: use Pattern Matching for switch, once available - if (item instanceof ActionItem a) { - var gtkMenuItem = gtk_menu_item_new(); - gtk_menu_item_set_label(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR(a.title())); - g_signal_connect_object(gtkMenuItem, - MemoryAllocator.ALLOCATE_FOR("activate"), - MemoryAllocator.ALLOCATE_CALLBACK_FOR(new ActionItemCallback(a), scope), - menu, - 0); - gtk_menu_shell_append(menu, gtkMenuItem); - } else if (item instanceof SeparatorItem) { - var gtkSeparator = gtk_menu_item_new(); - gtk_menu_shell_append(menu, gtkSeparator); - } else if (item instanceof SubMenuItem s) { - var gtkMenuItem = gtk_menu_item_new(); - var gtkSubmenu = gtk_menu_new(); - gtk_menu_item_set_label(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR(s.title())); - addChildren(gtkSubmenu, s.items()); - gtk_menu_item_set_submenu(gtkMenuItem, gtkSubmenu); - gtk_menu_shell_append(menu, gtkMenuItem); + switch (item) { + case ActionItem a -> { + var gtkMenuItem = gtk_menu_item_new(); + gtk_menu_item_set_label(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR(a.title())); + g_signal_connect_object(gtkMenuItem, + MemoryAllocator.ALLOCATE_FOR("activate"), + MemoryAllocator.ALLOCATE_CALLBACK_FOR(new ActionItemCallback(a), ARENA.scope()), + menu, + 0); + gtk_menu_shell_append(menu, gtkMenuItem); + } + case SeparatorItem separatorItem -> { + var gtkSeparator = gtk_menu_item_new(); + gtk_menu_shell_append(menu, gtkSeparator); + } + case SubMenuItem s -> { + var gtkMenuItem = gtk_menu_item_new(); + var gtkSubmenu = gtk_menu_new(); + gtk_menu_item_set_label(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR(s.title())); + addChildren(gtkSubmenu, s.items()); + gtk_menu_item_set_submenu(gtkMenuItem, gtkSubmenu); + gtk_menu_shell_append(menu, gtkMenuItem); + } } gtk_widget_show_all(menu); } } + private String getAbsolutePath(String iconName) { var res = getClass().getClassLoader().getResource(iconName); if (null == res) { diff --git a/src/main/java/org/cryptomator/linux/tray/LinuxTrayIntegrationsProvider.java b/src/main/java/org/cryptomator/linux/tray/LinuxTrayIntegrationsProvider.java deleted file mode 100644 index be54048..0000000 --- a/src/main/java/org/cryptomator/linux/tray/LinuxTrayIntegrationsProvider.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.cryptomator.linux.tray; - -import org.cryptomator.integrations.common.OperatingSystem; -import org.cryptomator.integrations.common.Priority; -import org.cryptomator.integrations.tray.TrayIntegrationProvider; - -@Priority(1000) -@OperatingSystem(OperatingSystem.Value.LINUX) -public class LinuxTrayIntegrationsProvider implements TrayIntegrationProvider { - @Override - public void minimizedToTray() { - - } - - @Override - public void restoredFromTray() { - - } -} diff --git a/src/main/resources/META-INF/services/org.cryptomator.integrations.tray.TrayIntegrationProvider b/src/main/resources/META-INF/services/org.cryptomator.integrations.tray.TrayIntegrationProvider deleted file mode 100644 index 239bd35..0000000 --- a/src/main/resources/META-INF/services/org.cryptomator.integrations.tray.TrayIntegrationProvider +++ /dev/null @@ -1 +0,0 @@ -org.cryptomator.linux.tray.LinuxTrayIntegrationsProvider \ No newline at end of file diff --git a/src/main/resources/META-INF/services/org.cryptomator.integrations.tray.TrayMenuController b/src/main/resources/META-INF/services/org.cryptomator.integrations.tray.TrayMenuController new file mode 100644 index 0000000..caae17c --- /dev/null +++ b/src/main/resources/META-INF/services/org.cryptomator.integrations.tray.TrayMenuController @@ -0,0 +1 @@ +org.cryptomator.linux.tray.AppindicatorTrayMenuController \ No newline at end of file From 06228d0d25eebd2e9040b0247d71c171240bc649 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Wed, 3 May 2023 11:57:04 +0200 Subject: [PATCH 07/33] Use SegmentScope.global() --- .../linux/tray/AppindicatorTrayMenuController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java index 6d59013..07b44c3 100644 --- a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java +++ b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java @@ -15,8 +15,8 @@ import org.slf4j.LoggerFactory; import java.io.File; -import java.lang.foreign.Arena; import java.lang.foreign.MemorySegment; +import java.lang.foreign.SegmentScope; import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Paths; @@ -31,7 +31,7 @@ public class AppindicatorTrayMenuController implements TrayMenuController { private static final Logger LOG = LoggerFactory.getLogger(AppindicatorTrayMenuController.class); - private static final Arena ARENA = Arena.openShared(); + private static final SegmentScope SCOPE = SegmentScope.global(); private MemorySegment indicator; private MemorySegment menu = gtk_menu_new(); @@ -81,7 +81,7 @@ private void addChildren(MemorySegment menu, List items) { gtk_menu_item_set_label(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR(a.title())); g_signal_connect_object(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR("activate"), - MemoryAllocator.ALLOCATE_CALLBACK_FOR(new ActionItemCallback(a), ARENA.scope()), + MemoryAllocator.ALLOCATE_CALLBACK_FOR(new ActionItemCallback(a), SCOPE), menu, 0); gtk_menu_shell_append(menu, gtkMenuItem); From ae314ffa004ae30039f21cbd7ea155f2791cfcbe Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Sat, 6 May 2023 09:13:59 +0200 Subject: [PATCH 08/33] Code improvements continued Discussion: https://github.com/cryptomator/integrations-linux/pull/18 --- .../linux/tray/ActionItemCallback.java | 2 +- .../tray/AppindicatorTrayMenuController.java | 41 ++++++------------- 2 files changed, 13 insertions(+), 30 deletions(-) diff --git a/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java b/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java index 9e0a28c..de1f525 100644 --- a/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java +++ b/src/main/java/org/cryptomator/linux/tray/ActionItemCallback.java @@ -10,7 +10,7 @@ record ActionItemCallback (ActionItem actionItem) implements GCallback { @Override public void apply() { - LOG.debug("Hit tray menu action '{}'", actionItem.title()); + LOG.trace("Hit tray menu action '{}'", actionItem.title()); actionItem.action().run(); } } diff --git a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java index 07b44c3..65b924e 100644 --- a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java +++ b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java @@ -14,12 +14,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; import java.lang.foreign.MemorySegment; import java.lang.foreign.SegmentScope; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.file.Paths; import java.util.List; import java.util.function.Consumer; @@ -41,22 +37,27 @@ public static boolean isAvailable() { } @Override - public void showTrayIcon(URI uri, Runnable runnable, String s) throws TrayMenuException { - indicator = app_indicator_new(MemoryAllocator.ALLOCATE_FOR("org.cryptomator.Cryptomator"), - MemoryAllocator.ALLOCATE_FOR(getAbsolutePath(getPathString(uri))), - APP_INDICATOR_CATEGORY_APPLICATION_STATUS()); + public void showTrayIcon(Consumer iconLoader, Runnable runnable, String s) throws TrayMenuException { + TrayIconLoader.FreedesktopIconName callback = this::showTrayIconWithSVG; + iconLoader.accept(callback); gtk_widget_show_all(menu); app_indicator_set_menu(indicator, menu); app_indicator_set_status(indicator, APP_INDICATOR_STATUS_ACTIVE()); } + private void showTrayIconWithSVG(String s) { + indicator = app_indicator_new(MemoryAllocator.ALLOCATE_FOR("org.cryptomator.Cryptomator"), + MemoryAllocator.ALLOCATE_FOR(s), + APP_INDICATOR_CATEGORY_APPLICATION_STATUS()); + } + @Override public void updateTrayIcon(Consumer iconLoader) { - TrayIconLoader.FreedesktopIconName callback = this::updateTrayIconCallback; - iconLoader.load(callback); + TrayIconLoader.FreedesktopIconName callback = this::updateTrayIconWithSVG; + iconLoader.accept(callback); } - private void updateTrayIconCallback(String s) { + private void updateTrayIconWithSVG(String s) { app_indicator_set_icon(indicator, MemoryAllocator.ALLOCATE_FOR(s)); } @@ -102,22 +103,4 @@ private void addChildren(MemorySegment menu, List items) { gtk_widget_show_all(menu); } } - - private String getAbsolutePath(String iconName) { - var res = getClass().getClassLoader().getResource(iconName); - if (null == res) { - throw new IllegalArgumentException("Icon '" + iconName + "' cannot be found in resource folder"); - } - File file = null; - try { - file = Paths.get(res.toURI()).toFile(); - } catch (URISyntaxException e) { - throw new IllegalArgumentException("Icon '" + iconName + "' cannot be converted to file", e); - } - return file.getAbsolutePath(); - } - - private String getPathString(URI uri) { - return uri.getPath().substring(1); - } } From 16e74656b4ed5de9962d72a57c16972a31e05a06 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Sat, 6 May 2023 12:52:50 +0200 Subject: [PATCH 09/33] Code improvements final steps Discussion: https://github.com/cryptomator/integrations-linux/pull/18 --- .../tray/AppindicatorTrayMenuController.java | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java index 65b924e..77a0437 100644 --- a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java +++ b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java @@ -10,10 +10,12 @@ import org.cryptomator.integrations.tray.TrayMenuController; import org.cryptomator.integrations.tray.TrayMenuException; import org.cryptomator.integrations.tray.TrayMenuItem; +import org.purejava.appindicator.GCallback; import org.purejava.appindicator.MemoryAllocator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.lang.foreign.Arena; import java.lang.foreign.MemorySegment; import java.lang.foreign.SegmentScope; import java.util.List; @@ -46,9 +48,11 @@ public void showTrayIcon(Consumer iconLoader, Runnable runnable, } private void showTrayIconWithSVG(String s) { - indicator = app_indicator_new(MemoryAllocator.ALLOCATE_FOR("org.cryptomator.Cryptomator"), - MemoryAllocator.ALLOCATE_FOR(s), - APP_INDICATOR_CATEGORY_APPLICATION_STATUS()); + try (var arena = Arena.openConfined()) { + indicator = app_indicator_new(arena.allocateUtf8String("org.cryptomator.Cryptomator"), + arena.allocateUtf8String(s), + APP_INDICATOR_CATEGORY_APPLICATION_STATUS()); + } } @Override @@ -58,7 +62,9 @@ public void updateTrayIcon(Consumer iconLoader) { } private void updateTrayIconWithSVG(String s) { - app_indicator_set_icon(indicator, MemoryAllocator.ALLOCATE_FOR(s)); + try (var arena = Arena.openConfined()) { + app_indicator_set_icon(indicator, arena.allocateUtf8String(s)); + } } @Override @@ -79,12 +85,14 @@ private void addChildren(MemorySegment menu, List items) { switch (item) { case ActionItem a -> { var gtkMenuItem = gtk_menu_item_new(); - gtk_menu_item_set_label(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR(a.title())); - g_signal_connect_object(gtkMenuItem, - MemoryAllocator.ALLOCATE_FOR("activate"), - MemoryAllocator.ALLOCATE_CALLBACK_FOR(new ActionItemCallback(a), SCOPE), - menu, - 0); + try (var arena = Arena.openConfined()) { + gtk_menu_item_set_label(gtkMenuItem, arena.allocateUtf8String(a.title())); + g_signal_connect_object(gtkMenuItem, + arena.allocateUtf8String("activate"), + GCallback.allocate(new ActionItemCallback(a), SCOPE), + menu, + 0); + } gtk_menu_shell_append(menu, gtkMenuItem); } case SeparatorItem separatorItem -> { @@ -94,7 +102,9 @@ private void addChildren(MemorySegment menu, List items) { case SubMenuItem s -> { var gtkMenuItem = gtk_menu_item_new(); var gtkSubmenu = gtk_menu_new(); - gtk_menu_item_set_label(gtkMenuItem, MemoryAllocator.ALLOCATE_FOR(s.title())); + try (var arena = Arena.openConfined()) { + gtk_menu_item_set_label(gtkMenuItem, arena.allocateUtf8String(s.title())); + } addChildren(gtkSubmenu, s.items()); gtk_menu_item_set_submenu(gtkMenuItem, gtkSubmenu); gtk_menu_shell_append(menu, gtkMenuItem); From f4153e6c97ebd9140c5b91913ef693fa5da60cce Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Sun, 7 May 2023 21:17:59 +0200 Subject: [PATCH 10/33] use API version 1.3.0-beta1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7588a0d..dc722ca 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ - 2.0.0-alpha2 + 1.3.0-beta1 1.8.1-jdk17 1.3.0 1.3.0 From e5928a0dfbfa51694c8300292fba3536ba5dc83b Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 8 May 2023 08:27:58 +0200 Subject: [PATCH 11/33] update dependency-check + suppression rules --- pom.xml | 2 +- suppression.xml | 15 +++------------ 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index d7f35a0..5a33df0 100644 --- a/pom.xml +++ b/pom.xml @@ -50,7 +50,7 @@ 5.8.2 - 8.1.0 + 8.2.1 1.6.8 diff --git a/suppression.xml b/suppression.xml index aebb9df..20caa29 100644 --- a/suppression.xml +++ b/suppression.xml @@ -2,18 +2,9 @@ - ^org\.cryptomator:.*$ - cpe:/a:cryptomator:cryptomator - CVE-2022-25366 - - - - ^de\.swiesend\:secret\-service:.*$ - CVE-2018-19358 - CVE-2018-20781 + ^com\.google\.guava:.*$ + CVE-2020-8908 \ No newline at end of file From 78a3e42028798c7abfdc6328ed6b0a4c6770bfe5 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Tue, 9 May 2023 19:30:37 +0200 Subject: [PATCH 12/33] Some more change requests Discussion: https://github.com/cryptomator/integrations-linux/pull/18 --- .../linux/tray/AppindicatorTrayMenuController.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java index 77a0437..b6e18b8 100644 --- a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java +++ b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java @@ -12,8 +12,6 @@ import org.cryptomator.integrations.tray.TrayMenuItem; import org.purejava.appindicator.GCallback; import org.purejava.appindicator.MemoryAllocator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.lang.foreign.Arena; import java.lang.foreign.MemorySegment; @@ -27,7 +25,7 @@ @OperatingSystem(OperatingSystem.Value.LINUX) public class AppindicatorTrayMenuController implements TrayMenuController { - private static final Logger LOG = LoggerFactory.getLogger(AppindicatorTrayMenuController.class); + private static final String APP_INDICATOR_ID = "org.cryptomator.Cryptomator"; private static final SegmentScope SCOPE = SegmentScope.global(); private MemorySegment indicator; @@ -43,13 +41,12 @@ public void showTrayIcon(Consumer iconLoader, Runnable runnable, TrayIconLoader.FreedesktopIconName callback = this::showTrayIconWithSVG; iconLoader.accept(callback); gtk_widget_show_all(menu); - app_indicator_set_menu(indicator, menu); app_indicator_set_status(indicator, APP_INDICATOR_STATUS_ACTIVE()); } private void showTrayIconWithSVG(String s) { try (var arena = Arena.openConfined()) { - indicator = app_indicator_new(arena.allocateUtf8String("org.cryptomator.Cryptomator"), + indicator = app_indicator_new(arena.allocateUtf8String(APP_INDICATOR_ID), arena.allocateUtf8String(s), APP_INDICATOR_CATEGORY_APPLICATION_STATUS()); } @@ -110,7 +107,6 @@ private void addChildren(MemorySegment menu, List items) { gtk_menu_shell_append(menu, gtkMenuItem); } } - gtk_widget_show_all(menu); } } } From 1bca3cc6a94bbebfaf758065d5c6a94e3cbddc84 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Wed, 10 May 2023 16:26:39 +0200 Subject: [PATCH 13/33] prepare 1.3.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 00ea427..b2ea909 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 org.cryptomator integrations-linux - 1.3.0-SNAPSHOT + 1.3.0 integrations-linux Provides optional Linux services used by Cryptomator From 3821dcdb9f98d92962942ba491c717d869ea80c3 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Wed, 24 May 2023 15:04:11 +0200 Subject: [PATCH 14/33] Adjust trayicon impl to recent changes * changed dependencies * changed class name --- pom.xml | 3 +-- .../linux/tray/AppindicatorTrayMenuController.java | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index b2ea909..848464d 100644 --- a/pom.xml +++ b/pom.xml @@ -91,8 +91,7 @@ org.purejava - appindicator-gtk3-java - libayatana-appindicator-libappindicator-minimal + libappindicator-gtk3-java-minimal ${appindicator.version} diff --git a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java index b6e18b8..dd60500 100644 --- a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java +++ b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java @@ -11,7 +11,7 @@ import org.cryptomator.integrations.tray.TrayMenuException; import org.cryptomator.integrations.tray.TrayMenuItem; import org.purejava.appindicator.GCallback; -import org.purejava.appindicator.MemoryAllocator; +import org.purejava.appindicator.NativeLibUtilities; import java.lang.foreign.Arena; import java.lang.foreign.MemorySegment; @@ -33,7 +33,7 @@ public class AppindicatorTrayMenuController implements TrayMenuController { @CheckAvailability public static boolean isAvailable() { - return MemoryAllocator.isLoadedNativeLib(); + return NativeLibUtilities.isLoadedNativeLib(); } @Override From 842d6eb8b9d940960e584371103361f47d38d30a Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Mon, 29 May 2023 15:49:55 +0200 Subject: [PATCH 15/33] Locate icons theme path in AppImage Needed for icons to work on Mate DE --- .../linux/tray/AppindicatorTrayMenuController.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java index dd60500..2abb437 100644 --- a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java +++ b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java @@ -46,9 +46,11 @@ public void showTrayIcon(Consumer iconLoader, Runnable runnable, private void showTrayIconWithSVG(String s) { try (var arena = Arena.openConfined()) { - indicator = app_indicator_new(arena.allocateUtf8String(APP_INDICATOR_ID), + indicator = app_indicator_new_with_path(arena.allocateUtf8String(APP_INDICATOR_ID), arena.allocateUtf8String(s), - APP_INDICATOR_CATEGORY_APPLICATION_STATUS()); + APP_INDICATOR_CATEGORY_APPLICATION_STATUS(), + // find tray icons theme in mounted AppImage + arena.allocateUtf8String(System.getenv("APPDIR") + "/usr/share/icons/hicolor/symbolic/apps")); } } From 4236179195043d2511425db9c3691307caa3ced9 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Thu, 1 Jun 2023 13:47:23 +0200 Subject: [PATCH 16/33] Code improvements Discussion: https://github.com/cryptomator/integrations-linux/pull/21 --- pom.xml | 2 +- .../linux/tray/AppindicatorTrayMenuController.java | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 848464d..ed35191 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ 1.3.0-beta1 1.8.1-jdk17 1.3.0 - 1.3.0 + 1.3.1 31.1-jre 1.7.36 3.12.0 diff --git a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java index 2abb437..b6f4cb2 100644 --- a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java +++ b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java @@ -1,5 +1,6 @@ package org.cryptomator.linux.tray; +import org.apache.commons.lang3.StringUtils; import org.cryptomator.integrations.common.CheckAvailability; import org.cryptomator.integrations.common.OperatingSystem; import org.cryptomator.integrations.common.Priority; @@ -22,9 +23,9 @@ import static org.purejava.appindicator.app_indicator_h.*; @Priority(1000) +@CheckAvailability @OperatingSystem(OperatingSystem.Value.LINUX) public class AppindicatorTrayMenuController implements TrayMenuController { - private static final String APP_INDICATOR_ID = "org.cryptomator.Cryptomator"; private static final SegmentScope SCOPE = SegmentScope.global(); @@ -46,11 +47,18 @@ public void showTrayIcon(Consumer iconLoader, Runnable runnable, private void showTrayIconWithSVG(String s) { try (var arena = Arena.openConfined()) { + var appdir = System.getenv("APPDIR"); + if (null == appdir || appdir.isBlank()) { + appdir = ""; + } + if (appdir.endsWith("/")) { + appdir = StringUtils.chop(appdir); + } indicator = app_indicator_new_with_path(arena.allocateUtf8String(APP_INDICATOR_ID), arena.allocateUtf8String(s), APP_INDICATOR_CATEGORY_APPLICATION_STATUS(), // find tray icons theme in mounted AppImage - arena.allocateUtf8String(System.getenv("APPDIR") + "/usr/share/icons/hicolor/symbolic/apps")); + arena.allocateUtf8String(appdir + "/usr/share/icons/hicolor/symbolic/apps")); } } From 017ee6de58a8bb369081fab8c94dbb93c7c3a39a Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Thu, 1 Jun 2023 17:01:17 +0200 Subject: [PATCH 17/33] bump guava --- pom.xml | 2 +- suppression.xml | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) delete mode 100644 suppression.xml diff --git a/pom.xml b/pom.xml index 00ea427..0452b78 100644 --- a/pom.xml +++ b/pom.xml @@ -44,7 +44,7 @@ 1.8.1-jdk17 1.3.0 1.3.0 - 31.1-jre + 32.0.0-jre 1.7.36 3.12.0 diff --git a/suppression.xml b/suppression.xml deleted file mode 100644 index 20caa29..0000000 --- a/suppression.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - ^com\.google\.guava:.*$ - CVE-2020-8908 - - \ No newline at end of file From 8012d535aae3eb91790a8872b97e506b36853be4 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Thu, 1 Jun 2023 17:19:32 +0200 Subject: [PATCH 18/33] fix test --- .../keychain/SecretServiceKeychainAccessTest.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/test/java/org/cryptomator/linux/keychain/SecretServiceKeychainAccessTest.java b/src/test/java/org/cryptomator/linux/keychain/SecretServiceKeychainAccessTest.java index c2bd4bb..2001e51 100644 --- a/src/test/java/org/cryptomator/linux/keychain/SecretServiceKeychainAccessTest.java +++ b/src/test/java/org/cryptomator/linux/keychain/SecretServiceKeychainAccessTest.java @@ -3,8 +3,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.EnabledOnOs; -import org.junit.jupiter.api.condition.OS; +import org.junit.jupiter.api.condition.EnabledIf; import java.io.IOException; import java.util.List; @@ -13,14 +12,13 @@ /** * Unit tests for GNOME keyring access via DBUS. */ -@EnabledOnOs(OS.LINUX) public class SecretServiceKeychainAccessTest { private static boolean isInstalled; @BeforeAll public static void checkSystemAndSetup() throws IOException { - ProcessBuilder dbusSend = new ProcessBuilder("dbus-send","--print-reply","--dest=org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus.ListNames"); + ProcessBuilder dbusSend = new ProcessBuilder("dbus-send", "--print-reply", "--dest=org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus.ListNames"); ProcessBuilder grep = new ProcessBuilder("grep", "org.gnome.keyring"); try { Process end = ProcessBuilder.startPipeline(List.of(dbusSend, grep)).get(1); @@ -36,10 +34,13 @@ public static void checkSystemAndSetup() throws IOException { @Test - public void testIsSupported(){ + @EnabledIf("isXdgDisplayEnvVarSet") + public void testIsSupported() { SecretServiceKeychainAccess secretService = new SecretServiceKeychainAccess(); Assertions.assertEquals(isInstalled, secretService.isSupported()); } - -} + public boolean isXdgDisplayEnvVarSet() { + return System.getenv("DISPLAY") != null; + } +} \ No newline at end of file From c9093fb8693a9f28739e4b280e8d062d581f7a70 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Thu, 1 Jun 2023 17:24:26 +0200 Subject: [PATCH 19/33] Do not remove supressions.xml, just remove content. --- suppression.xml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 suppression.xml diff --git a/suppression.xml b/suppression.xml new file mode 100644 index 0000000..cbc052c --- /dev/null +++ b/suppression.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file From b39b0fff5433e0e88f7bb8bf3d76223d5a253bc9 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Sat, 3 Jun 2023 14:26:34 +0200 Subject: [PATCH 20/33] Show icons for flatpacked app --- .../linux/tray/AppindicatorTrayMenuController.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java index b6f4cb2..d119455 100644 --- a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java +++ b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java @@ -47,6 +47,16 @@ public void showTrayIcon(Consumer iconLoader, Runnable runnable, private void showTrayIconWithSVG(String s) { try (var arena = Arena.openConfined()) { + // flatpak + if (null != System.getProperty("cryptomator.buildNumber") && System.getProperty("cryptomator.buildNumber").startsWith("flatpak")) { + indicator = app_indicator_new(arena.allocateUtf8String(APP_INDICATOR_ID), + arena.allocateUtf8String(s), + APP_INDICATOR_CATEGORY_APPLICATION_STATUS()); + return; + } + + + // AppImage and ppa var appdir = System.getenv("APPDIR"); if (null == appdir || appdir.isBlank()) { appdir = ""; @@ -57,7 +67,8 @@ private void showTrayIconWithSVG(String s) { indicator = app_indicator_new_with_path(arena.allocateUtf8String(APP_INDICATOR_ID), arena.allocateUtf8String(s), APP_INDICATOR_CATEGORY_APPLICATION_STATUS(), - // find tray icons theme in mounted AppImage + // find tray icons theme in mounted AppImage / installed on system by ppa + // depending on preceding 'appdir' arena.allocateUtf8String(appdir + "/usr/share/icons/hicolor/symbolic/apps")); } } From 6b482daea4e114defa04611e394eebf2c3020da2 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Wed, 7 Jun 2023 14:22:42 +0200 Subject: [PATCH 21/33] Remove stack trace from log messages --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f03ddfd..5ea8be2 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ 1.3.0-beta1 1.8.1-jdk17 1.3.0 - 1.3.1 + 1.3.2 32.0.0-jre 1.7.36 3.12.0 From 36b1ee47da9c4a196cf4000dc6db1c04e88a2601 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Thu, 8 Jun 2023 15:41:56 +0200 Subject: [PATCH 22/33] Provide a KeychainAccessProvider for kdewallet as well --- src/main/java/module-info.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 49ef0b8..a649eb4 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -1,6 +1,7 @@ import org.cryptomator.integrations.keychain.KeychainAccessProvider; import org.cryptomator.integrations.revealpath.RevealPathService; import org.cryptomator.integrations.tray.TrayMenuController; +import org.cryptomator.linux.keychain.KDEWalletKeychainAccess; import org.cryptomator.linux.keychain.SecretServiceKeychainAccess; import org.cryptomator.linux.revealpath.DBusSendRevealPathService; import org.cryptomator.linux.tray.AppindicatorTrayMenuController; @@ -15,7 +16,7 @@ requires org.purejava.kwallet; requires secret.service; - provides KeychainAccessProvider with SecretServiceKeychainAccess; + provides KeychainAccessProvider with SecretServiceKeychainAccess, KDEWalletKeychainAccess; provides RevealPathService with DBusSendRevealPathService; provides TrayMenuController with AppindicatorTrayMenuController; From 5b18c4a84c0f8ed05980146f598d7501790aba6d Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Fri, 9 Jun 2023 16:02:22 +0200 Subject: [PATCH 23/33] Add @DBusInterfaceName("org.kde.KWallet") to D-Bus interface KWallet and move it to org.purejava.kwallet --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5ea8be2..6a5373a 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ 1.3.0-beta1 1.8.1-jdk17 - 1.3.0 + 1.3.1 1.3.2 32.0.0-jre 1.7.36 From 464950175d38a2ef0de5c777c99ff3baa693aa47 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Wed, 14 Jun 2023 05:58:41 +0200 Subject: [PATCH 24/33] Fix import --- .../org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java b/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java index e49704f..5478199 100644 --- a/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java +++ b/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java @@ -10,7 +10,7 @@ import org.freedesktop.dbus.exceptions.DBusConnectionException; import org.freedesktop.dbus.exceptions.DBusException; import org.freedesktop.dbus.exceptions.DBusExecutionException; -import org.kde.KWallet; +import org.purejava.kwallet.KWallet; import org.purejava.kwallet.KDEWallet; import org.purejava.kwallet.Static; import org.slf4j.Logger; From be4da362e2a715f15b264922e4b6f49109a5e52c Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Wed, 14 Jun 2023 06:00:17 +0200 Subject: [PATCH 25/33] Introduce JVM property for the SVG image loading path --- README.md | 8 ++++- .../tray/AppindicatorTrayMenuController.java | 35 ++++++++++--------- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 4a7a447..cf0b3ca 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,8 @@ # integrations-linux -Linux-specific implemenations of the integrations-api +Linux-specific implemenations of the [integrations-api](https://github.com/cryptomator/integrations-api). + +# Config + +This project uses the following JVM properties: +* `cryptomator.integrationsLinux.appIndicator.svgSource` - specifies the path from which the svg images are loaded + diff --git a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java index d119455..a66680b 100644 --- a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java +++ b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java @@ -18,6 +18,7 @@ import java.lang.foreign.MemorySegment; import java.lang.foreign.SegmentScope; import java.util.List; +import java.util.Optional; import java.util.function.Consumer; import static org.purejava.appindicator.app_indicator_h.*; @@ -27,10 +28,12 @@ @OperatingSystem(OperatingSystem.Value.LINUX) public class AppindicatorTrayMenuController implements TrayMenuController { private static final String APP_INDICATOR_ID = "org.cryptomator.Cryptomator"; + private static final String SVG_SOURCE_PROPERTY = "cryptomator.integrationsLinux.appIndicator.svgSource"; private static final SegmentScope SCOPE = SegmentScope.global(); private MemorySegment indicator; private MemorySegment menu = gtk_menu_new(); + private Optional svgSourcePath; @CheckAvailability public static boolean isAvailable() { @@ -47,29 +50,27 @@ public void showTrayIcon(Consumer iconLoader, Runnable runnable, private void showTrayIconWithSVG(String s) { try (var arena = Arena.openConfined()) { + svgSourcePath = Optional.ofNullable(System.getProperty(SVG_SOURCE_PROPERTY)); // flatpak - if (null != System.getProperty("cryptomator.buildNumber") && System.getProperty("cryptomator.buildNumber").startsWith("flatpak")) { + if (svgSourcePath.isEmpty()) { indicator = app_indicator_new(arena.allocateUtf8String(APP_INDICATOR_ID), arena.allocateUtf8String(s), APP_INDICATOR_CATEGORY_APPLICATION_STATUS()); - return; - } - - // AppImage and ppa - var appdir = System.getenv("APPDIR"); - if (null == appdir || appdir.isBlank()) { - appdir = ""; - } - if (appdir.endsWith("/")) { - appdir = StringUtils.chop(appdir); + } else { + var appdir = System.getenv("APPDIR"); + if (null == appdir || appdir.isBlank()) { + appdir = ""; + } + if (appdir.endsWith("/")) { + appdir = StringUtils.chop(appdir); + } + indicator = app_indicator_new_with_path(arena.allocateUtf8String(APP_INDICATOR_ID), + arena.allocateUtf8String(s), + APP_INDICATOR_CATEGORY_APPLICATION_STATUS(), + // find tray icons theme in mounted AppImage / installed on system by ppa + arena.allocateUtf8String(appdir + svgSourcePath.get())); } - indicator = app_indicator_new_with_path(arena.allocateUtf8String(APP_INDICATOR_ID), - arena.allocateUtf8String(s), - APP_INDICATOR_CATEGORY_APPLICATION_STATUS(), - // find tray icons theme in mounted AppImage / installed on system by ppa - // depending on preceding 'appdir' - arena.allocateUtf8String(appdir + "/usr/share/icons/hicolor/symbolic/apps")); } } From 9b8082ff5d0c6d1f7d976698cf2898b9969c1df7 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Thu, 15 Jun 2023 06:45:38 +0200 Subject: [PATCH 26/33] Code improvements and changes Discussion: https://github.com/cryptomator/integrations-linux/pull/22#pullrequestreview-1479004107 --- README.md | 2 +- .../linux/tray/AppindicatorTrayMenuController.java | 11 ++--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index cf0b3ca..9b3ecdf 100644 --- a/README.md +++ b/README.md @@ -4,5 +4,5 @@ Linux-specific implemenations of the [integrations-api](https://github.com/crypt # Config This project uses the following JVM properties: -* `cryptomator.integrationsLinux.appIndicator.svgSource` - specifies the path from which the svg images are loaded +* `cryptomator.integrationsLinux.trayIconsDir` - specifies the directory from which svg images for the tray icon are loaded diff --git a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java index a66680b..3fd8ea2 100644 --- a/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java +++ b/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java @@ -28,7 +28,7 @@ @OperatingSystem(OperatingSystem.Value.LINUX) public class AppindicatorTrayMenuController implements TrayMenuController { private static final String APP_INDICATOR_ID = "org.cryptomator.Cryptomator"; - private static final String SVG_SOURCE_PROPERTY = "cryptomator.integrationsLinux.appIndicator.svgSource"; + private static final String SVG_SOURCE_PROPERTY = "cryptomator.integrationsLinux.trayIconsDir"; private static final SegmentScope SCOPE = SegmentScope.global(); private MemorySegment indicator; @@ -58,18 +58,11 @@ private void showTrayIconWithSVG(String s) { APP_INDICATOR_CATEGORY_APPLICATION_STATUS()); // AppImage and ppa } else { - var appdir = System.getenv("APPDIR"); - if (null == appdir || appdir.isBlank()) { - appdir = ""; - } - if (appdir.endsWith("/")) { - appdir = StringUtils.chop(appdir); - } indicator = app_indicator_new_with_path(arena.allocateUtf8String(APP_INDICATOR_ID), arena.allocateUtf8String(s), APP_INDICATOR_CATEGORY_APPLICATION_STATUS(), // find tray icons theme in mounted AppImage / installed on system by ppa - arena.allocateUtf8String(appdir + svgSourcePath.get())); + arena.allocateUtf8String(svgSourcePath.get())); } } } From a6484652a4f09612dafde9f0529aba652b6268dd Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Thu, 15 Jun 2023 20:05:52 +0200 Subject: [PATCH 27/33] Move update to kdewallet 1.3.1 to a separate PR --- pom.xml | 2 +- .../org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 6a5373a..5ea8be2 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ 1.3.0-beta1 1.8.1-jdk17 - 1.3.1 + 1.3.0 1.3.2 32.0.0-jre 1.7.36 diff --git a/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java b/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java index 5478199..e49704f 100644 --- a/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java +++ b/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java @@ -10,7 +10,7 @@ import org.freedesktop.dbus.exceptions.DBusConnectionException; import org.freedesktop.dbus.exceptions.DBusException; import org.freedesktop.dbus.exceptions.DBusExecutionException; -import org.purejava.kwallet.KWallet; +import org.kde.KWallet; import org.purejava.kwallet.KDEWallet; import org.purejava.kwallet.Static; import org.slf4j.Logger; From d01941819e77535cb29e58f22a95d8e0c2931ac8 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Fri, 16 Jun 2023 17:52:01 +0200 Subject: [PATCH 28/33] Revert "Provide a KeychainAccessProvider for kdewallet as well" This reverts commit 36b1ee47da9c4a196cf4000dc6db1c04e88a2601. Changes regarding kdewallet will be included in a separate PR --- src/main/java/module-info.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index a649eb4..49ef0b8 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -1,7 +1,6 @@ import org.cryptomator.integrations.keychain.KeychainAccessProvider; import org.cryptomator.integrations.revealpath.RevealPathService; import org.cryptomator.integrations.tray.TrayMenuController; -import org.cryptomator.linux.keychain.KDEWalletKeychainAccess; import org.cryptomator.linux.keychain.SecretServiceKeychainAccess; import org.cryptomator.linux.revealpath.DBusSendRevealPathService; import org.cryptomator.linux.tray.AppindicatorTrayMenuController; @@ -16,7 +15,7 @@ requires org.purejava.kwallet; requires secret.service; - provides KeychainAccessProvider with SecretServiceKeychainAccess, KDEWalletKeychainAccess; + provides KeychainAccessProvider with SecretServiceKeychainAccess; provides RevealPathService with DBusSendRevealPathService; provides TrayMenuController with AppindicatorTrayMenuController; From 24db1e9a28533befe4285f818085d7a618979fe7 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Mon, 19 Jun 2023 10:09:06 +0200 Subject: [PATCH 29/33] Update kdewallet to 1.3.1 (#23) Provide a KeychainAccessProvider for kdewallet as well --- pom.xml | 2 +- src/main/java/module-info.java | 3 ++- .../cryptomator/linux/keychain/KDEWalletKeychainAccess.java | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 0452b78..4301aa4 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ 1.3.0-beta1 1.8.1-jdk17 - 1.3.0 + 1.3.1 1.3.0 32.0.0-jre 1.7.36 diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 49ef0b8..a649eb4 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -1,6 +1,7 @@ import org.cryptomator.integrations.keychain.KeychainAccessProvider; import org.cryptomator.integrations.revealpath.RevealPathService; import org.cryptomator.integrations.tray.TrayMenuController; +import org.cryptomator.linux.keychain.KDEWalletKeychainAccess; import org.cryptomator.linux.keychain.SecretServiceKeychainAccess; import org.cryptomator.linux.revealpath.DBusSendRevealPathService; import org.cryptomator.linux.tray.AppindicatorTrayMenuController; @@ -15,7 +16,7 @@ requires org.purejava.kwallet; requires secret.service; - provides KeychainAccessProvider with SecretServiceKeychainAccess; + provides KeychainAccessProvider with SecretServiceKeychainAccess, KDEWalletKeychainAccess; provides RevealPathService with DBusSendRevealPathService; provides TrayMenuController with AppindicatorTrayMenuController; diff --git a/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java b/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java index e49704f..5478199 100644 --- a/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java +++ b/src/main/java/org/cryptomator/linux/keychain/KDEWalletKeychainAccess.java @@ -10,7 +10,7 @@ import org.freedesktop.dbus.exceptions.DBusConnectionException; import org.freedesktop.dbus.exceptions.DBusException; import org.freedesktop.dbus.exceptions.DBusExecutionException; -import org.kde.KWallet; +import org.purejava.kwallet.KWallet; import org.purejava.kwallet.KDEWallet; import org.purejava.kwallet.Static; import org.slf4j.Logger; From e6366ab5e04ee5b50ad87ef25beedf3ac773fcbb Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Wed, 12 Jul 2023 12:11:06 +0200 Subject: [PATCH 30/33] Bump prg.purejava:libappindicator-gtk3-java-minimal to 1.3.3 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6a5373a..680126e 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ 1.3.0-beta1 1.8.1-jdk17 1.3.1 - 1.3.2 + 1.3.3 32.0.0-jre 1.7.36 3.12.0 From 936d61685171c178d37de32454b9b6eaba83b889 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Wed, 12 Jul 2023 12:49:14 +0200 Subject: [PATCH 31/33] Bump org.cryptomator:integrations-api to 1.3.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 680126e..6ef8aa9 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ - 1.3.0-beta1 + 1.3.0 1.8.1-jdk17 1.3.1 1.3.3 From c8a32b962ef91511096b576fe154472f5dc38f81 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Fri, 21 Jul 2023 06:41:15 +0200 Subject: [PATCH 32/33] Update kdewallet to 1.3.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4301aa4..2a4d368 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ 1.3.0-beta1 1.8.1-jdk17 - 1.3.1 + 1.3.2 1.3.0 32.0.0-jre 1.7.36 From 8a07458be3c2194a939bcb33ad8cb1d1358f194d Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Fri, 15 Sep 2023 12:20:13 +0200 Subject: [PATCH 33/33] update appindicator from 1.3.3 to 1.3.4 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 73198e7..fa77a77 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ 1.3.0 1.8.1-jdk17 1.3.2 - 1.3.3 + 1.3.4 32.0.0-jre 1.7.36 3.12.0