Remove the multicast listener when selecting item from an expand list.
authorJan Lahoda <jlahoda@netbeans.org>
Sat, 11 Aug 2012 21:22:03 +0200
changeset 178598d1d8f4e6b6c
parent 17858 82ced9993fc9
child 17860 3fdc1d02209e
Remove the multicast listener when selecting item from an expand list.
java.breadcrumbs/src/org/netbeans/modules/java/breadcrumbs/BreadCrumbComponent.java
     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              }