|
@@ -34,6 +34,7 @@ import com.dmdirc.ui.interfaces.FrameListener;
|
34
|
34
|
|
35
|
35
|
import java.awt.event.ActionEvent;
|
36
|
36
|
import java.awt.event.ActionListener;
|
|
37
|
+import java.util.Collections;
|
37
|
38
|
import java.util.HashMap;
|
38
|
39
|
import java.util.Map;
|
39
|
40
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
@@ -73,12 +74,9 @@ public final class WindowMenuFrameManager extends JMenu implements
|
73
|
74
|
/** Swing controller. */
|
74
|
75
|
private final SwingController controller;
|
75
|
76
|
/** Window -> menu map. */
|
76
|
|
- private Map<FrameContainer, FrameContainerMenu> menus =
|
77
|
|
- new HashMap<FrameContainer, FrameContainerMenu>();
|
78
|
|
- private Map<FrameContainer, FrameContainerMenuItem> items =
|
79
|
|
- new HashMap<FrameContainer, FrameContainerMenuItem>();
|
80
|
|
- private Map<FrameContainer, FrameContainerMenuItem> menuItems =
|
81
|
|
- new HashMap<FrameContainer, FrameContainerMenuItem>();
|
|
77
|
+ private final Map<FrameContainer, FrameContainerMenu> menus;
|
|
78
|
+ private final Map<FrameContainer, FrameContainerMenuItem> items;
|
|
79
|
+ private final Map<FrameContainer, FrameContainerMenuItem> menuItems;
|
82
|
80
|
|
83
|
81
|
/**
|
84
|
82
|
* Creates a new instance of WindowMenuFrameManager.
|
|
@@ -89,6 +87,13 @@ public final class WindowMenuFrameManager extends JMenu implements
|
89
|
87
|
super();
|
90
|
88
|
this.controller = controller;
|
91
|
89
|
|
|
90
|
+ menus = Collections.synchronizedMap(new HashMap<FrameContainer,
|
|
91
|
+ FrameContainerMenu>());
|
|
92
|
+ items = Collections.synchronizedMap(new HashMap<FrameContainer,
|
|
93
|
+ FrameContainerMenuItem>());
|
|
94
|
+ menuItems = Collections.synchronizedMap(new HashMap<FrameContainer,
|
|
95
|
+ FrameContainerMenuItem>());
|
|
96
|
+
|
92
|
97
|
setText("Window");
|
93
|
98
|
setMnemonic('w');
|
94
|
99
|
WindowManager.addFrameListener(this);
|
|
@@ -255,22 +260,15 @@ public final class WindowMenuFrameManager extends JMenu implements
|
255
|
260
|
@Override
|
256
|
261
|
public void selectionChanged(final Window window) {
|
257
|
262
|
activeWindow = window;
|
258
|
|
- final Map<FrameContainer, SelectionListener> allItems =
|
259
|
|
- new HashMap<FrameContainer, SelectionListener>();
|
260
|
|
- synchronized (allItems) {
|
261
|
|
- allItems.putAll(menus);
|
262
|
|
-
|
263
|
|
- for (SelectionListener menuItem : allItems.values()) {
|
264
|
|
- menuItem.selectionChanged(window);
|
265
|
|
- }
|
266
|
|
-
|
267
|
|
- allItems.clear();
|
268
|
|
- allItems.putAll(items);
|
269
|
|
- allItems.putAll(menuItems);
|
270
|
|
-
|
271
|
|
- for (SelectionListener menuItem : allItems.values()) {
|
272
|
|
- menuItem.selectionChanged(window);
|
273
|
|
- }
|
|
263
|
+ //iterate over menu items seperately here to simplify code in listeners
|
|
264
|
+ for (SelectionListener menuItem : menus.values()) {
|
|
265
|
+ menuItem.selectionChanged(window);
|
|
266
|
+ }
|
|
267
|
+ for (SelectionListener menuItem : items.values()) {
|
|
268
|
+ menuItem.selectionChanged(window);
|
|
269
|
+ }
|
|
270
|
+ for (SelectionListener menuItem : menuItems.values()) {
|
|
271
|
+ menuItem.selectionChanged(window);
|
274
|
272
|
}
|
275
|
273
|
}
|
276
|
274
|
|