Files
i2p.itoopie/src/net/i2p/itoopie/gui/TrayManager.java
zzz 25dd896d26 Un-static part 1
Replace TrayManager.getInstance() with constructor
Pass Main to TrayManager
Create WindowHandler in TrayManager
Pass WindowHandler to RegisteredFrames
Only create ItoopieHostnameVerifier once, in gui/Main
Pass gui/Main to SettingsFrame
Pass gui/Main to ItoopieHostnameVerifier and CertificateGui
Sync on lock in ItoopieHostnameVerifier.clearRecentlyDenied()
Comment out some main() and other test code
Make some fields non-static
Remove some static initializers
Start gui/Main before the tray icon
Fixed the tray icon on Gnome with a delay in TrayManager
2022-01-11 11:05:00 -05:00

119 lines
3.3 KiB
Java

package net.i2p.itoopie.gui;
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.net.URL;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import net.i2p.itoopie.Main;
import net.i2p.itoopie.i18n.Transl;
import net.i2p.itoopie.util.IconLoader;
import net.i2p.itoopie.util.IsJar;
/**
* Manages the tray icon life.
*/
public class TrayManager {
///The tray area, or null if unsupported
protected SystemTray tray;
///Our tray icon, or null if unsupported
protected TrayIcon trayIcon;
private final net.i2p.itoopie.Main main;
/**
* Instantiate tray manager.
*/
public TrayManager(net.i2p.itoopie.Main m) {
main = m;
}
/**
* Add the tray icon to the system tray and start everything up.
*/
public synchronized void startManager() {
final WindowHandler windowHandler = new WindowHandler();
windowHandler.toggleFrames();
// so the tray icon works right on Gnome
try { Thread.sleep(500); } catch (InterruptedException ie) {}
SwingUtilities.invokeLater(new Runnable(){
public void run(){
if(SystemTray.isSupported()) {
final Image img = IconLoader.getTrayImage();
tray = SystemTray.getSystemTray();
trayIcon = new TrayIcon(img, "itoopie", getMainMenu());
trayIcon.setImageAutoSize(true); //Resize image to fit the system tray
try {
tray.add(trayIcon);
} catch (AWTException e) { e.printStackTrace(); }
trayIcon.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent arg0) {
windowHandler.toggleFrames();
}
});
}
}
});
}
/**
* @since 0.0.5 for plugin only
*/
public synchronized void stopManager() {
try {
if (trayIcon != null && SystemTray.isSupported()) {
SystemTray.getSystemTray().remove(trayIcon);
// TODO stop it
trayIcon = null;
}
} catch (Exception e) {}
}
protected void languageChanged() {
trayIcon.setPopupMenu(getMainMenu());
}
/**
* Build a popup menu, adding callbacks to the different items.
* @return popup menu
*/
public PopupMenu getMainMenu() {
PopupMenu popup = new PopupMenu();
MenuItem stopItem = new MenuItem(Transl._t("Exit itoopie"));
stopItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
new SwingWorker<Object, Object>() {
@Override
protected Object doInBackground() throws Exception {
main.beginShutdown();
return null;
}
}.execute();
}
});
popup.add(stopItem);
return popup;
}
}