diff --git a/options.editor/manifest.mf b/options.editor/manifest.mf --- a/options.editor/manifest.mf +++ b/options.editor/manifest.mf @@ -2,6 +2,6 @@ OpenIDE-Module: org.netbeans.modules.options.editor/1 OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/options/editor/Bundle.properties OpenIDE-Module-Layer: org/netbeans/modules/options/editor/mf-layer.xml -OpenIDE-Module-Specification-Version: 1.57 +OpenIDE-Module-Specification-Version: 1.58 AutoUpdate-Show-In-Client: false diff --git a/options.editor/src/org/netbeans/modules/options/editor/spi/OptionsFilter.java b/options.editor/src/org/netbeans/modules/options/editor/spi/OptionsFilter.java --- a/options.editor/src/org/netbeans/modules/options/editor/spi/OptionsFilter.java +++ b/options.editor/src/org/netbeans/modules/options/editor/spi/OptionsFilter.java @@ -85,14 +85,16 @@ * @param source source {@link TreeModel} - the data to show will be gathered from this model * @param acceptor acceptor specifying whether the given original tree node should or should not * be visible for given user's filter + * @param params params[0] is allowing to delegate tree model listeners to tree */ - public void installFilteringModel(JTree tree, TreeModel source, Acceptor acceptor) { + public void installFilteringModel(JTree tree, TreeModel source, Acceptor acceptor, Boolean... params) { if (!SwingUtilities.isEventDispatchThread()) { throw new IllegalStateException("Not in AWT Event Dispatch Thread"); } usedCallback.run(); - tree.setModel(new FilteringTreeModel(source, doc, acceptor)); + boolean delegatingTreeModelListeners = params.length > 0 ? params[0] : false; + tree.setModel(new FilteringTreeModel(source, doc, acceptor, delegatingTreeModelListeners)); } public interface Acceptor { @@ -105,11 +107,13 @@ private final Document filter; private final Acceptor acceptor; private final Map> category2Nodes = new HashMap>(); + private final boolean delegatingTreeModelListener; - public FilteringTreeModel(TreeModel delegate, Document filter, Acceptor acceptor) { + public FilteringTreeModel(TreeModel delegate, Document filter, Acceptor acceptor, boolean delegatingTreeModelListeners) { this.delegate = delegate; this.filter = filter; this.acceptor = acceptor; + this.delegatingTreeModelListener = delegatingTreeModelListeners; this.delegate.addTreeModelListener(this); this.filter.addDocumentListener(this); @@ -156,13 +160,17 @@ @Override public synchronized void addTreeModelListener(TreeModelListener l) { listeners.add(l); - delegate.addTreeModelListener(l); + if (delegatingTreeModelListener) { + delegate.addTreeModelListener(l); + } } @Override public synchronized void removeTreeModelListener(TreeModelListener l) { listeners.remove(l); - delegate.removeTreeModelListener(l); + if (delegatingTreeModelListener) { + delegate.removeTreeModelListener(l); + } } private synchronized Iterable getListeners() {