# HG changeset patch # Parent ca5269ed9beb211909e56b2a7d3898bd6615420a #214778: Inform SearchResultsDisplayer when it is closed diff --git a/api.search/apichanges.xml b/api.search/apichanges.xml --- a/api.search/apichanges.xml +++ b/api.search/apichanges.xml @@ -105,6 +105,29 @@ + + + Added method SearchResultsDisplayer.closed() + + + + + +

+ The new SearchResultsDisplayer.closed() is + called when the results panel is closed by the user. It can + be overriden to release all resouces held by the panel. +

+

+ Before this change, HierarchyListeners were + used to detect detaching of search results panels. But it + is quite complicated as the panels can be often detached and + attached again when they are moved from a simple pane to a + tabbed pane or vice versa. +

+
+ +
Support for URI-based searching diff --git a/api.search/manifest.mf b/api.search/manifest.mf --- a/api.search/manifest.mf +++ b/api.search/manifest.mf @@ -1,5 +1,5 @@ Manifest-Version: 1.0 OpenIDE-Module: org.netbeans.api.search OpenIDE-Module-Localizing-Bundle: org/netbeans/api/search/Bundle.properties -OpenIDE-Module-Specification-Version: 1.4 +OpenIDE-Module-Specification-Version: 1.5 diff --git a/api.search/src/org/netbeans/modules/search/ResultDisplayer.java b/api.search/src/org/netbeans/modules/search/ResultDisplayer.java --- a/api.search/src/org/netbeans/modules/search/ResultDisplayer.java +++ b/api.search/src/org/netbeans/modules/search/ResultDisplayer.java @@ -265,4 +265,9 @@ public void setInfoNode(Node infoNode) { this.infoNode = infoNode; } + + @Override + public void closed() { + resultPanel.closed(); + } } diff --git a/api.search/src/org/netbeans/modules/search/ResultView.java b/api.search/src/org/netbeans/modules/search/ResultView.java --- a/api.search/src/org/netbeans/modules/search/ResultView.java +++ b/api.search/src/org/netbeans/modules/search/ResultView.java @@ -279,6 +279,7 @@ rvp.getSearchComposition().terminate(); } tabs.remove(panel); + rvp.getSearchComposition().getSearchResultsDisplayer().closed(); if (tabs.getTabCount() == 0) { contentCards.show(this, CARD_NAME_EMPTY); updateLookup(); @@ -297,6 +298,7 @@ } singlePanel.remove(comp); contentCards.show(this, CARD_NAME_EMPTY); + rvp.getSearchComposition().getSearchResultsDisplayer().closed(); this.repaint(); } else { close(); diff --git a/api.search/src/org/netbeans/modules/search/ui/BasicAbstractResultsPanel.java b/api.search/src/org/netbeans/modules/search/ui/BasicAbstractResultsPanel.java --- a/api.search/src/org/netbeans/modules/search/ui/BasicAbstractResultsPanel.java +++ b/api.search/src/org/netbeans/modules/search/ui/BasicAbstractResultsPanel.java @@ -408,4 +408,8 @@ textDetail.showDetail(TextDetail.DH_GOTO); } } + + public void closed() { + resultsOutlineSupport.closed(); + } } \ No newline at end of file diff --git a/api.search/src/org/netbeans/modules/search/ui/ResultsOutlineSupport.java b/api.search/src/org/netbeans/modules/search/ui/ResultsOutlineSupport.java --- a/api.search/src/org/netbeans/modules/search/ui/ResultsOutlineSupport.java +++ b/api.search/src/org/netbeans/modules/search/ui/ResultsOutlineSupport.java @@ -41,7 +41,6 @@ */ package org.netbeans.modules.search.ui; -import java.awt.EventQueue; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Image; @@ -146,9 +145,7 @@ if ((e.getChangeFlags() & HierarchyEvent.DISPLAYABILITY_CHANGED) != 0) { if (outlineView.isDisplayable()) { - onAttach(); - } else { - checkDetached(this); + outlineView.expandNode(resultsNode); } } } @@ -164,31 +161,7 @@ Math.max(16, fm.getHeight()) + VERTICAL_ROW_SPACE); } - private void onAttach() { - outlineView.expandNode(resultsNode); - } - - /** - * Check whether the search results panel has been removed and, if so, - * remove hierarchy listener and call {@link #onDetach} method. - * - * Method {@link #onDetach()} is not called directly because results panel - * can be detached a attached to another parent container when result tabs - * are created and closed. (TODO: Add panelClosed API method to displayer.) - */ - private void checkDetached(final HierarchyListener listenerToRemove) { - EventQueue.invokeLater(new Runnable() { - @Override - public void run() { - if (!outlineView.isDisplayable()) { - outlineView.removeHierarchyListener(listenerToRemove); - onDetach(); - } - } - }); - } - - private synchronized void onDetach() { + public synchronized void closed() { clean(); saveColumnState(); } diff --git a/api.search/src/org/netbeans/spi/search/provider/SearchResultsDisplayer.java b/api.search/src/org/netbeans/spi/search/provider/SearchResultsDisplayer.java --- a/api.search/src/org/netbeans/spi/search/provider/SearchResultsDisplayer.java +++ b/api.search/src/org/netbeans/spi/search/provider/SearchResultsDisplayer.java @@ -134,4 +134,11 @@ */ public void setInfoNode(Node infoNode) { } + + /** + * Called right after the displayer is closed. It should be overriden to + * release all held resources. The default implementation does nothing. + */ + public void closed() { + } } \ No newline at end of file