diff --git a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/ConsoleManager.java b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/ConsoleManager.java index 56a87e21dbe..51b7b1ecdf8 100644 --- a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/ConsoleManager.java +++ b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/ConsoleManager.java @@ -47,6 +47,7 @@ import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartReference; +import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PerspectiveAdapter; import org.eclipse.ui.PlatformUI; @@ -156,16 +157,24 @@ public void partInputChanged(IWorkbenchPartReference partRef) { public ConsoleManager() { perspectiveListener = new ConsoleManagerPerspectiveListener(); partListener = new ConsoleManagerPartListener(); + } - if (PlatformUI.isWorkbenchRunning() && PlatformUI.getWorkbench() != null - && PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null) { - PlatformUI.getWorkbench().getActiveWorkbenchWindow().addPerspectiveListener(perspectiveListener); - - IPartService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService(); + public void addWindowAndPerspectiveListeners(IWorkbenchWindow window) { + if (PlatformUI.isWorkbenchRunning() && window != null) { + window.addPerspectiveListener(perspectiveListener); + IPartService service = window.getPartService(); service.addPartListener(partListener); } } + public void removeWindowAndPerspectiveListeners(IWorkbenchWindow window) { + if (PlatformUI.isWorkbenchRunning() && window != null) { + window.removePerspectiveListener(perspectiveListener); + IPartService service = window.getPartService(); + service.removePartListener(partListener); + } + } + /** * Returns the active workbench window page if the workbench is still running. * diff --git a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/listeners/AbstractWindowListener.java b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/listeners/AbstractWindowListener.java index f38bd6dc759..56664ad8257 100644 --- a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/listeners/AbstractWindowListener.java +++ b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/listeners/AbstractWindowListener.java @@ -11,6 +11,8 @@ *******************************************************************************/ package org.eclipse.terminal.view.ui.internal.listeners; +import org.eclipse.terminal.view.ui.internal.ConsoleManager; +import org.eclipse.terminal.view.ui.launcher.ITerminalConsoleViewManager; import org.eclipse.ui.IPartListener2; import org.eclipse.ui.IPartService; import org.eclipse.ui.IPerspectiveListener; @@ -85,6 +87,8 @@ public void windowClosed(IWorkbenchWindow window) { if (perspectiveListener != null) { window.removePerspectiveListener(perspectiveListener); } + ConsoleManager consoleViewManager = (ConsoleManager) window.getService(ITerminalConsoleViewManager.class); + consoleViewManager.removeWindowAndPerspectiveListeners(window); } } @@ -119,6 +123,8 @@ public void windowOpened(IWorkbenchWindow window) { } } + ConsoleManager consoleViewManager = (ConsoleManager) window.getService(ITerminalConsoleViewManager.class); + consoleViewManager.addWindowAndPerspectiveListeners(window); initialized = true; } }