diff options
author | Simeon Andreev | 2020-11-19 13:51:43 +0000 |
---|---|---|
committer | Jonah Graham | 2020-11-29 20:14:40 +0000 |
commit | d4c616896478b73850933627a3f1f2905d1611c9 (patch) | |
tree | 58ac76525f5341a9e6ce438ec87006a6f808245a | |
parent | a655f7b4a5b34ca98b084bc0bafaa8e1b42582ce (diff) | |
download | org.eclipse.cdt-d4c616896478b73850933627a3f1f2905d1611c9.tar.gz org.eclipse.cdt-d4c616896478b73850933627a3f1f2905d1611c9.tar.xz org.eclipse.cdt-d4c616896478b73850933627a3f1f2905d1611c9.zip |
Bug 486033 - Add close button to CDT Build Console toolbar
This change adds a close action
(org.eclipse.ui.console.actions.CloseConsoleAction) to the CDT build
console.
CDT accessing a closed console via BuildConsoleManager will result in
re-adding the respective console page to the console view, if the
console page was closed.
Change-Id: Ifc4d4c6ed329f1c1c7e70f7903ed660ba85306c5
Signed-off-by: Simeon Andreev <simeon.danailov.andreev@gmail.com>
4 files changed, 48 insertions, 3 deletions
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsoleManager.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsoleManager.java index 5802ca1b077..ce703f2d1f7 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsoleManager.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsoleManager.java @@ -20,6 +20,7 @@ import java.net.URI; import java.net.URL; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; import org.eclipse.cdt.core.resources.IConsole; import org.eclipse.cdt.internal.core.LocalProjectScope; @@ -55,6 +56,7 @@ import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.console.ConsolePlugin; import org.eclipse.ui.console.IConsoleConstants; +import org.eclipse.ui.console.IConsoleListener; import org.eclipse.ui.console.IConsoleView; import org.osgi.service.prefs.Preferences; @@ -114,10 +116,14 @@ public class BuildConsoleManager implements IBuildConsoleManager, IResourceChang private IProject fLastProject; + private IConsoleListener fConsoleListener; + private final AtomicBoolean fWasClosed; + /** * Default constructor. */ public BuildConsoleManager() { + fWasClosed = new AtomicBoolean(false); } /** @@ -222,6 +228,7 @@ public class BuildConsoleManager implements IBuildConsoleManager, IResourceChang problemInfoBackgroundColor.dispose(); problemHighlightedColor.dispose(); } + ConsolePlugin.getDefault().getConsoleManager().removeConsoleListener(fConsoleListener); ConsolePlugin.getDefault().getConsoleManager() .removeConsoles(new org.eclipse.ui.console.IConsole[] { fConsole }); CUIPlugin.getWorkspace().removeResourceChangeListener(this); @@ -276,12 +283,26 @@ public class BuildConsoleManager implements IBuildConsoleManager, IResourceChang errorStream = new BuildConsoleStreamDecorator(); fName = name; fContextMenuId = contextId; + fConsoleListener = new IConsoleListener() { + @Override + public void consolesAdded(org.eclipse.ui.console.IConsole[] consoles) { + // don't care + } + + @Override + public void consolesRemoved(org.eclipse.ui.console.IConsole[] consoles) { + for (org.eclipse.ui.console.IConsole console : consoles) { + if (console == fConsole) { + fWasClosed.set(true); + } + } + } + }; + ConsolePlugin.getDefault().getConsoleManager().addConsoleListener(fConsoleListener); runUI(() -> { - // add console to the Console view fConsole = createBuildConsole(fName, fContextMenuId, iconUrl); - ConsolePlugin.getDefault().getConsoleManager() - .addConsoles(new org.eclipse.ui.console.IConsole[] { fConsole }); + addConsole(); infoStream.setConsole(fConsole); infoColor = createColor(CUIPlugin.getStandardDisplay(), @@ -311,6 +332,20 @@ public class BuildConsoleManager implements IBuildConsoleManager, IResourceChang CUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this); } + public void reinitaliazeIfNecessary() { + if (!(this instanceof GlobalBuildConsoleManager)) { + GlobalBuildConsoleManager.staticReinitaliazeIfNecessary(); + } + if (fWasClosed.getAndSet(false)) { + addConsole(); + } + } + + private void addConsole() { + // add console to the Console view + ConsolePlugin.getDefault().getConsoleManager().addConsoles(new org.eclipse.ui.console.IConsole[] { fConsole }); + } + @Override public void propertyChange(PropertyChangeEvent event) { String property = event.getProperty(); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsolePage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsolePage.java index 0b0a64191a7..01d3561bee2 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsolePage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/BuildConsolePage.java @@ -83,6 +83,7 @@ import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.console.IConsoleConstants; import org.eclipse.ui.console.IConsoleView; import org.eclipse.ui.console.actions.ClearOutputAction; +import org.eclipse.ui.console.actions.CloseConsoleAction; import org.eclipse.ui.console.actions.TextViewerAction; import org.eclipse.ui.console.actions.TextViewerGotoLineAction; import org.eclipse.ui.ide.IDE; @@ -122,6 +123,7 @@ public class BuildConsolePage extends Page private NextErrorAction fNextErrorAction; private PreviousErrorAction fPreviousErrorAction; private ShowErrorAction fShowErrorAction; + private CloseConsoleAction fCloseConsoleAction; private WrapLinesAction fWrapAction; private BringToTopOnBuild fBringToTopOnBuild; @@ -276,6 +278,7 @@ public class BuildConsolePage extends Page fPreviousErrorAction = new PreviousErrorAction(this); fShowErrorAction = new ShowErrorAction(this); fBringToTopOnBuild = new BringToTopOnBuild(); + fCloseConsoleAction = new CloseConsoleAction(this.fConsole); fSaveLogAction = new CopyBuildLogAction(this); getViewer().setAutoScroll(!fIsLocked); @@ -337,6 +340,8 @@ public class BuildConsolePage extends Page mgr.appendToGroup(IConsoleConstants.OUTPUT_GROUP, fWrapAction); mgr.appendToGroup(IConsoleConstants.OUTPUT_GROUP, fClearOutputAction); mgr.appendToGroup(IConsoleConstants.OUTPUT_GROUP, fBringToTopOnBuild); + mgr.appendToGroup(IConsoleConstants.LAUNCH_GROUP, fCloseConsoleAction); + mgr.appendToGroup(IConsoleConstants.LAUNCH_GROUP, new Separator()); } protected BuildConsoleViewer getViewer() { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/GlobalBuildConsoleManager.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/GlobalBuildConsoleManager.java index 6f526dd9221..785779f2948 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/GlobalBuildConsoleManager.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/buildconsole/GlobalBuildConsoleManager.java @@ -82,6 +82,10 @@ public class GlobalBuildConsoleManager extends BuildConsoleManager { getInstance(); } + static void staticReinitaliazeIfNecessary() { + getInstance().reinitaliazeIfNecessary(); + } + /** * Stop the console and deallocate resources allocated during {@link #startup()} */ diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CUIPlugin.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CUIPlugin.java index 286741006d1..e666403002b 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CUIPlugin.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CUIPlugin.java @@ -560,6 +560,7 @@ public class CUIPlugin extends AbstractUIPlugin { fBuildConsoleManagers.put(contextId, manager); manager.startup(name, contextId, iconUrl); } + manager.reinitaliazeIfNecessary(); return manager; } |