Bläddra i källkod

Sync maps in window manager

Fixes issue 3699

Change-Id: I430bf509b3d4c4a2deea5ab5ec6e8504ee23a57b
Reviewed-on: http://gerrit.dmdirc.com/814
Automatic-Compile: DMDirc Local Commits <dmdirc@googlemail.com>
Reviewed-by: Shane Mc Cormack <shane@dmdirc.com>
tags/0.6.3
Gregory Holmes 14 år sedan
förälder
incheckning
2641ebd311

+ 20
- 22
src/com/dmdirc/addons/ui_swing/framemanager/windowmenu/WindowMenuFrameManager.java Visa fil

@@ -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
 

Laddar…
Avbryt
Spara