Remove the multicast listener when selecting item from an expand list.
1.1 --- a/java.breadcrumbs/src/org/netbeans/modules/java/breadcrumbs/BreadCrumbComponent.java Sat Aug 11 21:19:03 2012 +0200
1.2 +++ b/java.breadcrumbs/src/org/netbeans/modules/java/breadcrumbs/BreadCrumbComponent.java Sat Aug 11 21:22:03 2012 +0200
1.3 @@ -346,20 +346,23 @@
1.4 expanded.validate();
1.5
1.6 final Popup popup = PopupFactory.getSharedInstance().getPopup(this, expanded, place.x, place.y - expanded.getPreferredSize().height);
1.7 + final AWTEventListener multicastListener = new AWTEventListener() {
1.8 + @Override public void eventDispatched(AWTEvent event) {
1.9 + if (event instanceof MouseEvent && ((MouseEvent) event).getClickCount() > 0) {
1.10 + Object source = event.getSource();
1.11 +
1.12 + while (source instanceof Component) {
1.13 + if (source == expanded) return ; //accept
1.14 + source = ((Component) source).getParent();
1.15 + }
1.16 +
1.17 + popup.hide();
1.18 + Toolkit.getDefaultToolkit().removeAWTEventListener(this);
1.19 + }
1.20 + }
1.21 + };
1.22
1.23 - Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
1.24 - @Override public void eventDispatched(AWTEvent event) {
1.25 - if (event instanceof MouseEvent && ((MouseEvent) event).getClickCount() > 0) {
1.26 - Object source = event.getSource();
1.27 - while (source instanceof Component) {
1.28 - if (source == expanded) return ; //accept
1.29 - source = ((Component) source).getParent();
1.30 - }
1.31 - popup.hide();
1.32 - Toolkit.getDefaultToolkit().removeAWTEventListener(this);
1.33 - }
1.34 - }
1.35 - }, AWTEvent.MOUSE_EVENT_MASK);
1.36 + Toolkit.getDefaultToolkit().addAWTEventListener(multicastListener, AWTEvent.MOUSE_EVENT_MASK);
1.37
1.38 expandManager.addPropertyChangeListener(new PropertyChangeListener() {
1.39 @Override public void propertyChange(PropertyChangeEvent evt) {
1.40 @@ -373,6 +376,7 @@
1.41 }
1.42
1.43 popup.hide();
1.44 + Toolkit.getDefaultToolkit().removeAWTEventListener(multicastListener);
1.45 }
1.46 }
1.47 }