removed tray icon

This commit is contained in:
Radek Davidek 2026-03-09 17:36:51 +01:00
parent 392e70ba01
commit d0f93b19a9

View File

@ -8,12 +8,8 @@ import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.MenuItem;
import java.awt.Point;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
@ -86,8 +82,6 @@ public class KeepassApp extends JFrame {
private static final int MAX_RECENT_FILES = 5;
private File currentFile;
private String currentPassword;
private TrayIcon trayIcon;
// Menu items that need state management
private JMenuItem menuSave;
@ -122,11 +116,7 @@ public class KeepassApp extends JFrame {
public void windowClosing(WindowEvent e) {
saveWindowState();
saveComponentState();
if (SystemTray.isSupported() && trayIcon != null) {
setVisible(false);
} else {
System.exit(0);
}
System.exit(0);
}
});
@ -148,11 +138,6 @@ public class KeepassApp extends JFrame {
// Try to load last opened database
loadLastDatabase();
// Small delay to let OS/Window Manager settle before checking tray
Timer trayTimer = new Timer(1000, e -> initSystemTray());
trayTimer.setRepeats(false);
trayTimer.start();
}
private void loadAppIcon() {
@ -170,63 +155,6 @@ public class KeepassApp extends JFrame {
}
}
private void initSystemTray() {
try {
if (!SystemTray.isSupported()) {
return;
}
SystemTray tray = SystemTray.getSystemTray();
java.net.URL iconUrl = getClass().getResource("/icon.png");
if (iconUrl == null) return;
Image image;
try {
// Read image directly into a BufferedImage for better compatibility with XApp applet
image = javax.imageio.ImageIO.read(iconUrl);
} catch (Exception e) {
image = Toolkit.getDefaultToolkit().getImage(iconUrl);
}
PopupMenu popup = new PopupMenu();
MenuItem showItem = new MenuItem("Show JKeepass");
MenuItem lockItem = new MenuItem("Lock Database");
MenuItem exitItem = new MenuItem("Exit");
showItem.addActionListener(e -> {
setVisible(true);
setExtendedState(JFrame.NORMAL);
toFront();
});
lockItem.addActionListener(e -> lockDatabase());
exitItem.addActionListener(e -> System.exit(0));
popup.add(showItem);
popup.add(lockItem);
popup.addSeparator();
popup.add(exitItem);
trayIcon = new TrayIcon(image, "JKeepass", popup);
trayIcon.setToolTip("JKeepass - Password Manager");
trayIcon.setImageAutoSize(true);
trayIcon.addActionListener(e -> {
setVisible(true);
setExtendedState(JFrame.NORMAL);
toFront();
});
tray.add(trayIcon);
if (statusLabel != null) {
statusLabel.setText(" Ready (SysTray active)");
}
setupWindowListeners();
} catch (Exception e) {
// Silently fail if SystemTray is not available
trayIcon = null;
}
}
private JFrame createRestoreFrame() {
JFrame restoreFrame = new JFrame("JKeepass - Click to Restore");
restoreFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
@ -252,39 +180,9 @@ public class KeepassApp extends JFrame {
}
private void minimizeToCustomTray() {
if (SystemTray.isSupported() && trayIcon != null) {
setVisible(false);
} else {
// Linux Mint doesn't support SystemTray - use floating restore button
lockDatabase();
JFrame restoreFrame = createRestoreFrame();
restoreFrame.setVisible(true);
setVisible(false);
}
}
private void setupWindowListeners() {
for (java.awt.event.WindowListener wl : getWindowListeners()) {
if (!(wl instanceof WindowAdapter) || wl.getClass().getName().contains("KeepassApp")) {
removeWindowListener(wl);
}
}
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
if (trayIcon != null) {
setVisible(false);
} else {
System.exit(0);
}
}
@Override
public void windowIconified(WindowEvent e) {
if (trayIcon != null) {
setVisible(false);
}
}
});
// Lock and minimize
lockDatabase();
setVisible(false);
}
private void initMenuBar() {
@ -295,7 +193,7 @@ public class KeepassApp extends JFrame {
JMenuItem openItem = new JMenuItem("Open Database...");
recentMenu = new JMenu("Open Recent");
menuSave = new JMenuItem("Save");
JMenuItem minimizeItem = new JMenuItem(SystemTray.isSupported() ? "Minimize to Tray" : "Minimize & Lock");
JMenuItem minimizeItem = new JMenuItem("Minimize & Lock");
menuLock = new JMenuItem("Lock Database");
JMenuItem exitItem = new JMenuItem("Exit");
@ -541,14 +439,7 @@ public class KeepassApp extends JFrame {
statusBar.add(lockBtn, BorderLayout.EAST);
add(statusBar, BorderLayout.PAGE_END);
// Tray diagnostic
if (!SystemTray.isSupported()) {
statusLabel.setText(" Ready (SysTray not supported - use Lock button)");
} else if (trayIcon == null) {
statusLabel.setText(" Ready (SysTray icon failed)");
} else {
statusLabel.setText(" Ready (SysTray active)");
}
statusLabel.setText(" Ready");
}
/**