removed tray icon
This commit is contained in:
parent
392e70ba01
commit
d0f93b19a9
@ -8,12 +8,8 @@ import java.awt.GridBagConstraints;
|
|||||||
import java.awt.GridBagLayout;
|
import java.awt.GridBagLayout;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.Insets;
|
import java.awt.Insets;
|
||||||
import java.awt.MenuItem;
|
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
import java.awt.PopupMenu;
|
|
||||||
import java.awt.SystemTray;
|
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.TrayIcon;
|
|
||||||
import java.awt.datatransfer.StringSelection;
|
import java.awt.datatransfer.StringSelection;
|
||||||
import java.awt.event.ComponentAdapter;
|
import java.awt.event.ComponentAdapter;
|
||||||
import java.awt.event.ComponentEvent;
|
import java.awt.event.ComponentEvent;
|
||||||
@ -86,8 +82,6 @@ public class KeepassApp extends JFrame {
|
|||||||
private static final int MAX_RECENT_FILES = 5;
|
private static final int MAX_RECENT_FILES = 5;
|
||||||
private File currentFile;
|
private File currentFile;
|
||||||
private String currentPassword;
|
private String currentPassword;
|
||||||
|
|
||||||
private TrayIcon trayIcon;
|
|
||||||
|
|
||||||
// Menu items that need state management
|
// Menu items that need state management
|
||||||
private JMenuItem menuSave;
|
private JMenuItem menuSave;
|
||||||
@ -122,11 +116,7 @@ public class KeepassApp extends JFrame {
|
|||||||
public void windowClosing(WindowEvent e) {
|
public void windowClosing(WindowEvent e) {
|
||||||
saveWindowState();
|
saveWindowState();
|
||||||
saveComponentState();
|
saveComponentState();
|
||||||
if (SystemTray.isSupported() && trayIcon != null) {
|
System.exit(0);
|
||||||
setVisible(false);
|
|
||||||
} else {
|
|
||||||
System.exit(0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -148,11 +138,6 @@ public class KeepassApp extends JFrame {
|
|||||||
|
|
||||||
// Try to load last opened database
|
// Try to load last opened database
|
||||||
loadLastDatabase();
|
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() {
|
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() {
|
private JFrame createRestoreFrame() {
|
||||||
JFrame restoreFrame = new JFrame("JKeepass - Click to Restore");
|
JFrame restoreFrame = new JFrame("JKeepass - Click to Restore");
|
||||||
restoreFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
|
restoreFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
|
||||||
@ -252,39 +180,9 @@ public class KeepassApp extends JFrame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void minimizeToCustomTray() {
|
private void minimizeToCustomTray() {
|
||||||
if (SystemTray.isSupported() && trayIcon != null) {
|
// Lock and minimize
|
||||||
setVisible(false);
|
lockDatabase();
|
||||||
} else {
|
setVisible(false);
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initMenuBar() {
|
private void initMenuBar() {
|
||||||
@ -295,7 +193,7 @@ public class KeepassApp extends JFrame {
|
|||||||
JMenuItem openItem = new JMenuItem("Open Database...");
|
JMenuItem openItem = new JMenuItem("Open Database...");
|
||||||
recentMenu = new JMenu("Open Recent");
|
recentMenu = new JMenu("Open Recent");
|
||||||
menuSave = new JMenuItem("Save");
|
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");
|
menuLock = new JMenuItem("Lock Database");
|
||||||
JMenuItem exitItem = new JMenuItem("Exit");
|
JMenuItem exitItem = new JMenuItem("Exit");
|
||||||
|
|
||||||
@ -541,14 +439,7 @@ public class KeepassApp extends JFrame {
|
|||||||
statusBar.add(lockBtn, BorderLayout.EAST);
|
statusBar.add(lockBtn, BorderLayout.EAST);
|
||||||
add(statusBar, BorderLayout.PAGE_END);
|
add(statusBar, BorderLayout.PAGE_END);
|
||||||
|
|
||||||
// Tray diagnostic
|
statusLabel.setText(" Ready");
|
||||||
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)");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user