diff --git a/pom.xml b/pom.xml
index 725e3d7c2..52cee0e48 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
2.1.0-rc1
2.4.5
- 1.1.0
+ 1.2.0-beta1
1.1.2
1.1.2
1.1.0
diff --git a/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java b/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java
index 79f1dd628..c82cea239 100644
--- a/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java
+++ b/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java
@@ -1,5 +1,6 @@
package org.cryptomator.ui.traymenu;
+import com.google.common.base.Preconditions;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.integrations.common.CheckAvailability;
import org.cryptomator.integrations.common.Priority;
@@ -19,6 +20,8 @@ import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
import java.util.List;
@CheckAvailability
@@ -28,6 +31,7 @@ public class AwtTrayMenuController implements TrayMenuController {
private static final Logger LOG = LoggerFactory.getLogger(AwtTrayMenuController.class);
private final PopupMenu menu = new PopupMenu();
+ private TrayIcon trayIcon;
@CheckAvailability
public static boolean isAvailable() {
@@ -37,7 +41,7 @@ public class AwtTrayMenuController implements TrayMenuController {
@Override
public void showTrayIcon(byte[] rawImageData, Runnable defaultAction, String tooltip) throws TrayMenuException {
var image = Toolkit.getDefaultToolkit().createImage(rawImageData);
- var trayIcon = new TrayIcon(image, tooltip, menu);
+ trayIcon = new TrayIcon(image, tooltip, menu);
trayIcon.setImageAutoSize(true);
if (SystemUtils.IS_OS_WINDOWS) {
@@ -58,6 +62,18 @@ public class AwtTrayMenuController implements TrayMenuController {
addChildren(menu, items);
}
+
+ @Override
+ public void onBeforeOpenMenu(Runnable listener) {
+ Preconditions.checkNotNull(this.trayIcon);
+ this.trayIcon.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ listener.run();
+ }
+ });
+ }
+
private void addChildren(Menu menu, List items) {
for (var item : items) {
// TODO: use Pattern Matching for switch, once available
diff --git a/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java b/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java
index ea7358770..e96446143 100644
--- a/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java
+++ b/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java
@@ -3,6 +3,7 @@ package org.cryptomator.ui.traymenu;
import com.google.common.base.Preconditions;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.vaults.Vault;
+import org.cryptomator.common.vaults.VaultListManager;
import org.cryptomator.integrations.tray.ActionItem;
import org.cryptomator.integrations.tray.SeparatorItem;
import org.cryptomator.integrations.tray.SubMenuItem;
@@ -63,6 +64,11 @@ public class TrayMenuBuilder {
try (var image = getClass().getResourceAsStream(SystemUtils.IS_OS_MAC_OSX ? TRAY_ICON_MAC : TRAY_ICON)) {
trayMenu.showTrayIcon(image.readAllBytes(), this::showMainWindow, "Cryptomator");
+ trayMenu.onBeforeOpenMenu(() -> {
+ for (Vault vault : vaults) {
+ VaultListManager.redetermineVaultState(vault);
+ }
+ });
rebuildMenu();
initialized = true;
} catch (IOException e) {