diff --git a/src/main/java/cz/kamma/jkeepass/KeepassApp.java b/src/main/java/cz/kamma/jkeepass/KeepassApp.java index 50b60a2..29a44b3 100644 --- a/src/main/java/cz/kamma/jkeepass/KeepassApp.java +++ b/src/main/java/cz/kamma/jkeepass/KeepassApp.java @@ -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"); } /**